PermissionsFragment: Request users to disable doze during onboarding
* Required for background downloads using WorkManager expedited works Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -21,15 +21,18 @@
|
||||
package com.aurora.store.view.ui.onboarding
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.os.PowerManager
|
||||
import android.provider.Settings
|
||||
import android.view.View
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.app.ActivityCompat
|
||||
import com.aurora.extensions.isMAndAbove
|
||||
import com.aurora.extensions.isOAndAbove
|
||||
import com.aurora.extensions.isRAndAbove
|
||||
import com.aurora.extensions.isTAndAbove
|
||||
@@ -48,6 +51,16 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
|
||||
private var _binding: FragmentOnboardingPermissionsBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private val startForDozeResult =
|
||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
context?.let {
|
||||
val powerManager = it.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||
if (isMAndAbove() && powerManager.isIgnoringBatteryOptimizations(it.packageName)) {
|
||||
toast(R.string.toast_permission_granted)
|
||||
binding.epoxyRecycler.requestModelBuild()
|
||||
}
|
||||
}
|
||||
}
|
||||
private val startForPackageManagerResult =
|
||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
if (isOAndAbove() && requireContext().packageManager.canRequestPackageInstalls()) {
|
||||
@@ -85,6 +98,16 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
|
||||
)
|
||||
)
|
||||
|
||||
if (isMAndAbove()) {
|
||||
installerList.add(
|
||||
Permission(
|
||||
4,
|
||||
getString(R.string.onboarding_permission_doze),
|
||||
getString(R.string.onboarding_permission_doze_desc)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
if (isRAndAbove()) {
|
||||
installerList.add(
|
||||
Permission(
|
||||
@@ -114,6 +137,12 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
|
||||
}
|
||||
|
||||
binding.epoxyRecycler.withModels {
|
||||
val dozeDisabled = if (isMAndAbove()) {
|
||||
val powerManager = context?.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||
powerManager.isIgnoringBatteryOptimizations(requireContext().packageName)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
val writeExternalStorage =
|
||||
if (!isRAndAbove()) isExternalStorageAccessible(requireContext()) else true
|
||||
val postNotifications = if (isTAndAbove()) ActivityCompat.checkSelfPermission(
|
||||
@@ -139,6 +168,7 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
|
||||
1 -> storageManager
|
||||
2 -> canInstallPackages
|
||||
3 -> postNotifications
|
||||
4 -> dozeDisabled
|
||||
else -> false
|
||||
}
|
||||
)
|
||||
@@ -148,6 +178,7 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
|
||||
1 -> requestStorageManagerPermission()
|
||||
2 -> requestPackageManagerPermission()
|
||||
3 -> checkPostNotificationsPermission()
|
||||
4 -> requestDozePermission()
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -160,6 +191,15 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
|
||||
_binding = null
|
||||
}
|
||||
|
||||
private fun requestDozePermission() {
|
||||
if (isMAndAbove()) {
|
||||
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
|
||||
data = Uri.parse("package:${requireContext().packageName}")
|
||||
}
|
||||
startForDozeResult.launch(intent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkStorageAccessPermission() {
|
||||
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user