From 2162a68a436115212cf4f5e502e7134534bc225a Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Wed, 11 Apr 2018 15:10:36 -0700 Subject: [PATCH] Update the action for early warning tip. Add action to open the battery saver page when it shows "battery saver is on". Change-Id: Ia0536e7ef73271aefbd95e938d6f91f359a116d2 Fixes: 77874407 Test: RunSettingsRoboTests --- .../fuelgauge/batterytip/BatteryTipUtils.java | 7 ++- .../actions/OpenBatterySaverAction.java | 56 +++++++++++++++++++ .../batterytip/BatteryTipUtilsTest.java | 21 +++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/com/android/settings/fuelgauge/batterytip/actions/OpenBatterySaverAction.java diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java index 98ff244b0b8..1f79e7cd756 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java @@ -30,6 +30,7 @@ import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedPreferenceFragment; 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; import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction; import com.android.settings.fuelgauge.batterytip.actions.SmartBatteryAction; @@ -93,7 +94,11 @@ public class BatteryTipUtils { case BatteryTip.TipType.SMART_BATTERY_MANAGER: return new SmartBatteryAction(settingsActivity, fragment); case BatteryTip.TipType.BATTERY_SAVER: - return new BatterySaverAction(settingsActivity); + if (batteryTip.getState() == BatteryTip.StateType.HANDLED) { + return new OpenBatterySaverAction(settingsActivity); + } else { + return new BatterySaverAction(settingsActivity); + } case BatteryTip.TipType.APP_RESTRICTION: if (batteryTip.getState() == BatteryTip.StateType.HANDLED) { return new OpenRestrictAppFragmentAction(settingsActivity, fragment, diff --git a/src/com/android/settings/fuelgauge/batterytip/actions/OpenBatterySaverAction.java b/src/com/android/settings/fuelgauge/batterytip/actions/OpenBatterySaverAction.java new file mode 100644 index 00000000000..9f9a99d0f58 --- /dev/null +++ b/src/com/android/settings/fuelgauge/batterytip/actions/OpenBatterySaverAction.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.fuelgauge.batterytip.actions; + +import android.content.Context; + +import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.R; +import com.android.settings.SettingsActivity; +import com.android.settings.core.InstrumentedPreferenceFragment; +import com.android.settings.core.SubSettingLauncher; +import com.android.settings.fuelgauge.BatteryUtils; +import com.android.settings.fuelgauge.RestrictedAppDetails; +import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings; +import com.android.settings.fuelgauge.batterytip.AppInfo; +import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; + +import java.util.List; + +/** + * + * Action to open the {@link com.android.settings.fuelgauge.batterysaver.BatterySaverSettings} + */ +public class OpenBatterySaverAction extends BatteryTipAction { + + public OpenBatterySaverAction(Context context) { + super(context); + } + + /** + * Handle the action when user clicks positive button + */ + @Override + public void handlePositiveAction(int metricsKey) { + mMetricsFeatureProvider.action(mContext, + MetricsProto.MetricsEvent.ACTION_TIP_OPEN_BATTERY_SAVER_PAGE, metricsKey); + new SubSettingLauncher(mContext) + .setDestination(BatterySaverSettings.class.getName()) + .setSourceMetricsCategory(metricsKey) + .launch(); + } +} diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java index c731a2eedbc..7a25555ff28 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtilsTest.java @@ -23,9 +23,12 @@ import static org.mockito.Mockito.when; import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedPreferenceFragment; +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; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; +import com.android.settings.fuelgauge.batterytip.tips.EarlyWarningTip; import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -47,6 +50,7 @@ public class BatteryTipUtilsTest { @Mock private InstrumentedPreferenceFragment mFragment; private RestrictAppTip mRestrictAppTip; + private EarlyWarningTip mEarlyWarningTip; @Before public void setUp() { @@ -55,6 +59,7 @@ public class BatteryTipUtilsTest { FakeFeatureFactory.setupForTest(); doReturn(RuntimeEnvironment.application).when(mFragment).getContext(); mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>())); + mEarlyWarningTip = spy(new EarlyWarningTip(BatteryTip.StateType.NEW, true)); } @Test @@ -72,4 +77,20 @@ public class BatteryTipUtilsTest { assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity, mFragment)).isInstanceOf(OpenRestrictAppFragmentAction.class); } + + @Test + public void testGetActionForBatteryTip_typeEarlyWarningStateNew_returnActionBatterySaver() { + 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); + } }