From 166d25abb1836f9e218bebd457cc23304764ef7f Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Wed, 22 Feb 2017 16:42:26 -0800 Subject: [PATCH] Add NPE check for battery header update. Battery header uses AsyncTask to update the label. So if user press back button before the update completes, the "getContext()" in AsyncTask callback will return null, which causes the crash. It seems there is no good way to fix it expect adding a NPE check. Bug: 35650224 Test: RunSettingsRoboTests Change-Id: I7bd9fd87caa13614fe1896cf72557a09744691c1 --- src/com/android/settings/fuelgauge/PowerUsageSummary.java | 7 +++++-- .../android/settings/fuelgauge/PowerUsageSummaryTest.java | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index c44a3735d1f..1eb1903ef05 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -532,6 +532,10 @@ public class PowerUsageSummary extends PowerUsageBase { @VisibleForTesting void updateHeaderPreference(BatteryInfo info) { + final Context context = getContext(); + if (context == null) { + return; + } final BatteryMeterView batteryView = (BatteryMeterView) mBatteryLayoutPref .findViewById(R.id.battery_header_icon); final TextView timeText = (TextView) mBatteryLayoutPref.findViewById(R.id.time); @@ -542,8 +546,7 @@ public class PowerUsageSummary extends PowerUsageBase { R.string.estimated_time_left : R.string.estimated_charging_time_left; if (info.remainingTimeUs != 0) { - timeText.setText(Utils.formatElapsedTime(getContext(), - info.remainingTimeUs / 1000, false)); + timeText.setText(Utils.formatElapsedTime(context, info.remainingTimeUs / 1000, false)); } else { timeText.setText(info.statusLabel); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index dab39e4c264..796f5644e1c 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -358,6 +358,14 @@ public class PowerUsageSummaryTest { verify(mSummary1).setText(R.string.estimated_time_left); } + @Test + public void testUpdateHeaderPreference_AsyncUpdate_ShouldNotCrash() { + when(mPowerUsageSummary.getContext()).thenReturn(null); + mBatteryInfo.remainingTimeUs = REMAINING_TIME_US; + + //Should not crash + mPowerUsageSummary.updateHeaderPreference(mBatteryInfo); + } private void testToggleAllApps(final boolean isShowApps) { mFragment.mShowAllApps = isShowApps;