OSDN Git Service

Fix NPE crash in UsageAccessDetails
authortiansiming <tiansiming@xiaomi.com>
Tue, 19 Sep 2017 10:16:19 +0000 (18:16 +0800)
committertiansiming <tiansiming@xiaomi.com>
Thu, 21 Sep 2017 06:12:50 +0000 (14:12 +0800)
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 <tiansiming@xiaomi.com>
src/com/android/settings/applications/AppInfoBase.java
src/com/android/settings/applications/UsageAccessDetails.java
tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java

index a93bfbd..3e83856 100644 (file)
@@ -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,
index e40ae37..253ddfd 100644 (file)
@@ -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);
 
index 532a923..fba02c3 100644 (file)
@@ -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
+    }
 }