Improvements to user settings

Exiting guest mode from within guest user.
Updated assets and cleaned up/optimized some asset clipping code.

Bug: 15761851
Bug: 16355550
Change-Id: I431e92bac3cbedd46bd1e33cffc4d9f0c576ca69
This commit is contained in:
Amith Yamasani
2014-07-17 19:13:51 -07:00
parent c42d4059b5
commit c16b73e92b
65 changed files with 362 additions and 18 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/pink_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/indigo_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/blue_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/teal_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/green_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/light_green_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/orange_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/deep_orange_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="40dp" android:height="40dp" />
<solid android:color="@color/grey_500" />
</shape>
</item>
<item android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp"
android:drawable="@drawable/ic_person_white" />
</layer-list>

View File

@@ -67,4 +67,17 @@
<color name="default_preference_background_color">@android:color/white</color> <color name="default_preference_background_color">@android:color/white</color>
<color name="preference_list_fragment_background_color">@color/default_preference_background_color</color> <color name="preference_list_fragment_background_color">@color/default_preference_background_color</color>
<color name="search_panel_list_background_color">@color/default_preference_background_color</color> <color name="search_panel_list_background_color">@color/default_preference_background_color</color>
<!-- Default avatar colors -->
<color name="pink_500">#ffe91e63</color>
<color name="indigo_500">#ff3f51b5</color>
<color name="blue_500">@*android:color/material_blue_500</color>
<color name="teal_500">@*android:color/material_teal_500</color>
<color name="green_500">@*android:color/material_green_500</color>
<color name="light_green_500">#ff8bc34a</color>
<color name="orange_500">@*android:color/material_orange_500</color>
<color name="deep_orange_500">@*android:color/material_deep_orange_500</color>
<!-- Avatar color used for guest -->
<color name="grey_500">@*android:color/material_grey_500</color>
</resources> </resources>

View File

@@ -5171,6 +5171,12 @@
<string name="user_delete_button">Delete</string> <string name="user_delete_button">Delete</string>
<!-- Title for Guest user [CHAR LIMIT=35] --> <!-- Title for Guest user [CHAR LIMIT=35] -->
<string name="user_guest">Guest</string> <string name="user_guest">Guest</string>
<!-- Label for item to exit guest mode [CHAR LIMIT=35] -->
<string name="user_exit_guest_title">Exit guest</string>
<!-- Title of dialog to user to confirm exiting guest. [CHAR LIMIT=50] -->
<string name="user_exit_guest_confirm_title">Exiting guest session?</string>
<!-- Message to user to confirm exiting guest. [CHAR LIMIT=none] -->
<string name="user_exit_guest_confirm_message">Ending the guest session will remove local data.</string>
<!-- Title of preference to enable calling[CHAR LIMIT=35] --> <!-- Title of preference to enable calling[CHAR LIMIT=35] -->
<string name="user_enable_calling">Enable phone calls?</string> <string name="user_enable_calling">Enable phone calls?</string>

View File

