Merge "Remove Users & profiles header for phones"

This commit is contained in:
Fyodor Kupolov
2014-12-19 01:47:13 +00:00
committed by Android (Google) Code Review
2 changed files with 93 additions and 45 deletions

View File

@@ -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;
}
}
} }

View File

@@ -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);
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
// No restricted profiles for tablets with a device owner, or phones.
if (dpm.getDeviceOwner() != null || Utils.isVoiceCapable(context)) {
mCanAddRestrictedProfile = false;
}
// Determine if add user/profile button should be visible
if (!mIsOwner || UserManager.getMaxSupportedUsers() < 2 if (!mIsOwner || UserManager.getMaxSupportedUsers() < 2
|| !UserManager.supportsMultipleUsers() || !UserManager.supportsMultipleUsers()
|| mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) { || mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER)) {
removePreference(KEY_ADD_USER); mCanAddUser = false;
} else { } else {
mAddUser.setOnPreferenceClickListener(this); mAddUser.setOnPreferenceClickListener(this);
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService( // change label to only mention user, if restricted profiles are not supported
Context.DEVICE_POLICY_SERVICE); if (!mCanAddRestrictedProfile) {
// No restricted profiles for tablets with a device owner, or phones.
if (dpm.getDeviceOwner() != null || Utils.isVoiceCapable(context)) {
mCanAddRestrictedProfile = false;
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,28 +855,10 @@ 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();
new AsyncTask<List<Integer>, Void, Void>() { new AsyncTask<List<Integer>, Void, Void>() {