diff options
author | Adrian Roos <roosa@google.com> | 2015-02-17 15:51:35 +0100 |
---|---|---|
committer | Adrian Roos <roosa@google.com> | 2015-02-17 20:57:23 +0100 |
commit | 1bdff9139fd412b36d5d2d783574b6418fcb198a (patch) | |
tree | babd2f99528a26cce0c494fda2dcc7936cac5735 /core/java/android/os/UserManager.java | |
parent | 211f8b4d83fab4b4e036ff538bd8c14fbb856b72 (diff) | |
download | frameworks_base-1bdff9139fd412b36d5d2d783574b6418fcb198a.zip frameworks_base-1bdff9139fd412b36d5d2d783574b6418fcb198a.tar.gz frameworks_base-1bdff9139fd412b36d5d2d783574b6418fcb198a.tar.bz2 |
Decouple package manager lock and bitmap decoding
Also moves the actual reading and decoding of the
icon into the client process to avoid unnecessary
copies.
Bug: 18474438
Change-Id: I71623ef48c770d752593aa97d69517f6139cc947
Diffstat (limited to 'core/java/android/os/UserManager.java')
-rw-r--r-- | core/java/android/os/UserManager.java | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index d124a49..60ab05c 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.provider.Settings; @@ -30,6 +31,7 @@ import android.view.WindowManager.LayoutParams; import com.android.internal.R; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -1083,11 +1085,21 @@ public class UserManager { */ public Bitmap getUserIcon(int userHandle) { try { - return mService.getUserIcon(userHandle); + ParcelFileDescriptor fd = mService.getUserIcon(userHandle); + if (fd != null) { + try { + return BitmapFactory.decodeFileDescriptor(fd.getFileDescriptor()); + } finally { + try { + fd.close(); + } catch (IOException e) { + } + } + } } catch (RemoteException re) { Log.w(TAG, "Could not get the user icon ", re); - return null; } + return null; } /** |