Split User settings into limited and trusted.

Also show avatars with the circular frame like on lockscreen.

Change-Id: I032d842555b2f50a07166460f9cfb1963366dbb1
This commit is contained in:
Amith Yamasani
2013-03-27 12:27:01 -07:00
parent 86ecd3c437
commit 864e3b7c51
8 changed files with 249 additions and 29 deletions

View File

@@ -31,6 +31,7 @@ import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
@@ -76,7 +77,8 @@ public class UserSettings extends SettingsPreferenceFragment
private static final String SAVE_ADDING_USER = "adding_user";
private static final String KEY_USER_NICKNAME = "user_nickname";
private static final String KEY_USER_LIST = "user_list";
private static final String KEY_TRUSTED_USER_LIST = "trusted_user_list";
private static final String KEY_LIMITED_USER_LIST = "limited_user_list";
private static final String KEY_USER_ME = "user_me";
private static final String KEY_ADD_RESTRICTED_USER = "user_add_restricted";
private static final String KEY_ADD_TRUSTED_USER = "user_add_trusted";
@@ -106,7 +108,8 @@ public class UserSettings extends SettingsPreferenceFragment
R.drawable.avatar_default_8
};
private PreferenceGroup mUserListCategory;
private PreferenceGroup mTrustedUserListCategory;
private PreferenceGroup mLimitedUserListCategory;
private Preference mMePreference;
private SelectableEditTextPreference mNicknamePreference;
private Preference mAddRestrictedUser;
@@ -118,7 +121,7 @@ public class UserSettings extends SettingsPreferenceFragment
private final Object mUserLock = new Object();
private UserManager mUserManager;
private SparseArray<Drawable> mUserIcons = new SparseArray<Drawable>();
private SparseArray<Bitmap> mUserIcons = new SparseArray<Bitmap>();
private boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER;
@@ -166,7 +169,8 @@ public class UserSettings extends SettingsPreferenceFragment
mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
addPreferencesFromResource(R.xml.user_settings);
mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST);
mTrustedUserListCategory = (PreferenceGroup) findPreference(KEY_TRUSTED_USER_LIST);
mLimitedUserListCategory = (PreferenceGroup) findPreference(KEY_LIMITED_USER_LIST);
mMePreference = (Preference) findPreference(KEY_USER_ME);
mMePreference.setOnPreferenceClickListener(this);
if (!mIsOwner) {
@@ -269,9 +273,8 @@ public class UserSettings extends SettingsPreferenceFragment
int myUserId = UserHandle.myUserId();
Bitmap b = mUserManager.getUserIcon(myUserId);
if (b != null) {
Drawable d = new BitmapDrawable(b);
mMePreference.setIcon(d);
mUserIcons.put(myUserId, d);
mMePreference.setIcon(encircle(b));
mUserIcons.put(myUserId, b);
}
}
@@ -441,8 +444,10 @@ public class UserSettings extends SettingsPreferenceFragment
if (getActivity() == null) return;
List<UserInfo> users = mUserManager.getUsers(true);
mUserListCategory.removeAll();
mUserListCategory.setOrderingAsAdded(false);
mTrustedUserListCategory.removeAll();
mTrustedUserListCategory.setOrderingAsAdded(false);
mLimitedUserListCategory.removeAll();
mLimitedUserListCategory.setOrderingAsAdded(false);
final ArrayList<Integer> missingIcons = new ArrayList<Integer>();
for (UserInfo user : users) {
@@ -456,19 +461,23 @@ public class UserSettings extends SettingsPreferenceFragment
UserHandle.myUserId() == UserHandle.USER_OWNER, this, this);
pref.setOnPreferenceClickListener(this);
pref.setKey("id=" + user.id);
mUserListCategory.addPreference(pref);
if (user.isRestricted()) {
mLimitedUserListCategory.addPreference(pref);
} else {
mTrustedUserListCategory.addPreference(pref);
}
if (user.id == UserHandle.USER_OWNER) {
pref.setSummary(R.string.user_owner);
}
pref.setTitle(user.name);
// if (!isInitialized(user)) {
// pref.setSummary(R.string.user_summary_not_set_up);
// }
if (!isInitialized(user)) {
pref.setSummary(R.string.user_summary_not_set_up);
}
}
if (user.iconPath != null) {
if (mUserIcons.get(user.id) == null) {
missingIcons.add(user.id);
pref.setIcon(R.drawable.avatar_default_1);
pref.setIcon(encircle(R.drawable.avatar_default_1));
} else {
setPhotoId(pref, user);
}
@@ -480,9 +489,8 @@ public class UserSettings extends SettingsPreferenceFragment
false, null, null);
pref.setEnabled(false);
pref.setTitle(R.string.user_new_user_name);
//pref.setSummary(R.string.user_adding_new_user);
pref.setIcon(R.drawable.avatar_default_1);
mUserListCategory.addPreference(pref);
pref.setIcon(encircle(R.drawable.avatar_default_1));
mTrustedUserListCategory.addPreference(pref);
}
getActivity().invalidateOptionsMenu();
@@ -490,6 +498,9 @@ public class UserSettings extends SettingsPreferenceFragment
if (missingIcons.size() > 0) {
loadIconsAsync(missingIcons);
}
boolean moreUsers = mUserManager.getMaxSupportedUsers() > users.size();
mAddRestrictedUser.setEnabled(moreUsers);
mAddTrustedUser.setEnabled(moreUsers);
}
private void loadIconsAsync(List<Integer> missingIcons) {
@@ -504,8 +515,7 @@ public class UserSettings extends SettingsPreferenceFragment
protected Void doInBackground(List<Integer>... values) {
for (int userId : values[0]) {
Bitmap bitmap = mUserManager.getUserIcon(userId);
Drawable d = new BitmapDrawable(resources, bitmap);
mUserIcons.append(userId, d);
mUserIcons.append(userId, bitmap);
}
return null;
}
@@ -533,9 +543,9 @@ public class UserSettings extends SettingsPreferenceFragment
}
private void setPhotoId(Preference pref, UserInfo user) {
Drawable d = mUserIcons.get(user.id); // UserUtils.getUserIcon(mUserManager, user);
if (d != null) {
pref.setIcon(d);
Bitmap bitmap = mUserIcons.get(user.id); // UserUtils.getUserIcon(mUserManager, user);
if (bitmap != null) {
pref.setIcon(encircle(bitmap));
}
}
@@ -591,6 +601,16 @@ public class UserSettings extends SettingsPreferenceFragment
return (user.flags & UserInfo.FLAG_INITIALIZED) != 0;
}
private Drawable encircle(int iconResId) {
Bitmap icon = BitmapFactory.decodeResource(getResources(), iconResId);
return encircle(icon);
}
private Drawable encircle(Bitmap icon) {
Drawable circled = CircleFramedDrawable.getInstance(getActivity(), icon);
return circled;
}
@Override
public void onClick(View v) {
if (v.getTag() instanceof UserPreference) {