MainActivity: Warn users if battery optimizations are enabled
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -21,12 +21,14 @@
|
|||||||
package com.aurora.store
|
package com.aurora.store
|
||||||
|
|
||||||
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.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
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.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
@@ -54,6 +56,7 @@ import coil.transform.RoundedCornersTransformation
|
|||||||
import com.aurora.Constants
|
import com.aurora.Constants
|
||||||
import com.aurora.extensions.accentColor
|
import com.aurora.extensions.accentColor
|
||||||
import com.aurora.extensions.applyThemeAccent
|
import com.aurora.extensions.applyThemeAccent
|
||||||
|
import com.aurora.extensions.isMAndAbove
|
||||||
import com.aurora.extensions.isRAndAbove
|
import com.aurora.extensions.isRAndAbove
|
||||||
import com.aurora.extensions.toast
|
import com.aurora.extensions.toast
|
||||||
import com.aurora.store.data.model.NetworkStatus
|
import com.aurora.store.data.model.NetworkStatus
|
||||||
@@ -219,6 +222,12 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.menu_main, menu)
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,6 +237,10 @@ class MainActivity : AppCompatActivity() {
|
|||||||
navController.navigate(R.id.downloadFragment)
|
navController.navigate(R.id.downloadFragment)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
R.id.menu_doze_info -> {
|
||||||
|
navController.navigate(R.id.dozeWarningSheet)
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,9 +20,10 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
|
android:tint="?attr/colorControlNormal"
|
||||||
android:viewportWidth="24"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="24">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M4,19h16v-7h2v8a1,1 0,0 1,-1 1H3a1,1 0,0 1,-1 -1v-8h2v7zM14,9h5l-7,7 -7,-7h5V3h4v6z" />
|
android:pathData="M4,19h16v-7h2v8a1,1 0,0 1,-1 1H3a1,1 0,0 1,-1 -1v-8h2v7zM14,9h5l-7,7 -7,-7h5V3h4v6z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
|||||||
@@ -20,9 +20,10 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
|
android:tint="?attr/colorControlNormal"
|
||||||
android:viewportWidth="24"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="24">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M12,22C6.477,22 2,17.523 2,12S6.477,2 12,2s10,4.477 10,10 -4.477,10 -10,10zM12,20a8,8 0,1 0,0 -16,8 8,0 0,0 0,16zM11,7h2v2h-2L11,7zM11,11h2v6h-2v-6z" />
|
android:pathData="M12,22C6.477,22 2,17.523 2,12S6.477,2 12,2s10,4.477 10,10 -4.477,10 -10,10zM12,20a8,8 0,1 0,0 -16,8 8,0 0,0 0,16zM11,7h2v2h-2L11,7zM11,11h2v6h-2v-6z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
|||||||
93
app/src/main/res/layout/sheet_doze_warning.xml
Normal file
93
app/src/main/res/layout/sheet_doze_warning.xml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:divider="@drawable/divider"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="@dimen/padding_large"
|
||||||
|
android:showDividers="middle">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/img_icon"
|
||||||
|
android:layout_width="@dimen/icon_size_category"
|
||||||
|
android:layout_height="@dimen/icon_size_category"
|
||||||
|
android:src="@drawable/ic_download_manager"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
app:tint="@color/colorAccent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_header"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_marginStart="@dimen/margin_normal"
|
||||||
|
android:layout_marginBottom="@dimen/margin_normal"
|
||||||
|
android:layout_toEndOf="@id/img_icon"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/device_doze_title"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="18sp" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_line2"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="10"
|
||||||
|
android:text="@string/device_doze_subtitle"
|
||||||
|
android:textAlignment="viewStart" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_line3"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/bg_changelog"
|
||||||
|
android:maxLines="10"
|
||||||
|
android:text="@string/device_doze_description"
|
||||||
|
android:textAlignment="viewStart" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_line4"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="10"
|
||||||
|
android:text="@string/device_doze_extra"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
android:textColor="@color/colorRed" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:weightSum="2">
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btn_secondary"
|
||||||
|
style="@style/Widget.Material3.Button.TextButton.Dialog.Flush"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="@dimen/height_button"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/action_ignore" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btn_primary"
|
||||||
|
style="@style/Widget.Material3.Button.TextButton.Dialog.Flush"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="@dimen/height_button"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/action_disable" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
@@ -19,9 +19,17 @@
|
|||||||
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_download_manager"
|
android:id="@+id/menu_download_manager"
|
||||||
android:icon="@drawable/ic_download"
|
android:icon="@drawable/ic_download"
|
||||||
android:title="@string/title_download_manager"
|
android:title="@string/title_download_manager"
|
||||||
app:showAsAction="always" />
|
app:showAsAction="always" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_doze_info"
|
||||||
|
android:icon="@drawable/ic_menu_about"
|
||||||
|
android:title="@string/device_doze_title"
|
||||||
|
android:visible="false"
|
||||||
|
app:showAsAction="always" />
|
||||||
</menu>
|
</menu>
|
||||||
@@ -458,4 +458,9 @@
|
|||||||
android:name="extra"
|
android:name="extra"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
</dialog>
|
</dialog>
|
||||||
|
<dialog
|
||||||
|
android:id="@+id/dozeWarningSheet"
|
||||||
|
android:name="com.aurora.store.view.ui.sheets.DozeWarningSheet"
|
||||||
|
android:label="DozeWarningSheet"
|
||||||
|
tools:layout="@layout/sheet_doze_warning"/>
|
||||||
</navigation>
|
</navigation>
|
||||||
|
|||||||
@@ -396,7 +396,10 @@
|
|||||||
<string name="android_market_desc">Android Market was an online store offering software applications designed for Android devices, retired in 2017.</string>
|
<string name="android_market_desc">Android Market was an online store offering software applications designed for Android devices, retired in 2017.</string>
|
||||||
<string name="app_link_amazon_appstore" translatable="false">www.amazon.com</string>
|
<string name="app_link_amazon_appstore" translatable="false">www.amazon.com</string>
|
||||||
<string name="amazon_appstore_desc">Amazon Appstore is an app store for Android-compatible platforms operated by Amazon.</string>
|
<string name="amazon_appstore_desc">Amazon Appstore is an app store for Android-compatible platforms operated by Amazon.</string>
|
||||||
|
<string name="device_doze_title">Battery optimizations detected!</string>
|
||||||
|
<string name="device_doze_subtitle">Aurora Store can not install download or update apps in background due to battery optimizations.</string>
|
||||||
|
<string name="device_doze_description">Please, disable battery optimizations to allow background operations.</string>
|
||||||
|
<string name="device_doze_extra">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.</string>
|
||||||
<string name="pref_self_update_title">Self-updates</string>
|
<string name="pref_self_update_title">Self-updates</string>
|
||||||
<string name="pref_self_update_summary">Check and notify if a new stable version of Aurora Store is available</string>
|
<string name="pref_self_update_summary">Check and notify if a new stable version of Aurora Store is available</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user