diff options
author | Amith Yamasani <yamasani@google.com> | 2012-09-17 22:53:21 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-17 22:53:21 -0700 |
commit | f7a6dfcafc1eaa8014b4fa796e4b31208f72fd36 (patch) | |
tree | bf0fe6031e172c65d9a63e3730843f490f7a3f10 /services/java/com/android/server/pm/UserManagerService.java | |
parent | 931be0ee0cc5e6e762336429bf23640c6e71b936 (diff) | |
parent | e928d7d95dbb64627e6ff3a0572190c555b59d96 (diff) | |
download | frameworks_base-f7a6dfcafc1eaa8014b4fa796e4b31208f72fd36.zip frameworks_base-f7a6dfcafc1eaa8014b4fa796e4b31208f72fd36.tar.gz frameworks_base-f7a6dfcafc1eaa8014b4fa796e4b31208f72fd36.tar.bz2 |
Merge "Pass Bitmap instead of ParcelFileDescriptor in UserManager" into jb-mr1-dev
Diffstat (limited to 'services/java/com/android/server/pm/UserManagerService.java')
-rw-r--r-- | services/java/com/android/server/pm/UserManagerService.java | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java index 690d7c9..be86628 100644 --- a/services/java/com/android/server/pm/UserManagerService.java +++ b/services/java/com/android/server/pm/UserManagerService.java @@ -29,6 +29,8 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.UserInfo; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Binder; import android.os.Environment; import android.os.FileUtils; @@ -188,30 +190,35 @@ public class UserManagerService extends IUserManager.Stub { writeUserLocked(info); } } + sendUserInfoChangedBroadcast(userId); } @Override - public ParcelFileDescriptor setUserIcon(int userId) { + public void setUserIcon(int userId, Bitmap bitmap) { checkManageUsersPermission("update users"); synchronized (mPackagesLock) { UserInfo info = mUsers.get(userId); - if (info == null) return null; - ParcelFileDescriptor fd = openIconBitmapLocked(info, true /* write */); - if (fd != null) { - writeUserLocked(info); - } - return fd; + if (info == null) return; + writeBitmapLocked(info, bitmap); + writeUserLocked(info); } + sendUserInfoChangedBroadcast(userId); + } + + private void sendUserInfoChangedBroadcast(int userId) { + Intent changedIntent = new Intent(Intent.ACTION_USER_INFO_CHANGED); + changedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId); + changedIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + mContext.sendBroadcastAsUser(changedIntent, new UserHandle(userId)); } @Override - public ParcelFileDescriptor getUserIcon(int userId) { + public Bitmap getUserIcon(int userId) { checkManageUsersPermission("read users"); synchronized (mPackagesLock) { UserInfo info = mUsers.get(userId); if (info == null || info.iconPath == null) return null; - ParcelFileDescriptor fd = openIconBitmapLocked(info, false /* read */); - return fd; + return BitmapFactory.decodeFile(info.iconPath); } } @@ -289,7 +296,7 @@ public class UserManagerService extends IUserManager.Stub { } } - private ParcelFileDescriptor openIconBitmapLocked(UserInfo info, boolean toWrite) { + private void writeBitmapLocked(UserInfo info, Bitmap bitmap) { try { File dir = new File(mUsersDir, Integer.toString(info.id)); File file = new File(dir, USER_PHOTO_FILENAME); @@ -300,16 +307,18 @@ public class UserManagerService extends IUserManager.Stub { FileUtils.S_IRWXU|FileUtils.S_IRWXG|FileUtils.S_IXOTH, -1, -1); } - ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, - toWrite ? MODE_CREATE|MODE_READ_WRITE : MODE_READ_WRITE); - if (toWrite) { + FileOutputStream os; + if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, os = new FileOutputStream(file))) { info.iconPath = file.getAbsolutePath(); } - return fd; + try { + os.close(); + } catch (IOException ioe) { + // What the ... ! + } } catch (FileNotFoundException e) { Slog.w(LOG_TAG, "Error setting photo for user ", e); } - return null; } /** |