Merge "Remove Users & profiles header for phones"
This commit is contained in:
committed by
Android (Google) Code Review
commit
2c875e4537
@@ -26,10 +26,26 @@ import android.util.AttributeSet;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
public class UserPreference extends Preference {
|
public class UserPreference extends Preference {
|
||||||
|
|
||||||
public static final int USERID_UNKNOWN = -10;
|
public static final int USERID_UNKNOWN = -10;
|
||||||
public static final int USERID_GUEST_DEFAULTS = -11;
|
public static final int USERID_GUEST_DEFAULTS = -11;
|
||||||
|
public static final Comparator<UserPreference> SERIAL_NUMBER_COMPARATOR =
|
||||||
|
new Comparator<UserPreference>() {
|
||||||
|
@Override
|
||||||
|
public int compare(UserPreference p1, UserPreference p2) {
|
||||||
|
int sn1 = p1.getSerialNumber();
|
||||||
|
int sn2 = p2.getSerialNumber();
|
||||||
|
if (sn1 < sn2) {
|
||||||
|
return -1;
|
||||||
|
} else if (sn1 > sn2) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private OnClickListener mDeleteClickListener;
|
private OnClickListener mDeleteClickListener;
|
||||||
private OnClickListener mSettingsClickListener;
|
private OnClickListener mSettingsClickListener;
|
||||||
@@ -105,12 +121,4 @@ public class UserPreference extends Preference {
|
|||||||
public int getUserId() {
|
public int getUserId() {
|
||||||
return mUserId;
|
return mUserId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int compareTo(Preference another) {
|
|
||||||
if (another instanceof UserPreference) {
|
|
||||||
return getSerialNumber() > ((UserPreference) another).getSerialNumber() ? 1 : -1;
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,7 @@ import android.os.UserManager;
|
|||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.Preference.OnPreferenceClickListener;
|
import android.preference.Preference.OnPreferenceClickListener;
|
||||||
import android.preference.PreferenceGroup;
|
import android.preference.PreferenceGroup;
|
||||||
|
import android.preference.PreferenceScreen;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -67,6 +68,7 @@ import com.android.settings.Utils;
|
|||||||
import com.android.settings.drawable.CircleFramedDrawable;
|
import com.android.settings.drawable.CircleFramedDrawable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -123,13 +125,14 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
private static final String KEY_SUMMARY = "summary";
|
private static final String KEY_SUMMARY = "summary";
|
||||||
|
|
||||||
private PreferenceGroup mUserListCategory;
|
private PreferenceGroup mUserListCategory;
|
||||||
private Preference mMePreference;
|
private UserPreference mMePreference;
|
||||||
private SelectableEditTextPreference mNicknamePreference;
|
private SelectableEditTextPreference mNicknamePreference;
|
||||||
private Preference mAddUser;
|
private Preference mAddUser;
|
||||||
private int mRemovingUserId = -1;
|
private int mRemovingUserId = -1;
|
||||||
private int mAddedUserId = 0;
|
private int mAddedUserId = 0;
|
||||||
private boolean mAddingUser;
|
private boolean mAddingUser;
|
||||||
private boolean mEnabled = true;
|
private boolean mEnabled = true;
|
||||||
|
private boolean mCanAddUser = true;
|
||||||
private boolean mCanAddRestrictedProfile = true;
|
private boolean mCanAddRestrictedProfile = true;
|
||||||
|
|
||||||
private final Object mUserLock = new Object();
|
private final Object mUserLock = new Object();
|
||||||
@@ -212,17 +215,21 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
mMePreference.setSummary(R.string.user_owner);
|
mMePreference.setSummary(R.string.user_owner);
|
||||||
}
|
}
|
||||||
mAddUser = findPreference(KEY_ADD_USER);
|
mAddUser = findPreference(KEY_ADD_USER);
|
||||||
if (!mIsOwner || UserManager.getMaxSupportedUsers() < 2
|
|
||||||
|| !UserManager.supportsMultipleUsers()
|
|
||||||
|| mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
|
|
||||||
removePreference(KEY_ADD_USER);
|
|
||||||
} else {
|
|
||||||
mAddUser.setOnPreferenceClickListener(this);
|
|
||||||
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
|
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
|
||||||
Context.DEVICE_POLICY_SERVICE);
|
Context.DEVICE_POLICY_SERVICE);
|
||||||
// No restricted profiles for tablets with a device owner, or phones.
|
// No restricted profiles for tablets with a device owner, or phones.
|
||||||
if (dpm.getDeviceOwner() != null || Utils.isVoiceCapable(context)) {
|
if (dpm.getDeviceOwner() != null || Utils.isVoiceCapable(context)) {
|
||||||
mCanAddRestrictedProfile = false;
|
mCanAddRestrictedProfile = false;
|
||||||
|
}
|
||||||
|
// Determine if add user/profile button should be visible
|
||||||
|
if (!mIsOwner || UserManager.getMaxSupportedUsers() < 2
|
||||||
|
|| !UserManager.supportsMultipleUsers()
|
||||||
|
|| mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
|
||||||
|
mCanAddUser = false;
|
||||||
|
} else {
|
||||||
|
mAddUser.setOnPreferenceClickListener(this);
|
||||||
|
// change label to only mention user, if restricted profiles are not supported
|
||||||
|
if (!mCanAddRestrictedProfile) {
|
||||||
mAddUser.setTitle(R.string.user_add_user_menu);
|
mAddUser.setTitle(R.string.user_add_user_menu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -712,18 +719,17 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
List<UserInfo> users = mUserManager.getUsers(true);
|
List<UserInfo> users = mUserManager.getUsers(true);
|
||||||
final Context context = getActivity();
|
final Context context = getActivity();
|
||||||
|
|
||||||
mUserListCategory.removeAll();
|
|
||||||
mUserListCategory.setOrderingAsAdded(false);
|
|
||||||
mUserListCategory.addPreference(mMePreference);
|
|
||||||
|
|
||||||
final boolean voiceCapable = Utils.isVoiceCapable(context);
|
final boolean voiceCapable = Utils.isVoiceCapable(context);
|
||||||
final ArrayList<Integer> missingIcons = new ArrayList<Integer>();
|
final ArrayList<Integer> missingIcons = new ArrayList<>();
|
||||||
|
final ArrayList<UserPreference> userPreferences = new ArrayList<>();
|
||||||
|
userPreferences.add(mMePreference);
|
||||||
|
|
||||||
for (UserInfo user : users) {
|
for (UserInfo user : users) {
|
||||||
if (user.isManagedProfile()) {
|
if (user.isManagedProfile()) {
|
||||||
// Managed profiles appear under Accounts Settings instead
|
// Managed profiles appear under Accounts Settings instead
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Preference pref;
|
UserPreference pref;
|
||||||
if (user.id == UserHandle.myUserId()) {
|
if (user.id == UserHandle.myUserId()) {
|
||||||
pref = mMePreference;
|
pref = mMePreference;
|
||||||
} else if (user.isGuest()) {
|
} else if (user.isGuest()) {
|
||||||
@@ -746,7 +752,7 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
showDelete ? this : null);
|
showDelete ? this : null);
|
||||||
pref.setOnPreferenceClickListener(this);
|
pref.setOnPreferenceClickListener(this);
|
||||||
pref.setKey("id=" + user.id);
|
pref.setKey("id=" + user.id);
|
||||||
mUserListCategory.addPreference(pref);
|
userPreferences.add(pref);
|
||||||
if (user.id == UserHandle.USER_OWNER) {
|
if (user.id == UserHandle.USER_OWNER) {
|
||||||
pref.setSummary(R.string.user_owner);
|
pref.setSummary(R.string.user_owner);
|
||||||
}
|
}
|
||||||
@@ -777,14 +783,66 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
|
|
||||||
// Add a temporary entry for the user being created
|
// Add a temporary entry for the user being created
|
||||||
if (mAddingUser) {
|
if (mAddingUser) {
|
||||||
Preference pref = new UserPreference(getActivity(), null, UserPreference.USERID_UNKNOWN,
|
UserPreference pref = new UserPreference(getActivity(), null,
|
||||||
null, null);
|
UserPreference.USERID_UNKNOWN, null, null);
|
||||||
pref.setEnabled(false);
|
pref.setEnabled(false);
|
||||||
pref.setTitle(R.string.user_new_user_name);
|
pref.setTitle(R.string.user_new_user_name);
|
||||||
pref.setIcon(getEncircledDefaultIcon());
|
pref.setIcon(getEncircledDefaultIcon());
|
||||||
mUserListCategory.addPreference(pref);
|
userPreferences.add(pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (shouldShowGuestUserPreference(users)) {
|
||||||
|
// Add a virtual Guest user for guest defaults
|
||||||
|
UserPreference pref = new UserPreference(getActivity(), null,
|
||||||
|
UserPreference.USERID_GUEST_DEFAULTS,
|
||||||
|
mIsOwner && voiceCapable? this : null /* settings icon handler */,
|
||||||
|
null /* delete icon handler */);
|
||||||
|
pref.setTitle(R.string.user_guest);
|
||||||
|
pref.setIcon(getEncircledDefaultIcon());
|
||||||
|
pref.setOnPreferenceClickListener(this);
|
||||||
|
userPreferences.add(pref);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort list of users by serialNum
|
||||||
|
Collections.sort(userPreferences, UserPreference.SERIAL_NUMBER_COMPARATOR);
|
||||||
|
|
||||||
|
getActivity().invalidateOptionsMenu();
|
||||||
|
|
||||||
|
// Load the icons
|
||||||
|
if (missingIcons.size() > 0) {
|
||||||
|
loadIconsAsync(missingIcons);
|
||||||
|
}
|
||||||
|
|
||||||
|
PreferenceScreen preferenceScreen = getPreferenceScreen();
|
||||||
|
preferenceScreen.removeAll();
|
||||||
|
|
||||||
|
// If profiles are supported, userPreferences will be added to the category labeled
|
||||||
|
// "User & Profiles", otherwise the category is skipped and elements are added directly
|
||||||
|
// to preferenceScreen
|
||||||
|
PreferenceGroup groupToAddUsers;
|
||||||
|
if (mCanAddRestrictedProfile) {
|
||||||
|
mUserListCategory.removeAll();
|
||||||
|
mUserListCategory.setOrder(Preference.DEFAULT_ORDER);
|
||||||
|
preferenceScreen.addPreference(mUserListCategory);
|
||||||
|
groupToAddUsers = mUserListCategory;
|
||||||
|
} else {
|
||||||
|
groupToAddUsers = preferenceScreen;
|
||||||
|
}
|
||||||
|
for (UserPreference userPreference : userPreferences) {
|
||||||
|
userPreference.setOrder(Preference.DEFAULT_ORDER);
|
||||||
|
groupToAddUsers.addPreference(userPreference);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append Add user to the end of the list
|
||||||
|
if (mCanAddUser) {
|
||||||
|
boolean moreUsers = mUserManager.canAddMoreUsers();
|
||||||
|
mAddUser.setEnabled(moreUsers);
|
||||||
|
mAddUser.setOrder(Preference.DEFAULT_ORDER);
|
||||||
|
preferenceScreen.addPreference(mAddUser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean shouldShowGuestUserPreference(List<UserInfo> users) {
|
||||||
boolean showGuestPreference = !mIsGuest;
|
boolean showGuestPreference = !mIsGuest;
|
||||||
// If user has DISALLOW_ADD_USER don't allow creating a guest either.
|
// If user has DISALLOW_ADD_USER don't allow creating a guest either.
|
||||||
if (showGuestPreference && mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
|
if (showGuestPreference && mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
|
||||||
@@ -797,27 +855,9 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (showGuestPreference) {
|
return showGuestPreference;
|
||||||
// Add a virtual Guest user for guest defaults
|
|
||||||
Preference pref = new UserPreference(getActivity(), null,
|
|
||||||
UserPreference.USERID_GUEST_DEFAULTS,
|
|
||||||
mIsOwner && voiceCapable? this : null /* settings icon handler */,
|
|
||||||
null /* delete icon handler */);
|
|
||||||
pref.setTitle(R.string.user_guest);
|
|
||||||
pref.setIcon(getEncircledDefaultIcon());
|
|
||||||
pref.setOnPreferenceClickListener(this);
|
|
||||||
mUserListCategory.addPreference(pref);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getActivity().invalidateOptionsMenu();
|
|
||||||
|
|
||||||
// Load the icons
|
|
||||||
if (missingIcons.size() > 0) {
|
|
||||||
loadIconsAsync(missingIcons);
|
|
||||||
}
|
|
||||||
boolean moreUsers = mUserManager.canAddMoreUsers();
|
|
||||||
mAddUser.setEnabled(moreUsers);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadIconsAsync(List<Integer> missingIcons) {
|
private void loadIconsAsync(List<Integer> missingIcons) {
|
||||||
final Resources resources = getResources();
|
final Resources resources = getResources();
|
||||||
|
Reference in New Issue
Block a user