Adjust battery tips action
- Change low battery tips action to launch battery saver page - Enable smart battery tip when battery level is lower than expected and battery saver is off Bug: 183582881 Test: make RunSettingsRoboTests -j40 Change-Id: I38b0ff7109d5ea95703edeade26cdfeed50f1403
This commit is contained in:
committed by
Wesley Wang
parent
89222adb7f
commit
f1e41c0bd9
@@ -69,7 +69,8 @@ public class BatteryTipLoader extends AsyncLoaderCompat<List<BatteryTip>> {
|
||||
|
||||
tips.add(new LowBatteryDetector(context, policy, batteryInfo).detect());
|
||||
tips.add(new HighUsageDetector(context, policy, mBatteryUsageStats, batteryInfo).detect());
|
||||
tips.add(new SmartBatteryDetector(policy, context.getContentResolver()).detect());
|
||||
tips.add(new SmartBatteryDetector(
|
||||
context, policy, batteryInfo, context.getContentResolver()).detect());
|
||||
tips.add(new EarlyWarningDetector(policy, context).detect());
|
||||
tips.add(new BatteryDefenderDetector(batteryInfo).detect());
|
||||
// Disable this feature now since it introduces false positive cases. We will try to improve
|
||||
|
@@ -30,7 +30,6 @@ import com.android.internal.util.CollectionUtils;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.BatteryDefenderAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.BatterySaverAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.OpenBatterySaverAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.OpenRestrictAppFragmentAction;
|
||||
@@ -99,11 +98,7 @@ public class BatteryTipUtils {
|
||||
return new SmartBatteryAction(settingsActivity, fragment);
|
||||
case BatteryTip.TipType.BATTERY_SAVER:
|
||||
case BatteryTip.TipType.LOW_BATTERY:
|
||||
if (batteryTip.getState() == BatteryTip.StateType.HANDLED) {
|
||||
return new OpenBatterySaverAction(settingsActivity);
|
||||
} else {
|
||||
return new BatterySaverAction(settingsActivity);
|
||||
}
|
||||
return new OpenBatterySaverAction(settingsActivity);
|
||||
case BatteryTip.TipType.APP_RESTRICTION:
|
||||
if (batteryTip.getState() == BatteryTip.StateType.HANDLED) {
|
||||
return new OpenRestrictAppFragmentAction(fragment, (RestrictAppTip) batteryTip);
|
||||
|
@@ -17,8 +17,11 @@
|
||||
package com.android.settings.fuelgauge.batterytip.detectors;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
|
||||
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.SmartBatteryTip;
|
||||
@@ -27,22 +30,33 @@ import com.android.settings.fuelgauge.batterytip.tips.SmartBatteryTip;
|
||||
* Detect whether to show smart battery tip.
|
||||
*/
|
||||
public class SmartBatteryDetector implements BatteryTipDetector {
|
||||
private static final int EXPECTED_BATTERY_LEVEL = 30;
|
||||
|
||||
private BatteryInfo mBatteryInfo;
|
||||
private BatteryTipPolicy mPolicy;
|
||||
private ContentResolver mContentResolver;
|
||||
private PowerManager mPowerManager;
|
||||
|
||||
public SmartBatteryDetector(BatteryTipPolicy policy, ContentResolver contentResolver) {
|
||||
public SmartBatteryDetector(Context context, BatteryTipPolicy policy, BatteryInfo batteryInfo,
|
||||
ContentResolver contentResolver) {
|
||||
mPolicy = policy;
|
||||
mBatteryInfo = batteryInfo;
|
||||
mContentResolver = contentResolver;
|
||||
mPowerManager = context.getSystemService(PowerManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BatteryTip detect() {
|
||||
// Show it if there is no other tips shown
|
||||
final boolean smartBatteryOff = Settings.Global.getInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1) == 0
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1) == 0;
|
||||
final boolean isUnderExpectedBatteryLevel =
|
||||
mBatteryInfo.batteryLevel <= EXPECTED_BATTERY_LEVEL;
|
||||
// Show it if in test or smart battery is off.
|
||||
final boolean enableSmartBatteryTip =
|
||||
smartBatteryOff && !mPowerManager.isPowerSaveMode() && isUnderExpectedBatteryLevel
|
||||
|| mPolicy.testSmartBatteryTip;
|
||||
final int state =
|
||||
smartBatteryOff ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
|
||||
enableSmartBatteryTip ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
|
||||
return new SmartBatteryTip(state);
|
||||
}
|
||||
}
|
||||
|
@@ -24,7 +24,6 @@ import static org.mockito.Mockito.when;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.BatteryDefenderAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.BatterySaverAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.OpenBatterySaverAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.OpenRestrictAppFragmentAction;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction;
|
||||
@@ -90,33 +89,17 @@ public class BatteryTipUtilsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetActionForBatteryTip_typeEarlyWarningStateNew_returnActionBatterySaver() {
|
||||
public void testGetActionForBatteryTip_typeEarlyWarningStateNew_returnActionOpen() {
|
||||
when(mEarlyWarningTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mEarlyWarningTip, mSettingsActivity,
|
||||
mFragment)).isInstanceOf(BatterySaverAction.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetActionForBatteryTip_typeEarlyWarningStateHandled_returnActionOpen() {
|
||||
when(mEarlyWarningTip.getState()).thenReturn(BatteryTip.StateType.HANDLED);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mEarlyWarningTip, mSettingsActivity,
|
||||
mFragment)).isInstanceOf(OpenBatterySaverAction.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionBatterySaver() {
|
||||
public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionOpen() {
|
||||
when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mLowBatteryTip, mSettingsActivity,
|
||||
mFragment)).isInstanceOf(BatterySaverAction.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetActionForBatteryTip_typeLowBatteryStateHandled_returnActionOpen() {
|
||||
when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.HANDLED);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mLowBatteryTip, mSettingsActivity,
|
||||
mFragment)).isInstanceOf(OpenBatterySaverAction.class);
|
||||
}
|
||||
|
@@ -22,26 +22,37 @@ import static org.mockito.Mockito.spy;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.fuelgauge.BatteryInfo;
|
||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.Shadows;
|
||||
import org.robolectric.shadows.ShadowPowerManager;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class SmartBatteryDetectorTest {
|
||||
|
||||
private static final int EXPECTED_BATTERY_LEVEL = 30;
|
||||
private static final int UNEXPECTED_BATTERY_LEVEL = 31;
|
||||
|
||||
private Context mContext;
|
||||
private ContentResolver mContentResolver;
|
||||
private SmartBatteryDetector mSmartBatteryDetector;
|
||||
private BatteryTipPolicy mPolicy;
|
||||
private ShadowPowerManager mShadowPowerManager;
|
||||
@Mock
|
||||
private BatteryInfo mBatteryInfo;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -50,7 +61,9 @@ public class SmartBatteryDetectorTest {
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContentResolver = mContext.getContentResolver();
|
||||
mPolicy = spy(new BatteryTipPolicy(mContext));
|
||||
mSmartBatteryDetector = new SmartBatteryDetector(mPolicy, mContentResolver);
|
||||
mShadowPowerManager = Shadows.shadowOf(mContext.getSystemService(PowerManager.class));
|
||||
mSmartBatteryDetector =
|
||||
new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo, mContentResolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -64,14 +77,38 @@ public class SmartBatteryDetectorTest {
|
||||
public void testDetect_smartBatteryOff_tipVisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
mShadowPowerManager.setIsPowerSaveMode(false);
|
||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_batterySaverOn_tipInvisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
mShadowPowerManager.setIsPowerSaveMode(true);
|
||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_unexpectedBatteryLevel_tipInvisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
mShadowPowerManager.setIsPowerSaveMode(true);
|
||||
mBatteryInfo.batteryLevel = UNEXPECTED_BATTERY_LEVEL;
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_smartBatteryOn_tipInvisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1);
|
||||
mShadowPowerManager.setIsPowerSaveMode(false);
|
||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
Reference in New Issue
Block a user