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.