From fd62af5792a834899d2fbea758a4c8b844ba47fa Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Tue, 3 Apr 2018 17:25:18 -0700 Subject: [PATCH] Fix crash in Monkey test. When battery page is launched, BatteryTipLoader will start running. If we rotate the screen before loader is finished, it will store null to Bundle and will crash when restoring from that Bundle. In this cl, we add null pointer check for tip list to avoid the crash. Also remove a TODO since it is obsolete. Change-Id: Ic59bc20c633f3a7467f7b5e95da062160bcb4e93 Fixes: 77534165 Test: RunSettingsRoboTests --- .../batterytip/BatteryTipPreferenceController.java | 4 +++- .../BatteryTipPreferenceControllerTest.java | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java index 69fc0f1a2c9..249bf9b3f57 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java @@ -91,6 +91,9 @@ public class BatteryTipPreferenceController extends BasePreferenceController { } public void updateBatteryTips(List batteryTips) { + if (batteryTips == null) { + return; + } if (mBatteryTips == null) { mBatteryTips = batteryTips; } else { @@ -100,7 +103,6 @@ public class BatteryTipPreferenceController extends BasePreferenceController { } } - //TODO(b/70570352): try to reuse the existing preference rather than remove and add. mPreferenceGroup.removeAll(); for (int i = 0, size = batteryTips.size(); i < size; i++) { final BatteryTip batteryTip = mBatteryTips.get(i); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java index 8a189e2e9c1..90d00fcccb9 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java @@ -149,6 +149,19 @@ public class BatteryTipPreferenceControllerTest { assertOnlyContainsSummaryTip(mPreferenceGroup); } + @Test + public void testRestoreFromNull_shouldNotCrash() { + final Bundle bundle = new Bundle(); + // Battery tip list is null at this time + mBatteryTipPreferenceController.saveInstanceState(bundle); + + final BatteryTipPreferenceController controller = new BatteryTipPreferenceController( + mContext, KEY_PREF, mSettingsActivity, mFragment, mBatteryTipListener); + + // Should not crash + controller.restoreInstanceState(bundle); + } + @Test public void testHandlePreferenceTreeClick_noDialog_invokeCallback() { when(mBatteryTip.getType()).thenReturn(SMART_BATTERY_MANAGER);