Fix NPE if keyboard settings is launched by work apps
IME apps can request users to enable them by directly launching the on-screen keyboard settings page. If keyboard settings is launched by works apps, the current userId would be work userId. There is no managed profile for work user so the exception happened. -. Use current userId if it's launched by work user -. Use primary user info for personal fragment Fix: 216395439 Test: Manual test with issue steps Test: make RunSettingsRoboTests ROBOTEST_FILTER=AvailableVirtualKeyboardFragmentTest Change-Id: Iea573922ee789d9932c0de05bf71179c4f005eeb
This commit is contained in:
@@ -68,16 +68,35 @@ public class AvailableVirtualKeyboardFragment extends DashboardFragment
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
final int profileType = getArguments().getInt(ProfileSelectFragment.EXTRA_PROFILE);
|
||||
if (profileType == ProfileSelectFragment.ProfileType.WORK) {
|
||||
final UserManager userManager = UserManager.get(context);
|
||||
final UserHandle workUser = Utils.getManagedProfile(userManager);
|
||||
// get work userId
|
||||
mUserId = Utils.getManagedProfileId(userManager, UserHandle.myUserId());
|
||||
mUserAwareContext = context.createContextAsUser(workUser, 0);
|
||||
} else {
|
||||
mUserId = UserHandle.myUserId();
|
||||
mUserAwareContext = context;
|
||||
final UserManager userManager = context.getSystemService(UserManager.class);
|
||||
final int currentUserId = UserHandle.myUserId();
|
||||
final int newUserId;
|
||||
final Context newUserAwareContext;
|
||||
switch (profileType) {
|
||||
case ProfileSelectFragment.ProfileType.WORK: {
|
||||
final UserHandle workUser;
|
||||
if (currentUserId == UserHandle.MIN_SECONDARY_USER_ID) {
|
||||
newUserId = currentUserId;
|
||||
workUser = UserHandle.of(currentUserId);
|
||||
} else {
|
||||
newUserId = Utils.getManagedProfileId(userManager, currentUserId);
|
||||
workUser = Utils.getManagedProfile(userManager);
|
||||
}
|
||||
newUserAwareContext = context.createContextAsUser(workUser, 0);
|
||||
break;
|
||||
}
|
||||
case ProfileSelectFragment.ProfileType.PERSONAL: {
|
||||
final UserHandle primaryUser = userManager.getPrimaryUser().getUserHandle();
|
||||
newUserId = primaryUser.getIdentifier();
|
||||
newUserAwareContext = context.createContextAsUser(primaryUser, 0);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
newUserId = currentUserId;
|
||||
newUserAwareContext = context;
|
||||
}
|
||||
mUserId = newUserId;
|
||||
mUserAwareContext = newUserAwareContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user