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 <tiansiming@xiaomi.com>
This commit is contained in:
tiansiming
2017-09-19 18:16:19 +08:00
parent 939265d6ea
commit 39de7aedee
3 changed files with 14 additions and 1 deletions

View File

@@ -214,7 +214,9 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
@Override @Override
public void onPackageListChanged() { public void onPackageListChanged() {
refreshUi(); if (!refreshUi()) {
setIntentAndFinish(true, true);
}
} }
public static void startAppInfoFragment(Class<?> fragment, int titleRes, public static void startAppInfoFragment(Class<?> fragment, int titleRes,

View File

@@ -137,6 +137,9 @@ public class UsageAccessDetails extends AppInfoWithHeader implements OnPreferenc
@Override @Override
protected boolean refreshUi() { protected boolean refreshUi() {
if (mPackageInfo == null) {
return false;
}
mUsageState = mUsageBridge.getUsageInfo(mPackageName, mUsageState = mUsageBridge.getUsageInfo(mPackageName,
mPackageInfo.applicationInfo.uid); mPackageInfo.applicationInfo.uid);

View File

@@ -17,6 +17,7 @@
package com.android.settings.applications; package com.android.settings.applications;
import android.content.Context; import android.content.Context;
import android.os.RemoteException;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
@@ -65,4 +66,11 @@ public class UsageAccessDetailsTest {
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class), verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_USAGE_VIEW_DENY), eq("app")); 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
}
} }