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 @@