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:
@@ -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" />
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user