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; |
+ } |
} |