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
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 4.4 KiB |
BIN
res/drawable-hdpi/ic_person_white.png
Normal file
After Width: | Height: | Size: 884 B |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.8 KiB |
BIN
res/drawable-mdpi/ic_person_white.png
Normal file
After Width: | Height: | Size: 695 B |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 6.4 KiB |
BIN
res/drawable-xhdpi/ic_person_white.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
res/drawable-xxhdpi/ic_person_white.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
res/drawable-xxxhdpi/ic_person_white.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
28
res/drawable/ic_avatar_default_1.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_default_2.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_default_3.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_default_4.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_default_5.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_default_6.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_default_7.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_default_8.xml
Normal 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>
|
||||||
|
|
28
res/drawable/ic_avatar_guest.xml
Normal 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>
|
||||||
|
|
@@ -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>
|
||||||
|
@@ -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>
|
||||||
|
@@ -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);
|
||||||
|