Update and expose the low battery tip.
This tip was punted however we need to bring it back to P. It happens when battery level is low or remaining time is less than 3 hour. The suggestion is to turn on battery saver. 1. Extend tip from EarlyWarningTip since it has most common logic 2. Update the detector to align it to battery saver notifcation in systemui. 3. Update tip order to surface low battery tip. Follow CL will: 1. Hook up the low battery threshold to server side 2. Add test stub for this tip, so we could trigger it by adb. Change-Id: I14f9696a549393bf980e31838fb86afd5d9efbc7 Bug: 76113067 Test: RunSettingsRoboTests
This commit is contained in:
@@ -67,7 +67,7 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
|
||||
final BatteryInfo batteryInfo = mBatteryUtils.getBatteryInfo(mBatteryStatsHelper, TAG);
|
||||
final Context context = getContext();
|
||||
|
||||
tips.add(new LowBatteryDetector(policy, batteryInfo).detect());
|
||||
tips.add(new LowBatteryDetector(context, policy, batteryInfo).detect());
|
||||
tips.add(new HighUsageDetector(context, policy, mBatteryStatsHelper,
|
||||
batteryInfo.discharging).detect());
|
||||
tips.add(new SmartBatteryDetector(policy, context.getContentResolver()).detect());
|
||||
@@ -87,7 +87,8 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
|
||||
final List<BatteryTip> tips = new ArrayList<>();
|
||||
tips.add(new SummaryTip(BatteryTip.StateType.NEW,
|
||||
Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
|
||||
tips.add(new LowBatteryTip(BatteryTip.StateType.NEW));
|
||||
tips.add(new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */,
|
||||
"Fake data"));
|
||||
|
||||
return tips;
|
||||
}
|
||||
|
@@ -16,31 +16,52 @@
|
||||
|
||||
package com.android.settings.fuelgauge.batterytip.detectors;
|
||||
|
||||
import android.text.format.DateUtils;
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
|
||||
import com.android.settings.fuelgauge.BatteryInfo;
|
||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Detect whether the battery is too low
|
||||
*/
|
||||
public class LowBatteryDetector implements BatteryTipDetector {
|
||||
private BatteryInfo mBatteryInfo;
|
||||
private BatteryTipPolicy mPolicy;
|
||||
private PowerManager mPowerManager;
|
||||
private int mWarningLevel;
|
||||
|
||||
public LowBatteryDetector(BatteryTipPolicy policy, BatteryInfo batteryInfo) {
|
||||
public LowBatteryDetector(Context context, BatteryTipPolicy policy, BatteryInfo batteryInfo) {
|
||||
mPolicy = policy;
|
||||
mBatteryInfo = batteryInfo;
|
||||
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
||||
mWarningLevel = context.getResources().getInteger(
|
||||
com.android.internal.R.integer.config_lowBatteryWarningLevel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BatteryTip detect() {
|
||||
// Show it if battery life is less than mPolicy.lowBatteryHour
|
||||
final boolean isShown = mPolicy.lowBatteryEnabled && mBatteryInfo.discharging
|
||||
&& mBatteryInfo.remainingTimeUs < mPolicy.lowBatteryHour * DateUtils.HOUR_IN_MILLIS;
|
||||
final boolean powerSaveModeOn = mPowerManager.isPowerSaveMode();
|
||||
//TODO(jackqdyulei): hook up this 3 hours to server side
|
||||
final boolean lowBattery = mBatteryInfo.batteryLevel <= mWarningLevel
|
||||
|| (mBatteryInfo.discharging
|
||||
&& mBatteryInfo.remainingTimeUs < TimeUnit.HOURS.toMicros(3));
|
||||
|
||||
int state = BatteryTip.StateType.INVISIBLE;
|
||||
if (mPolicy.lowBatteryEnabled) {
|
||||
if (powerSaveModeOn) {
|
||||
// Show it is handled if battery saver is on
|
||||
state = BatteryTip.StateType.HANDLED;
|
||||
} else if (mBatteryInfo.discharging && lowBattery) {
|
||||
state = BatteryTip.StateType.NEW;
|
||||
}
|
||||
}
|
||||
|
||||
return new LowBatteryTip(
|
||||
isShown ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE);
|
||||
state, powerSaveModeOn, mBatteryInfo.remainingLabel);
|
||||
}
|
||||
}
|
||||
|
@@ -74,10 +74,10 @@ public abstract class BatteryTip implements Comparable<BatteryTip>, Parcelable {
|
||||
TIP_ORDER.append(TipType.APP_RESTRICTION, 0);
|
||||
TIP_ORDER.append(TipType.BATTERY_SAVER, 1);
|
||||
TIP_ORDER.append(TipType.HIGH_DEVICE_USAGE, 2);
|
||||
TIP_ORDER.append(TipType.SUMMARY, 3);
|
||||
TIP_ORDER.append(TipType.SMART_BATTERY_MANAGER, 4);
|
||||
TIP_ORDER.append(TipType.REDUCED_BATTERY, 5);
|
||||
TIP_ORDER.append(TipType.LOW_BATTERY, 6);
|
||||
TIP_ORDER.append(TipType.LOW_BATTERY, 3);
|
||||
TIP_ORDER.append(TipType.SUMMARY, 4);
|
||||
TIP_ORDER.append(TipType.SMART_BATTERY_MANAGER, 5);
|
||||
TIP_ORDER.append(TipType.REDUCED_BATTERY, 6);
|
||||
TIP_ORDER.append(TipType.REMOVE_APP_RESTRICTION, 7);
|
||||
}
|
||||
|
||||
|
@@ -25,36 +25,32 @@ import com.android.settings.R;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
|
||||
/**
|
||||
* Tip to show current battery life is short
|
||||
* Tip to show current battery level is low or remaining time is less than a certain period
|
||||
*/
|
||||
public class LowBatteryTip extends BatteryTip {
|
||||
public class LowBatteryTip extends EarlyWarningTip {
|
||||
private CharSequence mSummary;
|
||||
|
||||
public LowBatteryTip(@StateType int state) {
|
||||
super(TipType.LOW_BATTERY, state, false /* showDialog */);
|
||||
public LowBatteryTip(@StateType int state, boolean powerSaveModeOn, CharSequence summary) {
|
||||
super(state, powerSaveModeOn);
|
||||
mType = TipType.LOW_BATTERY;
|
||||
mSummary = summary;
|
||||
}
|
||||
|
||||
private LowBatteryTip(Parcel in) {
|
||||
public LowBatteryTip(Parcel in) {
|
||||
super(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getTitle(Context context) {
|
||||
return context.getString(R.string.battery_tip_low_battery_title);
|
||||
mSummary = in.readCharSequence();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary(Context context) {
|
||||
return context.getString(R.string.battery_tip_low_battery_summary);
|
||||
return mState == StateType.HANDLED ? context.getString(
|
||||
R.string.battery_tip_early_heads_up_done_summary) : mSummary;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconId() {
|
||||
return R.drawable.ic_perm_device_information_red_24dp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(BatteryTip tip) {
|
||||
mState = tip.mState;
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
super.writeToParcel(dest, flags);
|
||||
dest.writeCharSequence(mSummary);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user