diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt
index 8adb7c33..33421a87 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt
@@ -25,6 +25,7 @@ import androidx.core.view.isVisible
import androidx.core.widget.NestedScrollView
import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.ViewModelProvider
+import androidx.preference.PreferenceManager
import com.discord.panels.OverlappingPanelsLayout
import com.discord.panels.PanelsChildGestureRegionObserver
import com.google.android.gms.cast.framework.CastButtonFactory
@@ -33,6 +34,8 @@ import com.google.android.gms.cast.framework.CastState
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.lagradost.cloudstream3.APIHolder
import com.lagradost.cloudstream3.APIHolder.updateHasTrailers
+import com.lagradost.cloudstream3.AcraApplication
+import com.lagradost.cloudstream3.AcraApplication.Companion.getKey
import com.lagradost.cloudstream3.CommonActivity
import com.lagradost.cloudstream3.CommonActivity.showToast
import com.lagradost.cloudstream3.DubStatus
@@ -67,6 +70,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.isCastApiAvailable
import com.lagradost.cloudstream3.utils.AppUtils.loadCache
import com.lagradost.cloudstream3.utils.AppUtils.openBrowser
import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker
+import com.lagradost.cloudstream3.utils.DataStore.getKey
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialogInstant
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
index abd7fb9a..08dc3729 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
@@ -31,6 +31,7 @@ import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
+import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.intentOpenAppInfo
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
@@ -44,7 +45,6 @@ import com.lagradost.safefile.SafeFile
// Change local language settings in the app.
fun getCurrentLocale(context: Context): String {
- // val dm = res.displayMetrics
val res = context.resources
val conf = res.configuration
@@ -203,6 +203,11 @@ class SettingsGeneral : PreferenceFragmentCompat() {
return@setOnPreferenceClickListener true
}
+ getPref(R.string.battery_optimisation_key)?.setOnPreferenceClickListener {
+ intentOpenAppInfo(requireContext())
+ return@setOnPreferenceClickListener true
+ }
+
fun showAdd() {
val providers = synchronized(allProviders) { allProviders.distinctBy { it.javaClass }.sortedBy { it.name } }
activity?.showDialog(
diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt
index 87db2e2d..2c476562 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt
@@ -9,49 +9,70 @@ import android.os.PowerManager
import android.provider.Settings
import android.util.Log
import androidx.appcompat.app.AlertDialog
-import com.lagradost.cloudstream3.AcraApplication.Companion.context
+import androidx.preference.PreferenceManager
import com.lagradost.cloudstream3.BuildConfig
import com.lagradost.cloudstream3.R
-import com.lagradost.cloudstream3.ui.settings.SettingsFragment
+
+const val packageName = BuildConfig.APPLICATION_ID
+const val TAG = "PowerManagerAPI"
object BatteryOptimizationChecker {
- private const val packageName = BuildConfig.APPLICATION_ID
-
private fun isAppRestricted(context: Context?): Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null) {
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
return !powerManager.isIgnoringBatteryOptimizations(context.packageName)
}
- return false // below Marshmallow, it's always unrestricted
+ return false // below Marshmallow, it's always unrestricted when app is in background
}
fun openBatteryOptimizationSettings(context: Context) {
- if (isPhoneAndRestricted()) {
- try {
- showBatteryOptimizationDialog(context)
- } catch (e: Exception) {
- Log.e("PowerManagerAPI", "Error showing battery optimization dialog", e)
- }
+ if (shouldShowBatteryOptimizationDialog(context)) {
+ showBatteryOptimizationDialog(context)
}
}
private fun showBatteryOptimizationDialog(context: Context) {
- AlertDialog.Builder(context)
- .setTitle(R.string.battery_dialog_title)
- .setMessage(R.string.battery_dialog_message)
- .setPositiveButton(R.string.ok) { _, _ ->
- val intent = Intent()
- intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
- intent.data = Uri.fromParts("package", packageName, null)
- context.startActivity(intent, Bundle())
+ val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
+
+ try {
+ context.let {
+ AlertDialog.Builder(it)
+ .setTitle(R.string.battery_dialog_title)
+ .setIcon(R.drawable.ic_battery)
+ .setMessage(R.string.battery_dialog_message)
+ .setCancelable(false)
+ .setPositiveButton(R.string.ok) { _, _ ->
+ intentOpenAppInfo(it)
+ }
+ .setNegativeButton(R.string.cancel) { _, _ ->
+ settingsManager.edit()
+ .putBoolean(context.getString(R.string.battery_optimisation_key), false)
+ .apply()
+ }
+ .show()
}
- .setNegativeButton(R.string.cancel, null)
- .show()
+ } catch (e: Exception) {
+ Log.e(TAG, "Error showing battery optimization dialog")
+ }
}
- private fun isPhoneAndRestricted(): Boolean {
- return SettingsFragment.isTruePhone() && isAppRestricted(context)
+ private fun shouldShowBatteryOptimizationDialog(context: Context): Boolean {
+ val isRestricted = isAppRestricted(context)
+ val isOptimizedShown = PreferenceManager.getDefaultSharedPreferences(context)
+ .getBoolean(context.getString(R.string.battery_optimisation_key), true)
+ return isRestricted && isOptimizedShown
+ }
+
+ fun intentOpenAppInfo(context: Context) {
+ try {
+ val intent = Intent()
+ .setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
+ .setData(Uri.fromParts("package", packageName, null))
+ context.startActivity(intent, Bundle())
+ } catch (t: Throwable) {
+ Log.e(TAG, "Unable to invoke intent for App info.")
+ }
}
}
diff --git a/app/src/main/res/drawable/ic_battery.xml b/app/src/main/res/drawable/ic_battery.xml
new file mode 100644
index 00000000..24d0a77f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_battery.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 779c733e..6eab790d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -651,8 +651,10 @@
Yes
No
OK
- ◉ Disable Battery optimization
- \nTo ensure proper Downloads and Notifications, please set battery optimization for CloudStream app to UNRESTRICTED.
+ Disable Battery optimization
+ To ensure proper downloads and notifications, please set battery optimization for CloudStream app to Unrestricted. You can change this later from General Settings.
+ battery_optimisation
+ App is already set to unrestricted
Downloading app update…
Installing app update…
Could not install the new version of the app
diff --git a/app/src/main/res/xml/settings_general.xml b/app/src/main/res/xml/settings_general.xml
index c4900bca..cdda6d85 100644
--- a/app/src/main/res/xml/settings_general.xml
+++ b/app/src/main/res/xml/settings_general.xml
@@ -6,10 +6,7 @@
android:title="@string/app_language"
android:icon="@drawable/ic_baseline_language_24" />
-
+
+ android:title="@string/title_downloads">
+
+
+
+
+
+
+
+