[BatteryTips] Separate the low battery tips
Bug: 315748218 Test: atest SettingsRoboTestStub:com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetectorTest Change-Id: Id973be37012da414d6125a4dd29ec4522ab80e95
This commit is contained in:
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
|
||||
import java.util.List;
|
||||
@@ -35,5 +36,9 @@ public interface BatterySettingsFeatureProvider {
|
||||
boolean isBatteryInfoEnabled(Context context);
|
||||
|
||||
/** A way to add more battery tip detectors. */
|
||||
void addBatteryTipDetector(Context context, List<BatteryTip> tips, BatteryInfo batteryInfo);
|
||||
void addBatteryTipDetector(
|
||||
Context context,
|
||||
List<BatteryTip> batteryTips,
|
||||
BatteryInfo batteryInfo,
|
||||
BatteryTipPolicy batteryTipPolicy);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ package com.android.settings.fuelgauge;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
|
||||
import java.util.List;
|
||||
@@ -42,5 +44,10 @@ public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatur
|
||||
|
||||
@Override
|
||||
public void addBatteryTipDetector(
|
||||
Context context, List<BatteryTip> tips, BatteryInfo batteryInfo) {}
|
||||
Context context,
|
||||
List<BatteryTip> batteryTips,
|
||||
BatteryInfo batteryInfo,
|
||||
BatteryTipPolicy batteryTipPolicy) {
|
||||
batteryTips.add(new LowBatteryDetector(context, batteryTipPolicy, batteryInfo).detect());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.android.settings.fuelgauge.batterytip;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.BatteryUsageStats;
|
||||
import android.os.PowerManager;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
@@ -27,7 +26,6 @@ import com.android.settings.fuelgauge.BatteryUtils;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.BatteryDefenderDetector;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.HighUsageDetector;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.IncompatibleChargerDetector;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.utils.AsyncLoaderCompat;
|
||||
@@ -56,19 +54,18 @@ public class BatteryTipLoader extends AsyncLoaderCompat<List<BatteryTip>> {
|
||||
@Override
|
||||
public List<BatteryTip> loadInBackground() {
|
||||
final List<BatteryTip> tips = new ArrayList<>();
|
||||
final BatteryTipPolicy policy = new BatteryTipPolicy(getContext());
|
||||
final BatteryTipPolicy batteryTipPolicy = new BatteryTipPolicy(getContext());
|
||||
final BatteryInfo batteryInfo = mBatteryUtils.getBatteryInfo(TAG);
|
||||
final Context context = getContext().getApplicationContext();
|
||||
final boolean isPowerSaveMode =
|
||||
context.getSystemService(PowerManager.class).isPowerSaveMode();
|
||||
|
||||
tips.add(new LowBatteryDetector(context, policy, batteryInfo, isPowerSaveMode).detect());
|
||||
tips.add(new HighUsageDetector(context, policy, mBatteryUsageStats, batteryInfo).detect());
|
||||
tips.add(
|
||||
new HighUsageDetector(context, batteryTipPolicy, mBatteryUsageStats, batteryInfo)
|
||||
.detect());
|
||||
tips.add(new BatteryDefenderDetector(batteryInfo, context).detect());
|
||||
tips.add(new IncompatibleChargerDetector(context).detect());
|
||||
FeatureFactory.getFeatureFactory()
|
||||
.getBatterySettingsFeatureProvider()
|
||||
.addBatteryTipDetector(context, tips, batteryInfo);
|
||||
.addBatteryTipDetector(context, tips, batteryInfo, batteryTipPolicy);
|
||||
Collections.sort(tips);
|
||||
return tips;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.settings.fuelgauge.batterytip.detectors;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
|
||||
import com.android.settings.fuelgauge.BatteryInfo;
|
||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
||||
@@ -26,37 +27,33 @@ import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
|
||||
/** Detect whether the battery is too low */
|
||||
public class LowBatteryDetector implements BatteryTipDetector {
|
||||
private final BatteryInfo mBatteryInfo;
|
||||
private final BatteryTipPolicy mPolicy;
|
||||
private final BatteryTipPolicy mBatteryTipPolicy;
|
||||
private final boolean mIsPowerSaveMode;
|
||||
private final int mWarningLevel;
|
||||
|
||||
public LowBatteryDetector(
|
||||
Context context,
|
||||
BatteryTipPolicy policy,
|
||||
BatteryInfo batteryInfo,
|
||||
boolean isPowerSaveMode) {
|
||||
mPolicy = policy;
|
||||
Context context, BatteryTipPolicy batteryTipPolicy, BatteryInfo batteryInfo) {
|
||||
mBatteryTipPolicy = batteryTipPolicy;
|
||||
mBatteryInfo = batteryInfo;
|
||||
mWarningLevel =
|
||||
context.getResources()
|
||||
.getInteger(com.android.internal.R.integer.config_lowBatteryWarningLevel);
|
||||
mIsPowerSaveMode = isPowerSaveMode;
|
||||
mIsPowerSaveMode = context.getSystemService(PowerManager.class).isPowerSaveMode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BatteryTip detect() {
|
||||
final boolean lowBattery = mBatteryInfo.batteryLevel <= mWarningLevel;
|
||||
final boolean lowBatteryEnabled = mPolicy.lowBatteryEnabled && !mIsPowerSaveMode;
|
||||
final boolean lowBatteryEnabled = mBatteryTipPolicy.lowBatteryEnabled && !mIsPowerSaveMode;
|
||||
final boolean dischargingLowBatteryState =
|
||||
mPolicy.testLowBatteryTip || (mBatteryInfo.discharging && lowBattery);
|
||||
|
||||
int state = BatteryTip.StateType.INVISIBLE;
|
||||
mBatteryTipPolicy.testLowBatteryTip || (mBatteryInfo.discharging && lowBattery);
|
||||
|
||||
// Show it as new if in test or in discharging low battery state,
|
||||
// dismiss it if battery saver is on or disabled by config.
|
||||
if (lowBatteryEnabled && dischargingLowBatteryState) {
|
||||
state = BatteryTip.StateType.NEW;
|
||||
}
|
||||
final int state =
|
||||
lowBatteryEnabled && dischargingLowBatteryState
|
||||
? BatteryTip.StateType.NEW
|
||||
: BatteryTip.StateType.INVISIBLE;
|
||||
|
||||
return new LowBatteryTip(state, mIsPowerSaveMode);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user