MainActivity: Warn users if battery optimizations are enabled

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-11-30 16:55:44 +05:30
parent f4226ac9ef
commit acd2e7a586
8 changed files with 187 additions and 4 deletions

View File

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

View File

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