From 52ae05314deab74cffa617ce30cdef67c65af61e Mon Sep 17 00:00:00 2001 From: Fyodor Kupolov Date: Wed, 24 Feb 2016 15:54:10 -0800 Subject: [PATCH] Do not allow removing current user if it's in a call Bug: 20652663 Change-Id: I2eb91bc73259e25b3fa68337df2a0576a438244a --- src/com/android/settings/users/UserSettings.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index a8712972e0f..156032695c6 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -280,8 +280,10 @@ public class UserSettings extends SettingsPreferenceFragment @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { int pos = 0; - UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - if (!mUserCaps.mIsAdmin && !um.hasUserRestriction(UserManager.DISALLOW_REMOVE_USER)) { + UserManager um = getContext().getSystemService(UserManager.class); + boolean allowRemoveUser = !um.hasUserRestriction(UserManager.DISALLOW_REMOVE_USER); + boolean canSwitchUsers = um.canSwitchUsers(); + if (!mUserCaps.mIsAdmin && allowRemoveUser && canSwitchUsers) { String nickname = mUserManager.getUserName(); MenuItem removeThisUser = menu.add(0, MENU_REMOVE_USER, pos++, getResources().getString(R.string.user_remove_user_menu, nickname)); @@ -630,10 +632,13 @@ public class UserSettings extends SettingsPreferenceFragment } private void removeThisUser() { + if (!mUserManager.canSwitchUsers()) { + Log.w(TAG, "Cannot remove current user when switching is disabled"); + return; + } try { ActivityManagerNative.getDefault().switchUser(UserHandle.USER_SYSTEM); - ((UserManager) getActivity().getSystemService(Context.USER_SERVICE)) - .removeUser(UserHandle.myUserId()); + getContext().getSystemService(UserManager.class).removeUser(UserHandle.myUserId()); } catch (RemoteException re) { Log.e(TAG, "Unable to remove self user"); }