diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 763ae11bf..df78d010f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,7 @@
+
diff --git a/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt
index 15ffeba0c..8ea75d71c 100644
--- a/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt
+++ b/app/src/main/java/com/aurora/store/view/ui/onboarding/PermissionsFragment.kt
@@ -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)
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 34572d101..e4ef3ca27 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -200,6 +200,8 @@
"Allow installing apps from Aurora Store"
"Notifications"
"Send notifications regarding installations status"
+ "Background Downloads"
+ "Allow Aurora Store to download and update apps in background"
"Force clear installation sessions"
"Clear abandon or pending installation sessions"
"Downloads"