@@ -37,6 +37,7 @@ import android.content.pm.UserInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
@@ -93,6 +94,7 @@ public class UserSettings extends SettingsPreferenceFragment
private static final int DIALOG_USER_CANNOT_MANAGE = 5; private static final int DIALOG_USER_CANNOT_MANAGE = 5;
private static final int DIALOG_CHOOSE_USER_TYPE = 6; private static final int DIALOG_CHOOSE_USER_TYPE = 6;
private static final int DIALOG_NEED_LOCKSCREEN = 7; private static final int DIALOG_NEED_LOCKSCREEN = 7;
private static final int DIALOG_CONFIRM_EXIT_GUEST = 8;
private static final int MESSAGE_UPDATE_LIST = 1; private static final int MESSAGE_UPDATE_LIST = 1;
private static final int MESSAGE_SETUP_USER = 2; private static final int MESSAGE_SETUP_USER = 2;
@@ -107,16 +109,18 @@ public class UserSettings extends SettingsPreferenceFragment
"key_add_user_long_message_displayed"; "key_add_user_long_message_displayed";
static final int[] USER_DRAWABLES = { static final int[] USER_DRAWABLES = {
R.drawable.avatar_default_1, R.drawable.ic_avatar_default_1,
R.drawable.avatar_default_2, R.drawable.ic_avatar_default_2,
R.drawable.avatar_default_3, R.drawable.ic_avatar_default_3,
R.drawable.avatar_default_4, R.drawable.ic_avatar_default_4,
R.drawable.avatar_default_5, R.drawable.ic_avatar_default_5,
R.drawable.avatar_default_6, R.drawable.ic_avatar_default_6,
R.drawable.avatar_default_7, R.drawable.ic_avatar_default_7,
R.drawable.avatar_default_8 R.drawable.ic_avatar_default_8
}; };
private static final int GUEST_DRAWABLE_ID = R.drawable.ic_avatar_guest;
private static final String KEY_TITLE = "title"; private static final String KEY_TITLE = "title";
private static final String KEY_SUMMARY = "summary"; private static final String KEY_SUMMARY = "summary";
@@ -137,6 +141,11 @@ public class UserSettings extends SettingsPreferenceFragment
private boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER; private boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER;
private boolean mIsGuest; private boolean mIsGuest;
// A place to cache the generated guest avatar
private Drawable mGuestDrawable;
// A place to cache the generated default avatar
private Drawable mDefaultAvatarDrawable;
private Handler mHandler = new Handler() { private Handler mHandler = new Handler() {
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
@@ -195,8 +204,9 @@ public class UserSettings extends SettingsPreferenceFragment
addPreferencesFromResource(R.xml.user_settings); addPreferencesFromResource(R.xml.user_settings);
mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST); mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST);
mMePreference = new UserPreference(context, null, myUserId, mMePreference = new UserPreference(context, null /* attrs */, myUserId,
mUserManager.isLinkedUser() ? null : this, null); mUserManager.isLinkedUser() || mIsGuest ? null : this /* settings icon handler */,
null /* delete icon handler */);
mMePreference.setKey(KEY_USER_ME); mMePreference.setKey(KEY_USER_ME);
mMePreference.setOnPreferenceClickListener(this); mMePreference.setOnPreferenceClickListener(this);
if (mIsOwner) { if (mIsOwner) {
@@ -275,8 +285,18 @@ public class UserSettings extends SettingsPreferenceFragment
} }
} }
/**
* Loads profile information for the current user.
*/
private void loadProfile() { private void loadProfile() {
mProfileExists = false; mProfileExists = false;
if (mIsGuest) {
// No need to load profile information
mMePreference.setIcon(getEncircledGuestDrawable());
mMePreference.setTitle(R.string.user_exit_guest_title);
return;
}
new AsyncTask<Void, Void, String>() { new AsyncTask<Void, Void, String>() {
@Override @Override
protected void onPostExecute(String result) { protected void onPostExecute(String result) {
@@ -370,9 +390,8 @@ public class UserSettings extends SettingsPreferenceFragment
mUserManager.setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, true, user); mUserManager.setUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, true, user);
Secure.putIntForUser(getContentResolver(), Secure.putIntForUser(getContentResolver(),
Secure.LOCATION_MODE, Secure.LOCATION_MODE_OFF, userId); Secure.LOCATION_MODE, Secure.LOCATION_MODE_OFF, userId);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), Bitmap bitmap = createBitmapFromDrawable(
UserSettings.USER_DRAWABLES[ USER_DRAWABLES[userId % UserSettings.USER_DRAWABLES.length]);
userId % UserSettings.USER_DRAWABLES.length]);
mUserManager.setUserIcon(userId, bitmap); mUserManager.setUserIcon(userId, bitmap);
// Add shared accounts // Add shared accounts
AccountManager am = AccountManager.get(getActivity()); AccountManager am = AccountManager.get(getActivity());
@@ -385,6 +404,15 @@ public class UserSettings extends SettingsPreferenceFragment
return newUserInfo; return newUserInfo;
} }
private Bitmap createBitmapFromDrawable(int resId) {
Drawable icon = getResources().getDrawable(resId);
icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(),
Bitmap.Config.ARGB_8888);
icon.draw(new Canvas(bitmap));
return bitmap;
}
private UserInfo createTrustedUser() { private UserInfo createTrustedUser() {
UserInfo newUserInfo = mUserManager.createUser( UserInfo newUserInfo = mUserManager.createUser(
getResources().getString(R.string.user_new_user_name), 0); getResources().getString(R.string.user_new_user_name), 0);
@@ -567,6 +595,21 @@ public class UserSettings extends SettingsPreferenceFragment
.create(); .create();
return dlg; return dlg;
} }
case DIALOG_CONFIRM_EXIT_GUEST: {
Dialog dlg = new AlertDialog.Builder(context)
.setTitle(R.string.user_exit_guest_confirm_title)
.setMessage(R.string.user_exit_guest_confirm_message)
.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
exitGuest();
}
})
.setNegativeButton(android.R.string.no, null)
.create();
return dlg;
}
default: default:
return null; return null;
} }
@@ -634,6 +677,17 @@ public class UserSettings extends SettingsPreferenceFragment
} }
} }
/**
* Erase the current user (guest) and switch to another user.
*/
private void exitGuest() {
// Just to be safe
if (!mIsGuest) {
return;
}
removeThisUser();
}
private void updateUserList() { private void updateUserList() {
if (getActivity() == null) return; if (getActivity() == null) return;
List<UserInfo> users = mUserManager.getUsers(true); List<UserInfo> users = mUserManager.getUsers(true);
@@ -695,7 +749,7 @@ public class UserSettings extends SettingsPreferenceFragment
if (user.iconPath != null) { if (user.iconPath != null) {
if (mUserIcons.get(user.id) == null) { if (mUserIcons.get(user.id) == null) {
missingIcons.add(user.id); missingIcons.add(user.id);
pref.setIcon(encircle(R.drawable.avatar_default_1)); pref.setIcon(getEncircledDefaultAvatar());
} else { } else {
setPhotoId(pref, user); setPhotoId(pref, user);
} }
@@ -707,7 +761,7 @@ public class UserSettings extends SettingsPreferenceFragment
null, null); 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(encircle(R.drawable.avatar_default_1)); pref.setIcon(getEncircledDefaultAvatar());
mUserListCategory.addPreference(pref); mUserListCategory.addPreference(pref);
} }
@@ -716,7 +770,7 @@ public class UserSettings extends SettingsPreferenceFragment
Preference pref = new UserPreference(getActivity(), null, Preference pref = new UserPreference(getActivity(), null,
UserPreference.USERID_GUEST_DEFAULTS, mIsOwner ? this : null, null); UserPreference.USERID_GUEST_DEFAULTS, mIsOwner ? this : null, null);
pref.setTitle(R.string.user_guest); pref.setTitle(R.string.user_guest);
pref.setIcon(encircle(R.drawable.ic_settings_accounts)); pref.setIcon(getEncircledGuestDrawable());
pref.setOnPreferenceClickListener(this); pref.setOnPreferenceClickListener(this);
mUserListCategory.addPreference(pref); mUserListCategory.addPreference(pref);
} }
@@ -765,11 +819,26 @@ public class UserSettings extends SettingsPreferenceFragment
} }
private void assignDefaultPhoto(UserInfo user) { private void assignDefaultPhoto(UserInfo user) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), Bitmap bitmap = createBitmapFromDrawable(
USER_DRAWABLES[user.id % USER_DRAWABLES.length]); USER_DRAWABLES[user.id % UserSettings.USER_DRAWABLES.length]);
mUserManager.setUserIcon(user.id, bitmap); mUserManager.setUserIcon(user.id, bitmap);
} }
private Drawable getEncircledGuestDrawable() {
if (mGuestDrawable == null) {
mGuestDrawable = encircle(createBitmapFromDrawable(GUEST_DRAWABLE_ID));
}
return mGuestDrawable;
}
private Drawable getEncircledDefaultAvatar() {
if (mDefaultAvatarDrawable == null) {
mDefaultAvatarDrawable =
encircle(createBitmapFromDrawable(R.drawable.ic_avatar_default_1));
}
return mDefaultAvatarDrawable;
}
private void setPhotoId(Preference pref, UserInfo user) { private void setPhotoId(Preference pref, UserInfo user) {
Bitmap bitmap = mUserIcons.get(user.id); Bitmap bitmap = mUserIcons.get(user.id);
if (bitmap != null) { if (bitmap != null) {
@@ -786,6 +855,10 @@ public class UserSettings extends SettingsPreferenceFragment
@Override @Override
public boolean onPreferenceClick(Preference pref) { public boolean onPreferenceClick(Preference pref) {
if (pref == mMePreference) { if (pref == mMePreference) {
if (mIsGuest) {
showDialog(DIALOG_CONFIRM_EXIT_GUEST);
return true;
}
Intent editProfile; Intent editProfile;
if (!mProfileExists) { if (!mProfileExists) {
editProfile = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); editProfile = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);