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 40719849..6bb0f01f 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
@@ -449,6 +449,7 @@ open class ResultFragmentPhone : FullScreenPlayer() {
?: txt(R.string.no_data).asStringNull(context) ?: ""
showToast(txt(message, name), Toast.LENGTH_SHORT)
}
+ context?.let { openBatteryOptimizationSettings(it) }
}
resultFavorite.setOnClickListener {
viewModel.toggleFavoriteStatus(context) { newStatus: Boolean? ->
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 d63d0050..325d02e3 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,8 +31,11 @@ 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
import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.intentOpenAppInfo
import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.isAppRestricted
+import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.openBatteryOptimizationSettings
+import com.lagradost.cloudstream3.utils.BatteryOptimizationChecker.showBatteryOptimizationDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
@@ -208,7 +211,7 @@ class SettingsGeneral : PreferenceFragmentCompat() {
val ctx = context ?: return@setOnPreferenceClickListener false
if (isAppRestricted(ctx)) {
- intentOpenAppInfo(ctx)
+ showBatteryOptimizationDialog(ctx)
} else {
showToast(R.string.app_unrestricted_toast)
}
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 2b2dd384..3bea9fa4 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt
@@ -1,5 +1,6 @@
package com.lagradost.cloudstream3.utils
+import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
@@ -13,6 +14,7 @@ import androidx.preference.PreferenceManager
import com.lagradost.cloudstream3.BuildConfig
import com.lagradost.cloudstream3.CommonActivity.showToast
import com.lagradost.cloudstream3.R
+import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTruePhone
const val packageName = BuildConfig.APPLICATION_ID
const val TAG = "PowerManagerAPI"
@@ -34,7 +36,7 @@ object BatteryOptimizationChecker {
}
}
- private fun showBatteryOptimizationDialog(context: Context) {
+ fun showBatteryOptimizationDialog(context: Context) {
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
try {
@@ -43,7 +45,6 @@ object BatteryOptimizationChecker {
.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)
}
@@ -55,7 +56,7 @@ object BatteryOptimizationChecker {
.show()
}
} catch (e: Exception) {
- Log.e(TAG, "Error showing battery optimization dialog")
+ Log.e(TAG, "Error showing battery optimization dialog", e)
}
}
@@ -63,18 +64,24 @@ object BatteryOptimizationChecker {
val isRestricted = isAppRestricted(context)
val isOptimizedShown = PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(context.getString(R.string.battery_optimisation_key), true)
- return isRestricted && isOptimizedShown
+ return isRestricted && isOptimizedShown && isTruePhone()
}
fun intentOpenAppInfo(context: Context) {
+ val intent = Intent()
+
try {
- val intent = 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 - CS3/App Info", t)
- showToast(R.string.app_info_intent_error)
+ Log.e(TAG, "Unable to invoke any intent", t)
+ if (t is ActivityNotFoundException) {
+ showToast("ActivityNotFoundException")
+ } else {
+ showToast(R.string.app_info_intent_error)
+ }
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 05fa1a85..f0ededa8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -652,7 +652,12 @@
No
OK
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.
+ To ensure uninterrupted downloads and notifications for subscribed
+ TV shows, CloudStream needs permission to run in background. By pressing "OK", you\'ll be directed to App info.
+ There, scroll to 𝘼𝙥𝙥 𝙗𝙖𝙩𝙩𝙚𝙧𝙮 𝙪𝙨𝙖𝙜𝙚 and set battery usage to 𝙐𝙣𝙧𝙚𝙨𝙩𝙧𝙞𝙘𝙩𝙚𝙙. Please note, this permission
+ does not mean CS3 will drain your battery. It will only operate in the background when necessary, such as
+ when receiving notifications or downloading videos from official extensions. If you choose to cancel,
+ you can adjust this setting later in 𝙂𝙚𝙣𝙚𝙧𝙖𝙡 𝙎𝙚𝙩𝙩𝙞𝙣𝙜𝙨.
battery_optimisation
App battery usage is already set to unrestricted
Unable to open CloudStream\'s App info.