From 711741418baa5d673b3dd7bd740b7c260c739304 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sun, 19 Jul 2020 11:01:52 +0200 Subject: [PATCH 1/2] Detect battery optimization on startup --- .../ui/activities/SplashActivity.java | 45 ++++++++++++++++++- app/src/main/res/values/strings.xml | 4 ++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java index 58103dce..fc746e55 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java @@ -1,8 +1,13 @@ package com.dkanada.gramophone.ui.activities; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; +import android.os.Build; import android.os.Bundle; +import android.os.PowerManager; +import android.provider.Settings; import com.dkanada.gramophone.App; import com.dkanada.gramophone.R; @@ -47,7 +52,45 @@ public class SplashActivity extends AbsBaseActivity { credentialProvider = new AndroidCredentialProvider(jsonSerializer, this, logger); connectionManager = App.getConnectionManager(this, jsonSerializer, logger, httpClient); - login(); + if (detectBatteryOptimization()) { + showBatteryOptimizationDialog(); + } else { + login(); + } + } + + private boolean detectBatteryOptimization() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + String packageName = getPackageName(); + PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); + return !pm.isIgnoringBatteryOptimizations(packageName); + } + return false; + } + + private void showBatteryOptimizationDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this); + builder.setMessage(R.string.action_disable_battery_optimizations_message) + .setTitle(R.string.action_disable_battery_optimizations_title) + .setNegativeButton(R.string.action_cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + login(); + } + }) + .setPositiveButton(R.string.action_go_to_optimization_settings, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + login(); + openPowerSettings(SplashActivity.this); + } + }) + .show(); + } + + private void openPowerSettings(Context context) { + Intent intent = new Intent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); + context.startActivity(intent); } public void login() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 89411c36..9b238910 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,6 +44,10 @@ Sleep timer Set New playlist + Disable battery optimizations + Please disable battery optimizations for media playback while the screen is off + Cancel + Go to settings Albums Artists From f2f1db576eeec6395fdb08078221d4f9b6afb5f3 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sun, 19 Jul 2020 12:22:28 +0200 Subject: [PATCH 2/2] Fix battery optimizations check --- .../com/dkanada/gramophone/ui/activities/SplashActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java index fc746e55..67965aeb 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/SplashActivity.java @@ -51,7 +51,11 @@ public class SplashActivity extends AbsBaseActivity { credentialProvider = new AndroidCredentialProvider(jsonSerializer, this, logger); connectionManager = App.getConnectionManager(this, jsonSerializer, logger, httpClient); + } + @Override + protected void onResume() { + super.onResume(); if (detectBatteryOptimization()) { showBatteryOptimizationDialog(); } else { @@ -79,7 +83,6 @@ public class SplashActivity extends AbsBaseActivity { }) .setPositiveButton(R.string.action_go_to_optimization_settings, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - login(); openPowerSettings(SplashActivity.this); } })