From acd2e7a58696430a47f5e338c5a9bf4a88c1d385 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 30 Nov 2023 16:55:44 +0530 Subject: [PATCH] MainActivity: Warn users if battery optimizations are enabled Signed-off-by: Aayush Gupta --- .../java/com/aurora/store/MainActivity.kt | 13 +++ .../store/view/ui/sheets/DozeWarningSheet.kt | 59 ++++++++++++ .../main/res/drawable/ic_download_manager.xml | 3 +- app/src/main/res/drawable/ic_menu_about.xml | 3 +- .../main/res/layout/sheet_doze_warning.xml | 93 +++++++++++++++++++ app/src/main/res/menu/menu_main.xml | 10 +- .../main/res/navigation/mobile_navigation.xml | 5 + app/src/main/res/values/strings.xml | 5 +- 8 files changed, 187 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt create mode 100644 app/src/main/res/layout/sheet_doze_warning.xml diff --git a/app/src/main/java/com/aurora/store/MainActivity.kt b/app/src/main/java/com/aurora/store/MainActivity.kt index 5d61c5a01..12b4c31be 100644 --- a/app/src/main/java/com/aurora/store/MainActivity.kt +++ b/app/src/main/java/com/aurora/store/MainActivity.kt @@ -21,12 +21,14 @@ package com.aurora.store import android.Manifest +import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.content.res.ColorStateList import android.os.Build import android.os.Bundle import android.os.Environment +import android.os.PowerManager import android.provider.Settings import android.view.Menu import android.view.MenuItem @@ -54,6 +56,7 @@ import coil.transform.RoundedCornersTransformation import com.aurora.Constants import com.aurora.extensions.accentColor import com.aurora.extensions.applyThemeAccent +import com.aurora.extensions.isMAndAbove import com.aurora.extensions.isRAndAbove import com.aurora.extensions.toast import com.aurora.store.data.model.NetworkStatus @@ -219,6 +222,12 @@ class MainActivity : AppCompatActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_main, menu) + + // Show warning if battery optimizations is enabled + val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager + if (isMAndAbove() && !powerManager.isIgnoringBatteryOptimizations(packageName)) { + menu.findItem(R.id.menu_doze_info)?.isVisible = true + } return true } @@ -228,6 +237,10 @@ class MainActivity : AppCompatActivity() { navController.navigate(R.id.downloadFragment) return true } + R.id.menu_doze_info -> { + navController.navigate(R.id.dozeWarningSheet) + return true + } } return super.onOptionsItemSelected(item) } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt new file mode 100644 index 000000000..c7e31a3c6 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt @@ -0,0 +1,59 @@ +package com.aurora.store.view.ui.sheets + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.os.PowerManager +import android.provider.Settings +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.activity.result.contract.ActivityResultContracts +import com.aurora.extensions.isMAndAbove +import com.aurora.extensions.toast +import com.aurora.store.R +import com.aurora.store.databinding.SheetDozeWarningBinding + +class DozeWarningSheet : BaseBottomSheet() { + + 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) + activity?.recreate() + } else { + toast(R.string.permissions_denied) + } + dismissAllowingStateLoss() + } + } + + private var _binding: SheetDozeWarningBinding? = null + private val binding get() = _binding!! + + override fun onCreateContentView( + inflater: LayoutInflater, + container: ViewGroup, + savedInstanceState: Bundle? + ): View { + _binding = SheetDozeWarningBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { + binding.btnSecondary.setOnClickListener { dismissAllowingStateLoss() } + binding.btnPrimary.setOnClickListener { requestDozePermission() } + } + + private fun requestDozePermission() { + if (isMAndAbove()) { + val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { + data = Uri.parse("package:${requireContext().packageName}") + } + startForDozeResult.launch(intent) + } + } +} diff --git a/app/src/main/res/drawable/ic_download_manager.xml b/app/src/main/res/drawable/ic_download_manager.xml index 1ee8c3bfb..1392547a3 100644 --- a/app/src/main/res/drawable/ic_download_manager.xml +++ b/app/src/main/res/drawable/ic_download_manager.xml @@ -20,9 +20,10 @@ diff --git a/app/src/main/res/drawable/ic_menu_about.xml b/app/src/main/res/drawable/ic_menu_about.xml index 27c90d4b7..7fce67292 100644 --- a/app/src/main/res/drawable/ic_menu_about.xml +++ b/app/src/main/res/drawable/ic_menu_about.xml @@ -20,9 +20,10 @@ diff --git a/app/src/main/res/layout/sheet_doze_warning.xml b/app/src/main/res/layout/sheet_doze_warning.xml new file mode 100644 index 000000000..aa00c6093 --- /dev/null +++ b/app/src/main/res/layout/sheet_doze_warning.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index dbdbed6dd..f3e99fca3 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -19,9 +19,17 @@ + - \ No newline at end of file + + + diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index fa7e16c66..fc0222340 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -458,4 +458,9 @@ android:name="extra" app:argType="string" /> + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fdfdcd611..24509fb95 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -396,7 +396,10 @@ Android Market was an online store offering software applications designed for Android devices, retired in 2017. www.amazon.com Amazon Appstore is an app store for Android-compatible platforms operated by Amazon. - + Battery optimizations detected! + Aurora Store can not install download or update apps in background due to battery optimizations. + Please, disable battery optimizations to allow background operations. + Optionally you can choose to keep the optimizations enabled, but then you won\'t be able to take benefit of background downloads and automated updates, so choice is yours. Self-updates Check and notify if a new stable version of Aurora Store is available