From fe3657707b82c8ac403e873484866259d7aeef24 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Thu, 21 May 2015 14:50:04 +0200 Subject: [PATCH] Fixed two FCs. (1. bitmap recycled 2. ArrayList OOB) --- app/build.gradle | 4 ++-- .../gramophone/appwidget/MusicPlayerWidget.java | 3 ++- .../helper/PlayingNotificationHelper.java | 3 ++- .../gramophone/service/MusicService.java | 16 ++++++++++------ 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f4a26608..1b730cbb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.kabouzeid.gramophone" minSdkVersion 16 targetSdkVersion 22 - versionCode 22 - versionName "0.9.9.2b DEV" + versionCode 24 + versionName "0.9.9.4b" } compileOptions { diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java b/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java index 5ae0127c..5d28480b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidget/MusicPlayerWidget.java @@ -69,7 +69,8 @@ public class MusicPlayerWidget extends AppWidgetProvider { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (currentAlbumArtUri.equals(imageUri)) - setAlbumArt(context, loadedImage); + // copy() prevents the original bitmap in the memory cache from being recycled by the remote views + setAlbumArt(context, loadedImage.copy(loadedImage.getConfig(), true)); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java index 97845581..dbdecce2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java @@ -167,7 +167,8 @@ public class PlayingNotificationHelper { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (currentAlbumArtUri.equals(imageUri)) - setAlbumArt(loadedImage); + // copy() prevents the original bitmap in the memory cache from being recycled by the remote views + setAlbumArt(loadedImage.copy(loadedImage.getConfig(), true)); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java index 6a1853f6..20427782 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java +++ b/app/src/main/java/com/kabouzeid/gramophone/service/MusicService.java @@ -372,7 +372,8 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (currentAlbumArtUri.equals(imageUri)) - updateRemoteControlClientBitmap(loadedImage); + // copy() prevents the original bitmap in the memory cache from being recycled by the remote control client + updateRemoteControlClientBitmap(loadedImage.copy(loadedImage.getConfig(), true)); } @Override @@ -793,12 +794,15 @@ public class MusicService extends Service implements MediaPlayer.OnPreparedListe private void notifyChange(final String what) { //to let other apps know whats playing. i.E. last.fm (scrobbling) or musixmatch - final Song currentSong = playingQueue.get(getPosition()); final Intent intent = new Intent(what); - intent.putExtra("id", currentSong.id); - intent.putExtra("artist", currentSong.artistName); - intent.putExtra("album", currentSong.albumName); - intent.putExtra("track", currentSong.title); + final int position = getPosition(); + if(position >= 0) { + final Song currentSong = playingQueue.get(position); + intent.putExtra("id", currentSong.id); + intent.putExtra("artist", currentSong.artistName); + intent.putExtra("album", currentSong.albumName); + intent.putExtra("track", currentSong.title); + } intent.putExtra("playing", isPlaying()); sendStickyBroadcast(intent); }