From 48fa857c92ac31b36b5a2ed7ef2c65d85fcbcaa0 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Tue, 17 Apr 2012 17:12:01 -0700 Subject: [PATCH] UI to add a photo to a user's profile. Photo will be shown in user management screen and switcher. Change-Id: Icc0a39487daae13530fc1741780fb42fee0dada4 --- AndroidManifest.xml | 1 + res/values/strings.xml | 5 + res/xml/settings_headers.xml | 14 +-- res/xml/user_details.xml | 11 ++ .../settings/users/UserDetailsSettings.java | 109 ++++++++++++++++-- .../android/settings/users/UserSettings.java | 11 +- 6 files changed, 134 insertions(+), 17 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index cf1f888ab4d..795a2e8b7a5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -6,6 +6,7 @@ + diff --git a/res/values/strings.xml b/res/values/strings.xml index fb236b3639e..e07013102c9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4065,4 +4065,9 @@ + + + Account for content + + Photo ID diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml index 2089bac91a0..96ce0f1f71f 100644 --- a/res/xml/settings_headers.xml +++ b/res/xml/settings_headers.xml @@ -106,13 +106,6 @@
- -
-
+ +
+
+ + 0) { + if (mUserId >= 0) { initExistingUser(); } else { initNewUser(); @@ -124,6 +140,9 @@ public class UserDetailsSettings extends SettingsPreferenceFragment @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + if (mUserId == 0) { + return; + } MenuItem addAccountItem = menu.add(0, MENU_REMOVE_USER, 0, mNewUser ? R.string.user_discard_user_menu : R.string.user_remove_user_menu); addAccountItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM @@ -153,6 +172,9 @@ public class UserDetailsSettings extends SettingsPreferenceFragment if (foundUser != null) { mNamePref.setSummary(foundUser.name); mNamePref.setText(foundUser.name); + if (foundUser.iconPath != null) { + setPhotoId(foundUser.iconPath); + } } } @@ -200,6 +222,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment } private void refreshApps() { + if (mUserId == 0) return; mSystemAppGroup.removeAll(); mInstalledAppGroup.removeAll(); @@ -254,7 +277,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment return false; } try { - mIPm.updateUserName(mUserId, (String) newValue); + mIPm.setUserName(mUserId, (String) newValue); mNamePref.setSummary((String) newValue); } catch (RemoteException re) { return false; @@ -282,4 +305,72 @@ public class UserDetailsSettings extends SettingsPreferenceFragment return null; } } + + @Override + public boolean onPreferenceClick(Preference preference) { + if (preference == mAccountPref) { +// Intent launch = AccountManager.newChooseAccountsIntent(null, null, new String[]{"com.google"}, false, null, +// null, null, null); + } else if (preference == mPicturePref) { + Intent intent = new Intent(); + intent.setType("image/*"); + intent.setAction(Intent.ACTION_GET_CONTENT); + + startActivityForResult(intent, RESULT_PICK_IMAGE); + } + return false; + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode != Activity.RESULT_OK) { + return; + } + switch (requestCode) { + case RESULT_PICK_IMAGE: + if (data.getData() != null) { + Uri imageUri = data.getData(); + System.err.println("imageUri = " + imageUri); + cropImage(imageUri); + } + break; + case RESULT_CROP_IMAGE: + saveCroppedImage(data); + break; + } + } + + private void cropImage(Uri imageUri) { + final Uri inputPhotoUri = imageUri; + Intent intent = new Intent("com.android.camera.action.CROP"); + intent.setDataAndType(inputPhotoUri, "image/*"); + intent.putExtra("crop", "true"); + intent.putExtra("aspectX", 1); + intent.putExtra("aspectY", 1); + intent.putExtra("outputX", 96); + intent.putExtra("outputY", 96); + intent.putExtra("return-data", true); + startActivityForResult(intent, RESULT_CROP_IMAGE); + } + + private void saveCroppedImage(Intent data) { + try { + if (data.hasExtra("data")) { + Bitmap bitmap = (Bitmap) data.getParcelableExtra("data"); + ParcelFileDescriptor fd = mIPm.setUserIcon(mUserId); + if (fd != null) { + bitmap.compress(CompressFormat.PNG, 100, + new ParcelFileDescriptor.AutoCloseOutputStream(fd)); + setPhotoId(mPm.getUser(mUserId).iconPath); + } + } + } catch (RemoteException re) { + } + } + + private void setPhotoId(String realPath) { + Drawable d = Drawable.createFromPath(realPath); + if (d == null) return; + mPicturePref.setIcon(d); + } } diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 93805867194..d32cb45efb7 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -17,6 +17,7 @@ package com.android.settings.users; import android.content.pm.UserInfo; +import android.graphics.drawable.Drawable; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; @@ -83,15 +84,23 @@ public class UserSettings extends SettingsPreferenceFragment mUserListCategory.removeAll(); for (UserInfo user : users) { - if (user.id == 0) continue; Preference pref = new Preference(getActivity()); pref.setTitle(user.name); pref.setOnPreferenceClickListener(this); pref.setKey("id=" + user.id); + if (user.iconPath != null) { + setPhotoId(pref, user.iconPath); + } mUserListCategory.addPreference(pref); } } + private void setPhotoId(Preference pref, String realPath) { + Drawable d = Drawable.createFromPath(realPath); + if (d == null) return; + pref.setIcon(d); + } + @Override public boolean onPreferenceClick(Preference pref) { String sid = pref.getKey();