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