From dd9030cbe5740e10b9d191f7d6beebcc9a06bfc1 Mon Sep 17 00:00:00 2001 From: IndusAryan Date: Fri, 16 Feb 2024 18:43:27 +0530 Subject: [PATCH] add power manager and improve batteryoptim checker --- app/src/main/AndroidManifest.xml | 1 - .../lagradost/cloudstream3/MainActivity.kt | 25 +------- .../ui/result/ResultFragmentPhone.kt | 3 + .../ui/settings/SettingsFragment.kt | 6 ++ .../cloudstream3/utils/PowerManagerAPI.kt | 57 +++++++++++++++++++ .../lagradost/cloudstream3/utils/UIHelper.kt | 1 - app/src/main/res/values/strings.xml | 4 +- 7 files changed, 69 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a23ba7b5..8c05dc43 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,7 +14,6 @@ - diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 1bae25cd..d18cd90e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -10,7 +10,6 @@ import android.graphics.Rect import android.net.Uri import android.os.Build import android.os.Bundle -import android.provider.Settings import android.util.AttributeSet import android.util.Log import android.view.KeyEvent @@ -24,7 +23,6 @@ import androidx.activity.OnBackPressedCallback import androidx.activity.result.ActivityResultLauncher import androidx.annotation.IdRes import androidx.annotation.MainThread -import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintLayout @@ -1205,13 +1203,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { showToast(txt(R.string.unable_to_inflate, t.message ?: ""), Toast.LENGTH_LONG) null } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isAppOptimised && !isTrueTvSettings() - && !isTvSettings() && !isEmulatorSettings()) { - showBatteryOptimizationDialog() - } - changeStatusBarState(isEmulatorSettings()) + // Automatically enable jsdelivr if cant connect to raw.githubusercontent.com if (this.getKey(getString(R.string.jsdelivr_proxy_key)) == null && isNetworkAvailable()) { main { @@ -1783,20 +1776,4 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { false } } - - @RequiresApi(Build.VERSION_CODES.M) - private fun showBatteryOptimizationDialog() { - AlertDialog.Builder(this) - .setTitle(R.string.battery_dialog_title) - .setMessage(R.string.battery_dialog_message) - .setPositiveButton(R.string.ok) { _, _ -> - isAppOptimised = true - val intent = Intent() - intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS - intent.data = Uri.fromParts("package", packageName, null) - startActivity(intent) - } - .setNegativeButton(R.string.cancel, null) - .show() - } } 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 e7e50b9d..89bde945 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 @@ -66,6 +66,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.html 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.ExtractorLink import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialogInstant @@ -645,6 +646,8 @@ open class ResultFragmentPhone : FullScreenPlayer() { ), null ) { click -> + BatteryOptimizationChecker.openBatteryOptimizationSettings(requireContext()) + when (click.action) { DOWNLOAD_ACTION_DOWNLOAD -> { viewModel.handleAction( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt index 37c71134..8dedd896 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsFragment.kt @@ -19,6 +19,7 @@ import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.MaterialToolbar +import com.lagradost.cloudstream3.AcraApplication.Companion.context import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.MainSettingsBinding import com.lagradost.cloudstream3.mvvm.logError @@ -155,6 +156,11 @@ class SettingsFragment : Fragment() { return getLayoutInt() == 2 } + // phone exclusive + fun isTruePhone(): Boolean { + return !isTrueTvSettings() && !isTvSettings() && context?.isEmulatorSettings() != true + } + private fun Context.isAutoTv(): Boolean { val uiModeManager = getSystemService(Context.UI_MODE_SERVICE) as UiModeManager? // AFT = Fire TV diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt new file mode 100644 index 00000000..87db2e2d --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PowerManagerAPI.kt @@ -0,0 +1,57 @@ +package com.lagradost.cloudstream3.utils + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.Bundle +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 com.lagradost.cloudstream3.BuildConfig +import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.ui.settings.SettingsFragment + +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 + } + + fun openBatteryOptimizationSettings(context: Context) { + if (isPhoneAndRestricted()) { + try { + showBatteryOptimizationDialog(context) + } catch (e: Exception) { + Log.e("PowerManagerAPI", "Error showing battery optimization dialog", e) + } + } + } + + 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()) + } + .setNegativeButton(R.string.cancel, null) + .show() + } + + private fun isPhoneAndRestricted(): Boolean { + return SettingsFragment.isTruePhone() && isAppRestricted(context) + } +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 76142f72..49fa3618 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -59,7 +59,6 @@ import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipDrawable import com.google.android.material.chip.ChipGroup import com.lagradost.cloudstream3.CommonActivity.activity -import com.lagradost.cloudstream3.MainActivity import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.ui.result.UiImage diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4725ecb9..e5edd710 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -650,8 +650,8 @@ Yes No OK - Battery Optimization - To ensure proper Downloads and Notifications, please set Battery Optimization for CloudStream app to Unrestricted. + ◉ Disable Battery optimization + \nTo ensure proper Downloads and Notifications, please set battery optimization for CloudStream app to UNRESTRICTED. Downloading app update… Installing app update… Could not install the new version of the app