Add NPE check for refreshUi
The reason for NPE is that callback is registered too early, so one callback is invoked before controller is fully inited. This cl fix it in two ways: 1. Add NPE check in refreshUi, since this method in InstalledAppDetail is robost to NPE 2. Move the callback to the end of constructor. Bug: 37913054 Test: RunSettingsRoboTests Change-Id: I54b03fb51a958a8e63bfe8a7ccfda79be1fa1956
This commit is contained in:
@@ -98,6 +98,8 @@ public class AppButtonsPreferenceController extends PreferenceController impleme
|
||||
@VisibleForTesting
|
||||
Button mUninstallButton;
|
||||
@VisibleForTesting
|
||||
String mPackageName;
|
||||
@VisibleForTesting
|
||||
boolean mDisableAfterUninstall = false;
|
||||
|
||||
private final int mRequestUninstall;
|
||||
@@ -113,7 +115,6 @@ public class AppButtonsPreferenceController extends PreferenceController impleme
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
|
||||
private LayoutPreference mButtonsPref;
|
||||
private String mPackageName;
|
||||
private int mUserId;
|
||||
private boolean mUpdatedSysApp = false;
|
||||
private boolean mListeningToPackageRemove = false;
|
||||
@@ -134,7 +135,6 @@ public class AppButtonsPreferenceController extends PreferenceController impleme
|
||||
mMetricsFeatureProvider = FeatureFactory.getFactory(activity).getMetricsFeatureProvider();
|
||||
|
||||
mState = state;
|
||||
mSession = mState.newSession(this);
|
||||
mDpm = dpm;
|
||||
mUserManager = userManager;
|
||||
mPm = packageManager;
|
||||
@@ -145,10 +145,10 @@ public class AppButtonsPreferenceController extends PreferenceController impleme
|
||||
mRequestUninstall = requestUninstall;
|
||||
mRequestRemoveDeviceAdmin = requestRemoveDeviceAdmin;
|
||||
|
||||
lifecycle.addObserver(this);
|
||||
|
||||
if (packageName != null) {
|
||||
mAppEntry = mState.getEntry(packageName, mUserId);
|
||||
mSession = mState.newSession(this);
|
||||
lifecycle.addObserver(this);
|
||||
} else {
|
||||
mFinishing = true;
|
||||
}
|
||||
@@ -620,7 +620,11 @@ public class AppButtonsPreferenceController extends PreferenceController impleme
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean refreshUi() {
|
||||
@VisibleForTesting
|
||||
boolean refreshUi() {
|
||||
if (mPackageName == null) {
|
||||
return false;
|
||||
}
|
||||
retrieveAppEntry();
|
||||
if (mAppEntry == null || mPackageInfo == null) {
|
||||
return false;
|
||||
|
@@ -344,6 +344,14 @@ public class AppButtonsPreferenceControllerTest {
|
||||
assertThat(controllable).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRefreshUi_packageNull_shouldNotCrash() {
|
||||
mController.mPackageName = null;
|
||||
|
||||
// Should not crash in this method
|
||||
assertThat(mController.refreshUi()).isFalse();
|
||||
}
|
||||
|
||||
/**
|
||||
* The test fragment which implements
|
||||
* {@link ButtonActionDialogFragment.AppButtonsDialogListener}
|
||||
|
Reference in New Issue
Block a user