diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java b/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java index 17bdb6a0..7a984236 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java @@ -2,15 +2,12 @@ package com.cappielloantonio.tempo.ui.activity.base; import android.Manifest; import android.content.ComponentName; -import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.PowerManager; -import android.provider.Settings; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -19,9 +16,9 @@ import androidx.media3.exoplayer.offline.DownloadService; import androidx.media3.session.MediaBrowser; import androidx.media3.session.SessionToken; -import com.cappielloantonio.tempo.R; import com.cappielloantonio.tempo.service.DownloaderService; import com.cappielloantonio.tempo.service.MediaService; +import com.cappielloantonio.tempo.ui.dialog.BatteryOptimizationDialog; import com.cappielloantonio.tempo.util.Preferences; import com.cappielloantonio.tempo.util.UIUtil; import com.google.android.gms.cast.framework.CastContext; @@ -39,6 +36,8 @@ public class BaseActivity extends AppCompatActivity { super.onCreate(savedInstanceState); initializeCastContext(); initializeDownloader(); + checkBatteryOptimization(); + checkPermission(); } @Override @@ -46,8 +45,6 @@ public class BaseActivity extends AppCompatActivity { super.onStart(); setNavigationBarColor(); initializeBrowser(); - checkBatteryOptimization(); - checkPermission(); } @Override @@ -77,20 +74,8 @@ public class BaseActivity extends AppCompatActivity { } private void showBatteryOptimizationDialog() { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(R.string.activity_battery_optimizations_summary) - .setTitle(R.string.activity_battery_optimizations_title) - .setNeutralButton(R.string.battery_optimization_neutral_button, (dialog, id) -> Preferences.dontAskForOptimization()) - .setNegativeButton(R.string.battery_optimization_negative_button, null) - .setPositiveButton(R.string.battery_optimization_positive_button, (dialog, id) -> openPowerSettings()) - .show(); - } - - private void openPowerSettings() { - Intent intent = new Intent(); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); - startActivity(intent); + BatteryOptimizationDialog dialog = new BatteryOptimizationDialog(); + dialog.show(getSupportFragmentManager(), null); } private void initializeBrowser() { diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/BatteryOptimizationDialog.java b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/BatteryOptimizationDialog.java new file mode 100644 index 00000000..a0e14f11 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/dialog/BatteryOptimizationDialog.java @@ -0,0 +1,57 @@ +package com.cappielloantonio.tempo.ui.dialog; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; +import android.provider.Settings; + +import androidx.annotation.NonNull; +import androidx.annotation.OptIn; +import androidx.fragment.app.DialogFragment; +import androidx.media3.common.util.UnstableApi; + +import com.cappielloantonio.tempo.R; +import com.cappielloantonio.tempo.databinding.DialogBatteryOptimizationBinding; +import com.cappielloantonio.tempo.util.Preferences; + +@OptIn(markerClass = UnstableApi.class) +public class BatteryOptimizationDialog extends DialogFragment { + private static final String TAG = "BatteryOptimizationDialog"; + + private DialogBatteryOptimizationBinding bind; + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + bind = DialogBatteryOptimizationBinding.inflate(getLayoutInflater()); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + + builder.setView(bind.getRoot()) + .setTitle(R.string.activity_battery_optimizations_title) + .setNeutralButton(R.string.battery_optimization_neutral_button, (dialog, id) -> Preferences.dontAskForOptimization()) + .setNegativeButton(R.string.battery_optimization_negative_button, null) + .setPositiveButton(R.string.battery_optimization_positive_button, (dialog, id) -> openPowerSettings()); + + AlertDialog popup = builder.create(); + + popup.setCancelable(false); + popup.setCanceledOnTouchOutside(false); + + return popup; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + bind = null; + } + + private void openPowerSettings() { + Intent intent = new Intent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); + startActivity(intent); + } +} diff --git a/app/src/main/res/layout/dialog_battery_optimization.xml b/app/src/main/res/layout/dialog_battery_optimization.xml new file mode 100644 index 00000000..d7953baa --- /dev/null +++ b/app/src/main/res/layout/dialog_battery_optimization.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bbda93f0..f3afea13 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ Please disable battery optimizations for media playback while the screen is off. + If in trouble visit https://dontkillmyapp.com. It provides detailed instructions on how to disable any power-saving features that may affect app\'s performance. Battery Optimizations Offline mode Ignore