From: tiansiming Date: Tue, 19 Sep 2017 10:16:19 +0000 (+0800) Subject: Fix NPE crash in UsageAccessDetails X-Git-Tag: android-x86-9.0-r1~89^2^2~3^2~27^2~33^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=39de7aedee622984cbfccca09bf2116381571d81;p=android-x86%2Fpackages-apps-Settings.git Fix NPE crash in UsageAccessDetails mPackageInfo will be null in RefreshUI method in UsageAccessDetails.java Bug:https://issuetracker.google.com/issues/65872768 Test:As explained in the link above Change-Id: I8bd4b822cfe5d8a3347ca7f5886605cbdfb9b8b6 Signed-off-by: tiansiming --- diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index a93bfbd4fe..3e83856c0e 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java @@ -214,7 +214,9 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment @Override public void onPackageListChanged() { - refreshUi(); + if (!refreshUi()) { + setIntentAndFinish(true, true); + } } public static void startAppInfoFragment(Class fragment, int titleRes, diff --git a/src/com/android/settings/applications/UsageAccessDetails.java b/src/com/android/settings/applications/UsageAccessDetails.java index e40ae37c23..253ddfdbbb 100644 --- a/src/com/android/settings/applications/UsageAccessDetails.java +++ b/src/com/android/settings/applications/UsageAccessDetails.java @@ -137,6 +137,9 @@ public class UsageAccessDetails extends AppInfoWithHeader implements OnPreferenc @Override protected boolean refreshUi() { + if (mPackageInfo == null) { + return false; + } mUsageState = mUsageBridge.getUsageInfo(mPackageName, mPackageInfo.applicationInfo.uid); diff --git a/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java b/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java index 532a92350f..fba02c3d67 100644 --- a/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java +++ b/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java @@ -17,6 +17,7 @@ package com.android.settings.applications; import android.content.Context; +import android.os.RemoteException; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.SettingsRobolectricTestRunner; @@ -65,4 +66,11 @@ public class UsageAccessDetailsTest { verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class), eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_USAGE_VIEW_DENY), eq("app")); } + + @Test + public void refreshUi_nullPackageInfo_shouldNotCrash() throws RemoteException { + mFragment.mPackageInfo = null; + mFragment.refreshUi(); + // should not crash + } }