Index: chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
index 7716a10bdcc7161adea28a05b28b4aeebaffe526..07de6dbcdd953f18ca37adc6771f43ca0d566c46 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountManagementFragment.java |
@@ -32,6 +32,7 @@ import android.preference.PreferenceCategory; |
import android.preference.PreferenceFragment; |
import android.preference.PreferenceScreen; |
import android.support.annotation.Nullable; |
+import android.support.v7.content.res.AppCompatResources; |
import android.text.TextUtils; |
import android.util.Pair; |
import android.widget.ListView; |
@@ -94,10 +95,10 @@ public class AccountManagementFragment extends PreferenceFragment |
*/ |
private static final String SIGN_OUT_ALLOWED = "auto_signed_in_school_account"; |
- private static final HashMap<String, Pair<String, Bitmap>> sToNamePicture = new HashMap<>(); |
+ private static final HashMap<String, Pair<String, Drawable>> sToNamePicture = new HashMap<>(); |
private static String sChildAccountId; |
- private static Bitmap sCachedBadgedPicture; |
+ private static Drawable sCachedBadgedPicture; |
public static final String PREF_ACCOUNTS_CATEGORY = "accounts_category"; |
public static final String PREF_PARENTAL_SETTINGS = "parental_settings"; |
@@ -190,6 +191,7 @@ public class AccountManagementFragment extends PreferenceFragment |
* Initiate fetching the user accounts data (images and the full name). |
* Fetched data will be sent to observers of ProfileDownloader. |
* |
+ * @param context A context to get resources, current theme, etc. |
* @param profile Profile to use. |
*/ |
private static void startFetchingAccountsInformation(Context context, Profile profile) { |
@@ -384,9 +386,8 @@ public class AccountManagementFragment extends PreferenceFragment |
ChromeBasePreference pref = new ChromeBasePreference(getActivity()); |
pref.setTitle(account.name); |
- pref.setIcon(new BitmapDrawable(getResources(), |
- isChildAccount ? getBadgedUserPicture(account.name, getResources()) : |
- getUserPicture(account.name, getResources()))); |
+ pref.setIcon(isChildAccount ? getBadgedUserPicture(getActivity(), account.name) |
+ : getUserPicture(getActivity(), account.name)); |
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() { |
@Override |
@@ -442,7 +443,7 @@ public class AccountManagementFragment extends PreferenceFragment |
@Override |
public void onProfileDownloaded(String accountId, String fullName, String givenName, |
Bitmap bitmap) { |
- updateUserNamePictureCache(accountId, fullName, bitmap); |
+ updateUserNamePictureCache(getActivity(), accountId, fullName, bitmap); |
updateAccountsList(); |
} |
@@ -557,27 +558,29 @@ public class AccountManagementFragment extends PreferenceFragment |
/** |
* Converts a square user picture to a round user picture. |
+ * |
+ * @param context A context to get resources, current theme, etc. |
* @param bitmap A bitmap to convert. |
* @return A rounded picture bitmap. |
*/ |
- public static Bitmap makeRoundUserPicture(Bitmap bitmap) { |
+ public static Drawable makeRoundUserPicture(Context context, Bitmap bitmap) { |
if (bitmap == null) return null; |
- Bitmap output = Bitmap.createBitmap( |
- bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); |
+ int imageSizePx = context.getResources().getDimensionPixelSize(R.dimen.user_picture_size); |
+ Bitmap output = Bitmap.createBitmap(imageSizePx, imageSizePx, Config.ARGB_8888); |
Canvas canvas = new Canvas(output); |
final Paint paint = new Paint(); |
- final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); |
- |
canvas.drawARGB(0, 0, 0, 0); |
paint.setAntiAlias(true); |
paint.setColor(0xFFFFFFFF); |
- canvas.drawCircle(bitmap.getWidth() * 0.5f, bitmap.getHeight() * 0.5f, |
- bitmap.getWidth() * 0.5f, paint); |
+ canvas.drawCircle(imageSizePx * 0.5f, imageSizePx * 0.5f, imageSizePx * 0.5f, paint); |
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); |
- canvas.drawBitmap(bitmap, rect, rect, paint); |
- return output; |
+ |
+ Rect srcRect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); |
+ Rect dstRect = new Rect(0, 0, imageSizePx, imageSizePx); |
+ canvas.drawBitmap(bitmap, srcRect, dstRect, paint); |
+ return new BitmapDrawable(context.getResources(), output); |
} |
/** |
@@ -586,9 +589,9 @@ public class AccountManagementFragment extends PreferenceFragment |
* @param badge A bitmap to overlay with. |
* @return A bitmap with the badge overlaying the {@code userPicture}. |
*/ |
- private static Bitmap overlayChildBadgeOnUserPicture( |
- Bitmap userPicture, Bitmap badge, Resources resources) { |
- assert userPicture.getWidth() == resources.getDimensionPixelSize(R.dimen.user_picture_size); |
+ private static Drawable overlayChildBadgeOnUserPicture( |
+ Drawable userPicture, Bitmap badge, Resources resources) { |
+ int imageSizePx = resources.getDimensionPixelOffset(R.dimen.user_picture_size); |
int borderSize = resources.getDimensionPixelOffset(R.dimen.badge_border_size); |
int badgeRadius = resources.getDimensionPixelOffset(R.dimen.badge_radius); |
@@ -600,7 +603,8 @@ public class AccountManagementFragment extends PreferenceFragment |
Bitmap badgedPicture = Bitmap.createBitmap(badgedPictureWidth, badgedPictureHeight, |
Bitmap.Config.ARGB_8888); |
Canvas canvas = new Canvas(badgedPicture); |
- canvas.drawBitmap(userPicture, 0, 0, null); |
+ userPicture.setBounds(0, 0, imageSizePx, imageSizePx); |
+ userPicture.draw(canvas); |
// Cut a transparent hole through the background image. |
// This will serve as a border to the badge being overlaid. |
@@ -613,20 +617,22 @@ public class AccountManagementFragment extends PreferenceFragment |
// Draw the badge |
canvas.drawBitmap(badge, badgeCenterX - badgeRadius, badgeCenterY - badgeRadius, null); |
- return badgedPicture; |
+ return new BitmapDrawable(resources, badgedPicture); |
} |
/** |
* Updates the user name and picture in the cache. |
+ * |
+ * @param context A context to get resources, current theme, etc. |
* @param accountId User's account id. |
* @param fullName User name. |
* @param bitmap User picture. |
*/ |
public static void updateUserNamePictureCache( |
- String accountId, String fullName, Bitmap bitmap) { |
+ Context context, String accountId, String fullName, Bitmap bitmap) { |
sChildAccountId = null; |
sCachedBadgedPicture = null; |
- sToNamePicture.put(accountId, new Pair<>(fullName, makeRoundUserPicture(bitmap))); |
+ sToNamePicture.put(accountId, new Pair<>(fullName, makeRoundUserPicture(context, bitmap))); |
} |
/** |
@@ -634,7 +640,7 @@ public class AccountManagementFragment extends PreferenceFragment |
* @return A cached user name for a given account. |
*/ |
public static String getCachedUserName(String accountId) { |
- Pair<String, Bitmap> pair = sToNamePicture.get(accountId); |
+ Pair<String, Drawable> pair = sToNamePicture.get(accountId); |
return pair != null ? pair.first : null; |
} |
@@ -642,18 +648,21 @@ public class AccountManagementFragment extends PreferenceFragment |
* Gets the user picture for the account from the cache, or returns the default picture if |
* unavailable. |
* |
+ * @param context A context to get resources, current theme, etc. |
* @param accountId A child account. |
* @return A user picture with badge for a given child account. |
*/ |
- public static Bitmap getBadgedUserPicture(String accountId, Resources res) { |
+ private static Drawable getBadgedUserPicture(Context context, String accountId) { |
if (sChildAccountId != null) { |
assert TextUtils.equals(accountId, sChildAccountId); |
return sCachedBadgedPicture; |
} |
sChildAccountId = accountId; |
- Bitmap picture = getUserPicture(accountId, res); |
- Bitmap badge = BitmapFactory.decodeResource(res, R.drawable.ic_account_child_20dp); |
- sCachedBadgedPicture = overlayChildBadgeOnUserPicture(picture, badge, res); |
+ Drawable picture = getUserPicture(context, accountId); |
+ Bitmap badge = BitmapFactory.decodeResource( |
+ context.getResources(), R.drawable.ic_account_child_20dp); |
+ sCachedBadgedPicture = |
+ overlayChildBadgeOnUserPicture(picture, badge, context.getResources()); |
return sCachedBadgedPicture; |
} |
@@ -661,21 +670,24 @@ public class AccountManagementFragment extends PreferenceFragment |
* Gets the user picture for the account from the cache, or returns the default picture if |
* unavailable. |
* |
- * @param accountId An account. |
- * @param resources The collection containing the application resources. |
+ * @param context A context to get resources, current theme, etc. |
+ * @param accountId Name of the account to get picture for. |
* @return A user picture for a given account. |
*/ |
- public static Bitmap getUserPicture(String accountId, Resources resources) { |
- Pair<String, Bitmap> pair = sToNamePicture.get(accountId); |
- return pair != null ? pair.second : BitmapFactory.decodeResource(resources, |
- R.drawable.account_management_no_picture); |
+ public static Drawable getUserPicture(Context context, String accountId) { |
+ Pair<String, Drawable> pair = sToNamePicture.get(accountId); |
+ return pair != null ? pair.second : getAvatarPlaceholder(context); |
+ } |
+ |
+ private static Drawable getAvatarPlaceholder(Context context) { |
+ return AppCompatResources.getDrawable(context, R.drawable.logo_avatar_anonymous); |
} |
/** |
* Initiate fetching of an image and a picture of a given account. Fetched data will be sent to |
* observers of ProfileDownloader. |
* |
- * @param context A context. |
+ * @param context A context to get resources, current theme, etc. |
* @param profile A profile. |
* @param accountName An account name. |
*/ |