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

@@ -28,6 +28,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

View File

@@ -21,15 +21,18 @@
package com.aurora.store.view.ui.onboarding package com.aurora.store.view.ui.onboarding
import android.Manifest import android.Manifest
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.os.PowerManager
import android.provider.Settings import android.provider.Settings
import android.view.View import android.view.View
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import com.aurora.extensions.isMAndAbove
import com.aurora.extensions.isOAndAbove import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.isRAndAbove import com.aurora.extensions.isRAndAbove
import com.aurora.extensions.isTAndAbove import com.aurora.extensions.isTAndAbove
@@ -48,6 +51,16 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
private var _binding: FragmentOnboardingPermissionsBinding? = null private var _binding: FragmentOnboardingPermissionsBinding? = null
private val binding get() = _binding!! 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 = private val startForPackageManagerResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (isOAndAbove() && requireContext().packageManager.canRequestPackageInstalls()) { 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()) { if (isRAndAbove()) {
installerList.add( installerList.add(
Permission( Permission(
@@ -114,6 +137,12 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
} }
binding.epoxyRecycler.withModels { binding.epoxyRecycler.withModels {
val dozeDisabled = if (isMAndAbove()) {
val powerManager = context?.getSystemService(Context.POWER_SERVICE) as PowerManager
powerManager.isIgnoringBatteryOptimizations(requireContext().packageName)
} else {
true
}
val writeExternalStorage = val writeExternalStorage =
if (!isRAndAbove()) isExternalStorageAccessible(requireContext()) else true if (!isRAndAbove()) isExternalStorageAccessible(requireContext()) else true
val postNotifications = if (isTAndAbove()) ActivityCompat.checkSelfPermission( val postNotifications = if (isTAndAbove()) ActivityCompat.checkSelfPermission(
@@ -139,6 +168,7 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
1 -> storageManager 1 -> storageManager
2 -> canInstallPackages 2 -> canInstallPackages
3 -> postNotifications 3 -> postNotifications
4 -> dozeDisabled
else -> false else -> false
} }
) )
@@ -148,6 +178,7 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
1 -> requestStorageManagerPermission() 1 -> requestStorageManagerPermission()
2 -> requestPackageManagerPermission() 2 -> requestPackageManagerPermission()
3 -> checkPostNotificationsPermission() 3 -> checkPostNotificationsPermission()
4 -> requestDozePermission()
} }
} }
) )
@@ -160,6 +191,15 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
_binding = null _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() { private fun checkStorageAccessPermission() {
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE) startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
} }

View File

@@ -200,6 +200,8 @@
<string name="onboarding_permission_installer_desc">"Allow installing apps from Aurora Store"</string> <string name="onboarding_permission_installer_desc">"Allow installing apps from Aurora Store"</string>
<string name="onboarding_permission_notifications">"Notifications"</string> <string name="onboarding_permission_notifications">"Notifications"</string>
<string name="onboarding_permission_notifications_desc">"Send notifications regarding installations status"</string> <string name="onboarding_permission_notifications_desc">"Send notifications regarding installations status"</string>
<string name="onboarding_permission_doze">"Background Downloads"</string>
<string name="onboarding_permission_doze_desc">"Allow Aurora Store to download and update apps in background"</string>
<string name="pref_abandon_session">"Force clear installation sessions"</string> <string name="pref_abandon_session">"Force clear installation sessions"</string>
<string name="pref_abandon_session_desc">"Clear abandon or pending installation sessions"</string> <string name="pref_abandon_session_desc">"Clear abandon or pending installation sessions"</string>
<string name="pref_app_download">"Downloads"</string> <string name="pref_app_download">"Downloads"</string>