Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/media/ui/NotificationMediaPlaybackControls.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/NotificationMediaPlaybackControls.java b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/NotificationMediaPlaybackControls.java |
| index 398d8c032c405054c7baa01f043e62f82eeafe72..70471d64a6d31d64d10b59d8bb99ee195f973d00 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/NotificationMediaPlaybackControls.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/NotificationMediaPlaybackControls.java |
| @@ -8,11 +8,16 @@ import android.app.PendingIntent; |
| import android.app.Service; |
| import android.content.Context; |
| import android.content.Intent; |
| +import android.graphics.Bitmap; |
| +import android.graphics.Canvas; |
| +import android.graphics.drawable.BitmapDrawable; |
| +import android.graphics.drawable.Drawable; |
| import android.os.IBinder; |
| import android.provider.Browser; |
| import android.support.v4.app.NotificationCompat; |
| import android.widget.RemoteViews; |
| +import org.chromium.base.ApiCompatibilityUtils; |
| import org.chromium.chrome.R; |
| import org.chromium.chrome.browser.IntentHandler.TabOpenType; |
| @@ -151,6 +156,8 @@ public class NotificationMediaPlaybackControls { |
| private NotificationCompat.Builder mNotificationBuilder; |
| + private Bitmap mNotificationIconBitmap; |
| + |
| private MediaNotificationInfo mMediaNotificationInfo; |
| private NotificationMediaPlaybackControls(Context context) { |
| @@ -234,6 +241,14 @@ public class NotificationMediaPlaybackControls { |
| return; |
| } |
| + // Android doesn't badge the icons for RemoteViews automatically when |
| + // running the app under the Work profile. |
| + if (mNotificationIconBitmap == null) { |
| + Drawable notificationIconDrawable = ApiCompatibilityUtils.getUserBadgedIcon( |
| + mContext, R.drawable.audio_playing); |
| + mNotificationIconBitmap = drawableToBitmap(notificationIconDrawable); |
| + } |
| + |
| if (mNotificationBuilder == null) { |
| mNotificationBuilder = new NotificationCompat.Builder(mContext) |
| .setSmallIcon(R.drawable.audio_playing) |
| @@ -246,7 +261,7 @@ public class NotificationMediaPlaybackControls { |
| contentView.setTextViewText(R.id.title, getTitle()); |
| contentView.setTextViewText(R.id.status, getStatus()); |
| - contentView.setImageViewResource(R.id.icon, R.drawable.audio_playing); |
| + contentView.setImageViewBitmap(R.id.icon, mNotificationIconBitmap); |
| if (mMediaNotificationInfo.isPaused) { |
| contentView.setImageViewResource(R.id.playpause, R.drawable.ic_vidcontrol_play); |
| @@ -267,4 +282,27 @@ public class NotificationMediaPlaybackControls { |
| mService.startForeground(R.id.media_playback_notification, mNotificationBuilder.build()); |
| } |
| + |
| + private Bitmap drawableToBitmap(Drawable drawable) { |
| + Bitmap bitmap = null; |
| + |
| + if (drawable instanceof BitmapDrawable) { |
| + BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; |
| + if (bitmapDrawable.getBitmap() != null) { |
| + return bitmapDrawable.getBitmap(); |
|
aurimas (slooooooooow)
2015/07/30 16:51:28
Almost every time we should return here. Otherwise
|
| + } |
| + } |
| + |
| + if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) { |
| + bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); |
| + } else { |
| + bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), |
| + drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); |
| + } |
| + |
| + Canvas canvas = new Canvas(bitmap); |
| + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); |
| + drawable.draw(canvas); |
| + return bitmap; |
| + } |
| } |