Fix crash in settings page (enterprise)

Fixes a crash on the settings page
where the managed user fetcher
will return null.

Test: cts, atest, flash on enterprise device
Bug: 298678607
Change-Id: I8866bad92790f342a8a767b317967b5bf784d865
This commit is contained in:
Becca Hughes
2023-09-13 11:34:39 -07:00
parent 71235aa403
commit d0375beae9

View File

@@ -159,6 +159,16 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
return CONDITIONALLY_UNAVAILABLE; return CONDITIONALLY_UNAVAILABLE;
} }
// If we are in work profile mode and there is no user then we
// should hide for now. We use CONDITIONALLY_UNAVAILABLE
// because it is possible for the user to be set later.
if (mIsWorkProfile) {
UserHandle workProfile = getWorkProfileUserHandle();
if (workProfile == null) {
return CONDITIONALLY_UNAVAILABLE;
}
}
return AVAILABLE; return AVAILABLE;
} }
@@ -186,12 +196,17 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
fragment.getSettingsLifecycle().addObserver(this); fragment.getSettingsLifecycle().addObserver(this);
mFragmentManager = fragmentManager; mFragmentManager = fragmentManager;
mIsWorkProfile = isWorkProfile; mIsWorkProfile = isWorkProfile;
setDelegate(delegate); setDelegate(delegate);
verifyReceivedIntent(launchIntent); verifyReceivedIntent(launchIntent);
// Recreate the content observers because the user might have changed. // Recreate the content observers because the user might have changed.
mSettingsContentObserver.unregister(); mSettingsContentObserver.unregister();
mSettingsContentObserver.register(); mSettingsContentObserver.register();
// When we set the mIsWorkProfile above we should try and force a refresh
// so we can get the correct data.
delegate.forceDelegateRefresh();
} }
/** /**
@@ -698,12 +713,22 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
protected int getUser() { protected int getUser() {
if (mIsWorkProfile) { if (mIsWorkProfile) {
UserHandle workProfile = Utils.getManagedProfile(UserManager.get(mContext)); UserHandle workProfile = getWorkProfileUserHandle();
return workProfile.getIdentifier(); if (workProfile != null) {
return workProfile.getIdentifier();
}
} }
return UserHandle.myUserId(); return UserHandle.myUserId();
} }
private @Nullable UserHandle getWorkProfileUserHandle() {
if (mIsWorkProfile) {
return Utils.getManagedProfile(UserManager.get(mContext));
}
return null;
}
/** Called when the dialog button is clicked. */ /** Called when the dialog button is clicked. */
private static interface DialogHost { private static interface DialogHost {
void onDialogClick(int whichButton); void onDialogClick(int whichButton);