Merge "Refine the update process of battery tip" into pi-dev

This commit is contained in:
Lei Yu
2018-03-30 19:56:46 +00:00
committed by Android (Google) Code Review
6 changed files with 64 additions and 8 deletions

View File

@@ -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;
} }
// Only skip BatteryTipLoader for the first time when device is rotated
if (mNeedUpdateBatteryTip) {
restartBatteryTipLoader(); 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) {

View File

@@ -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
*/ */

View File

@@ -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();
} }
} }

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);