Merge "Update BS warning to follow through on action" into qt-dev

This commit is contained in:
Salvador Martinez
2019-04-10 22:46:10 +00:00
committed by Android (Google) Code Review
2 changed files with 67 additions and 22 deletions

View File

@@ -19,6 +19,7 @@ package com.android.settingslib.fuelgauge;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.PowerManager;
import android.provider.Settings.Global;
import android.provider.Settings.Secure;
@@ -33,7 +34,25 @@ import android.util.Slog;
public class BatterySaverUtils {
private static final String TAG = "BatterySaverUtils";
public static final String EXTRA_CONFIRM_ONLY = "extra_confirm_only";
/**
* When set to "true" the notification will be a generic confirm message instead of asking the
* user if they want to turn on battery saver. If set to false the dialog will specifically
* talk about turning on battery saver and provide a button for taking the action.
*/
public static final String EXTRA_CONFIRM_TEXT_ONLY = "extra_confirm_only";
/**
* Ignored if {@link #EXTRA_CONFIRM_TEXT_ONLY} is "false". Can be set to any of the values in
* {@link PowerManager.AutoPowerSaveModeTriggers}. If set the dialog will set the power
* save mode trigger to the specified value after the user acknowledges the trigger.
*/
public static final String EXTRA_POWER_SAVE_MODE_TRIGGER = "extra_power_save_mode_trigger";
/**
* Ignored if {@link #EXTRA_CONFIRM_TEXT_ONLY} is "false". can be set to any value between
* 0-100 that will be used if {@link #EXTRA_POWER_SAVE_MODE_TRIGGER} is
* {@link PowerManager#POWER_SAVE_MODE_TRIGGER_PERCENTAGE}.
*/
public static final String EXTRA_POWER_SAVE_MODE_TRIGGER_LEVEL =
"extra_power_save_mode_trigger_level";
private BatterySaverUtils() {
}
@@ -98,7 +117,10 @@ public class BatterySaverUtils {
}
final ContentResolver cr = context.getContentResolver();
if (enable && needFirstTimeWarning && maybeShowBatterySaverConfirmation(context, false)) {
final Bundle confirmationExtras = new Bundle(1);
confirmationExtras.putBoolean(EXTRA_CONFIRM_TEXT_ONLY, false);
if (enable && needFirstTimeWarning
&& maybeShowBatterySaverConfirmation(context, confirmationExtras)) {
return false;
}
if (enable && !needFirstTimeWarning) {
@@ -118,7 +140,7 @@ public class BatterySaverUtils {
&& Global.getInt(cr, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0) == 0
&& Secure.getInt(cr,
Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, 0) == 0) {
showAutoBatterySaverSuggestion(context, false);
showAutoBatterySaverSuggestion(context, confirmationExtras);
}
}
@@ -129,34 +151,36 @@ public class BatterySaverUtils {
/**
* Shows the battery saver confirmation warning if it hasn't been acknowledged by the user in
* the past before. When confirmOnly is true, the dialog will have generic info about battery
* saver but will only update that the user has been shown the notification and take no
* further action. if confirmOnly is false it will show a more specific version of the dialog
* that toggles battery saver when acknowledged
* the past before. Various extras can be provided that will change the behavior of this
* notification as well as the ui for it.
* @param context A valid context
* @param confirmOnly Whether to show the actionless generic dialog (true) or the specific one
* that toggles battery saver (false)
* @param extras Any extras to include in the intent to trigger this confirmation that will
* help the system disambiguate what to show/do
*
* @return True if it showed the notification because it has not been previously acknowledged.
* @see #EXTRA_CONFIRM_TEXT_ONLY
* @see #EXTRA_POWER_SAVE_MODE_TRIGGER
* @see #EXTRA_POWER_SAVE_MODE_TRIGGER_LEVEL
*/
public static boolean maybeShowBatterySaverConfirmation(Context context, boolean confirmOnly) {
public static boolean maybeShowBatterySaverConfirmation(Context context, Bundle extras) {
if (Secure.getInt(context.getContentResolver(),
Secure.LOW_POWER_WARNING_ACKNOWLEDGED, 0) != 0) {
return false; // Already shown.
}
context.sendBroadcast(
getSystemUiBroadcast(ACTION_SHOW_START_SAVER_CONFIRMATION, confirmOnly));
getSystemUiBroadcast(ACTION_SHOW_START_SAVER_CONFIRMATION, extras));
return true;
}
private static void showAutoBatterySaverSuggestion(Context context, boolean confirmOnly) {
context.sendBroadcast(getSystemUiBroadcast(ACTION_SHOW_AUTO_SAVER_SUGGESTION, confirmOnly));
private static void showAutoBatterySaverSuggestion(Context context, Bundle extras) {
context.sendBroadcast(getSystemUiBroadcast(ACTION_SHOW_AUTO_SAVER_SUGGESTION, extras));
}
private static Intent getSystemUiBroadcast(String action, boolean confirmOnly) {
private static Intent getSystemUiBroadcast(String action, Bundle extras) {
final Intent i = new Intent(action);
i.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
i.setPackage(SYSUI_PACKAGE);
i.putExtra(EXTRA_CONFIRM_ONLY, confirmOnly);
i.putExtras(extras);
return i;
}

View File

@@ -22,15 +22,19 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioAttributes;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.provider.Settings.Secure;
import android.text.Annotation;
import android.text.Layout;
@@ -547,9 +551,15 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
updateNotification();
}
private void showStartSaverConfirmation(boolean confirmOnly) {
private void showStartSaverConfirmation(Bundle extras) {
if (mSaverConfirmation != null) return;
final SystemUIDialog d = new SystemUIDialog(mContext);
final boolean confirmOnly = extras.getBoolean(BatterySaverUtils.EXTRA_CONFIRM_TEXT_ONLY);
final int batterySaverTriggerMode =
extras.getInt(BatterySaverUtils.EXTRA_POWER_SAVE_MODE_TRIGGER,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
final int batterySaverTriggerLevel =
extras.getInt(BatterySaverUtils.EXTRA_POWER_SAVE_MODE_TRIGGER_LEVEL, 0);
d.setMessage(getBatterySaverDescription());
// Sad hack for http://b/78261259 and http://b/78298335. Otherwise "Battery" may be split
@@ -563,14 +573,25 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
if (confirmOnly) {
d.setTitle(R.string.battery_saver_confirmation_title_generic);
d.setPositiveButton(com.android.internal.R.string.confirm_battery_saver,
(dialog, which) -> Secure.putInt(
mContext.getContentResolver(),
Secure.LOW_POWER_WARNING_ACKNOWLEDGED,
1));
(dialog, which) -> {
final ContentResolver resolver = mContext.getContentResolver();
Secure.putInt(
resolver,
Secure.LOW_POWER_WARNING_ACKNOWLEDGED,
1);
Settings.Global.putInt(
resolver,
Global.AUTOMATIC_POWER_SAVE_MODE,
batterySaverTriggerMode);
Settings.Global.putInt(
resolver,
Global.LOW_POWER_MODE_TRIGGER_LEVEL,
batterySaverTriggerLevel);
});
} else {
d.setTitle(R.string.battery_saver_confirmation_title);
d.setPositiveButton(R.string.battery_saver_confirmation_ok,
(dialog, which) -> setSaverMode(true, false));
(dialog, which) -> setSaverMode(true, false));
d.setNegativeButton(android.R.string.cancel, null);
}
d.setShowForAllUsers(true);
@@ -731,7 +752,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
dismissLowBatteryNotification();
} else if (action.equals(ACTION_SHOW_START_SAVER_CONFIRMATION)) {
dismissLowBatteryNotification();
showStartSaverConfirmation(intent.getBooleanExtra(EXTRA_CONFIRM_ONLY, false));
showStartSaverConfirmation(intent.getExtras());
} else if (action.equals(ACTION_DISMISSED_WARNING)) {
dismissLowBatteryWarning();
} else if (ACTION_CLICKED_TEMP_WARNING.equals(action)) {