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"