Refine the update process of battery tip
1. When device is rotated, don't update the battery tip 2. When user go back to battery main page from other page, start battery tip update process 3. In RestrictAppTip, if there aren't restricted apps anymore, hide the tip. Bug: 74467010 Test: RunSettingsRobotests Change-Id: I300bcc5b487d587f6618e340ac074fe416dcc1b2
This commit is contained in:
@@ -105,6 +105,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
|
|||||||
SparseArray<List<Anomaly>> mAnomalySparseArray;
|
SparseArray<List<Anomaly>> mAnomalySparseArray;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
BatteryHeaderPreferenceController mBatteryHeaderPreferenceController;
|
BatteryHeaderPreferenceController mBatteryHeaderPreferenceController;
|
||||||
|
@VisibleForTesting
|
||||||
|
boolean mNeedUpdateBatteryTip;
|
||||||
private BatteryTipPreferenceController mBatteryTipPreferenceController;
|
private BatteryTipPreferenceController mBatteryTipPreferenceController;
|
||||||
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
|
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
|
||||||
|
|
||||||
@@ -211,6 +213,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
|
|||||||
mAnomalySparseArray = new SparseArray<>();
|
mAnomalySparseArray = new SparseArray<>();
|
||||||
|
|
||||||
restartBatteryInfoLoader();
|
restartBatteryInfoLoader();
|
||||||
|
mNeedUpdateBatteryTip = icicle == null;
|
||||||
|
mBatteryTipPreferenceController.restoreInstanceState(icicle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -291,7 +295,12 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
restartBatteryTipLoader();
|
// Only skip BatteryTipLoader for the first time when device is rotated
|
||||||
|
if (mNeedUpdateBatteryTip) {
|
||||||
|
restartBatteryTipLoader();
|
||||||
|
} else {
|
||||||
|
mNeedUpdateBatteryTip = true;
|
||||||
|
}
|
||||||
|
|
||||||
// reload BatteryInfo and updateUI
|
// reload BatteryInfo and updateUI
|
||||||
restartBatteryInfoLoader();
|
restartBatteryInfoLoader();
|
||||||
@@ -385,6 +394,12 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
|
|||||||
restartBatteryStatsLoader(true /* clearHeader */);
|
restartBatteryStatsLoader(true /* clearHeader */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
mBatteryTipPreferenceController.saveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
void restartBatteryStatsLoader(boolean clearHeader) {
|
void restartBatteryStatsLoader(boolean clearHeader) {
|
||||||
super.restartBatteryStatsLoader();
|
super.restartBatteryStatsLoader();
|
||||||
if (clearHeader) {
|
if (clearHeader) {
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
package com.android.settings.fuelgauge.batterytip;
|
package com.android.settings.fuelgauge.batterytip;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.support.v14.preference.PreferenceFragment;
|
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.support.v7.preference.PreferenceGroup;
|
import android.support.v7.preference.PreferenceGroup;
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
@@ -34,6 +34,7 @@ import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
|
|||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -44,6 +45,7 @@ import java.util.Map;
|
|||||||
public class BatteryTipPreferenceController extends BasePreferenceController {
|
public class BatteryTipPreferenceController extends BasePreferenceController {
|
||||||
private static final String TAG = "BatteryTipPreferenceController";
|
private static final String TAG = "BatteryTipPreferenceController";
|
||||||
private static final int REQUEST_ANOMALY_ACTION = 0;
|
private static final int REQUEST_ANOMALY_ACTION = 0;
|
||||||
|
private static final String KEY_BATTERY_TIPS = "key_battery_tips";
|
||||||
|
|
||||||
private BatteryTipListener mBatteryTipListener;
|
private BatteryTipListener mBatteryTipListener;
|
||||||
private List<BatteryTip> mBatteryTips;
|
private List<BatteryTip> mBatteryTips;
|
||||||
@@ -138,6 +140,17 @@ public class BatteryTipPreferenceController extends BasePreferenceController {
|
|||||||
return super.handlePreferenceTreeClick(preference);
|
return super.handlePreferenceTreeClick(preference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void restoreInstanceState(Bundle bundle) {
|
||||||
|
if (bundle != null) {
|
||||||
|
List<BatteryTip> batteryTips = bundle.getParcelableArrayList(KEY_BATTERY_TIPS);
|
||||||
|
updateBatteryTips(batteryTips);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveInstanceState(Bundle outState) {
|
||||||
|
outState.putParcelableList(KEY_BATTERY_TIPS, mBatteryTips);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener to give the control back to target fragment
|
* Listener to give the control back to target fragment
|
||||||
*/
|
*/
|
||||||
|
@@ -98,6 +98,9 @@ public class RestrictAppTip extends BatteryTip {
|
|||||||
// If anomaly becomes invisible, show it as handled
|
// If anomaly becomes invisible, show it as handled
|
||||||
mState = StateType.HANDLED;
|
mState = StateType.HANDLED;
|
||||||
mShowDialog = false;
|
mShowDialog = false;
|
||||||
|
} else {
|
||||||
|
mState = tip.getState();
|
||||||
|
mShowDialog = tip.shouldShowDialog();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -352,6 +352,14 @@ public class PowerUsageSummaryTest {
|
|||||||
R.string.advanced_battery_title);
|
R.string.advanced_battery_title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRefreshUi_deviceRotate_doNotUpdateBatteryTip() {
|
||||||
|
mFragment.mNeedUpdateBatteryTip = false;
|
||||||
|
mFragment.refreshUi();
|
||||||
|
|
||||||
|
verify(mFragment, never()).restartBatteryTipLoader();
|
||||||
|
}
|
||||||
|
|
||||||
public static class TestFragment extends PowerUsageSummary {
|
public static class TestFragment extends PowerUsageSummary {
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@@ -364,12 +372,6 @@ public class PowerUsageSummaryTest {
|
|||||||
return mContext;
|
return mContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void refreshUi() {
|
|
||||||
// Leave it empty for toggle apps menu test
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void showBothEstimates() {
|
void showBothEstimates() {
|
||||||
List<BatteryInfo> fakeBatteryInfo = new ArrayList<>(2);
|
List<BatteryInfo> fakeBatteryInfo = new ArrayList<>(2);
|
||||||
|
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.support.v7.preference.PreferenceCategory;
|
import android.support.v7.preference.PreferenceCategory;
|
||||||
import android.support.v7.preference.PreferenceGroup;
|
import android.support.v7.preference.PreferenceGroup;
|
||||||
@@ -133,6 +134,21 @@ public class BatteryTipPreferenceControllerTest {
|
|||||||
BatteryTip.StateType.NEW);
|
BatteryTip.StateType.NEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSaveAndRestore() {
|
||||||
|
mBatteryTipPreferenceController.updateBatteryTips(mOldBatteryTips);
|
||||||
|
final Bundle bundle = new Bundle();
|
||||||
|
mBatteryTipPreferenceController.saveInstanceState(bundle);
|
||||||
|
|
||||||
|
final BatteryTipPreferenceController controller = new BatteryTipPreferenceController(
|
||||||
|
mContext, KEY_PREF, mSettingsActivity, mFragment, mBatteryTipListener);
|
||||||
|
controller.mPreferenceGroup = mPreferenceGroup;
|
||||||
|
controller.mPrefContext = mContext;
|
||||||
|
controller.restoreInstanceState(bundle);
|
||||||
|
|
||||||
|
assertOnlyContainsSummaryTip(mPreferenceGroup);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHandlePreferenceTreeClick_noDialog_invokeCallback() {
|
public void testHandlePreferenceTreeClick_noDialog_invokeCallback() {
|
||||||
when(mBatteryTip.getType()).thenReturn(SMART_BATTERY_MANAGER);
|
when(mBatteryTip.getType()).thenReturn(SMART_BATTERY_MANAGER);
|
||||||
|
@@ -148,6 +148,13 @@ public class RestrictAppTipTest {
|
|||||||
assertThat(mNewBatteryTip.getState()).isEqualTo(BatteryTip.StateType.HANDLED);
|
assertThat(mNewBatteryTip.getState()).isEqualTo(BatteryTip.StateType.HANDLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void update_handledAnomlayBecomeInvisible_stateInvisible() {
|
||||||
|
mHandledBatteryTip.updateState(mInvisibleBatteryTip);
|
||||||
|
|
||||||
|
assertThat(mHandledBatteryTip.getState()).isEqualTo(BatteryTip.StateType.INVISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void update_newAnomalyComes_stateNew() {
|
public void update_newAnomalyComes_stateNew() {
|
||||||
mInvisibleBatteryTip.updateState(mNewBatteryTip);
|
mInvisibleBatteryTip.updateState(mNewBatteryTip);
|
||||||
|
Reference in New Issue
Block a user