diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java index ad3fac14e1e..0ddd366ba4e 100644 --- a/src/com/android/settings/accounts/AccountPreferenceController.java +++ b/src/com/android/settings/accounts/AccountPreferenceController.java @@ -311,7 +311,10 @@ public class AccountPreferenceController extends PreferenceController preferenceGroup.setContentDescription( mContext.getString(R.string.accessibility_category_personal)); } - mParent.getPreferenceScreen().addPreference(preferenceGroup); + final PreferenceScreen screen = mParent.getPreferenceScreen(); + if (screen != null) { + screen.addPreference(preferenceGroup); + } profileData.preferenceGroup = preferenceGroup; if (userInfo.isEnabled()) { profileData.authenticatorHelper = new AuthenticatorHelper(context, @@ -367,6 +370,9 @@ public class AccountPreferenceController extends PreferenceController void cleanUpPreferences() { PreferenceScreen screen = mParent.getPreferenceScreen(); + if (screen == null) { + return; + } for (int i = 0; i < mProfiles.size(); i++) { final PreferenceGroup preferenceGroup = mProfiles.valueAt(i).preferenceGroup; screen.removePreference(preferenceGroup); diff --git a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java index 552c689b9e9..398e9c5722c 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java @@ -189,6 +189,24 @@ public class AccountPreferenceControllerTest { verify(mScreen, times(2)).removePreference(preferenceGroup); } + @Test + @Config(shadows = {ShadowAccountManager.class, ShadowContentResolver.class}) + public void onResume_noPreferenceScreen_shouldNotCrash() { + final List infos = new ArrayList<>(); + infos.add(new UserInfo(1, "user 1", 0)); + when(mUserManager.isManagedProfile()).thenReturn(false); + when(mUserManager.isLinkedUser()).thenReturn(false); + when(mUserManager.getProfiles(anyInt())).thenReturn(infos); + + AccessiblePreferenceCategory preferenceGroup = mock(AccessiblePreferenceCategory.class); + when(mAccountHelper.createAccessiblePreferenceCategory(any(Context.class))).thenReturn( + preferenceGroup); + + mController.onResume(); + + // Should not crash + } + @Test public void updateRawDataToIndex_ManagedProfile_shouldNotUpdate() { final List data = new ArrayList<>();