diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index b06c070c53f..ddf68c17eb5 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java @@ -217,7 +217,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 e40ae37c23f..253ddfdbbba 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 229057fb0a9..07acb13de02 100644 --- a/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java +++ b/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java @@ -21,6 +21,7 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import android.content.Context; +import android.os.RemoteException; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -65,4 +66,11 @@ public class UsageAccessDetailsTest { verify(mFeatureFactory.metricsFeatureProvider).action(nullable(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 + } }