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:
Aayush Gupta
2023-11-01 18:31:36 +05:30
parent 932723d784
commit dcaf4f024a
3 changed files with 43 additions and 0 deletions

View File

@@ -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)
}