From ed670a73e39430d2068a63a9ab28dd17c78f5934 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Mon, 8 Mar 2010 01:45:05 -0600 Subject: [PATCH] Don't crash with an invalid state --- src/org/kreed/vanilla/PlaybackService.java | 27 ++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/org/kreed/vanilla/PlaybackService.java b/src/org/kreed/vanilla/PlaybackService.java index e9976eda..dd91fe67 100644 --- a/src/org/kreed/vanilla/PlaybackService.java +++ b/src/org/kreed/vanilla/PlaybackService.java @@ -323,6 +323,8 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On mRandom = new Random(); + boolean stateLoaded = true; + try { DataInputStream in = new DataInputStream(openFileInput(STATE_FILE)); if (in.readLong() == STATE_FILE_MAGIC) { @@ -337,7 +339,10 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On in.close(); Song song = new Song(ids[mCurrentSong]); - broadcastSongChange(song); + if (song.path == null) + stateLoaded = false; + else + broadcastSongChange(song); ArrayList timeline = new ArrayList(n); for (int i = 0; i != n; ++i) @@ -351,7 +356,8 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On Log.w("VanillaMusic", e); } - boolean stateLoaded = mSongTimeline != null; + if (stateLoaded) + stateLoaded = mSongTimeline != null; mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); @@ -636,21 +642,28 @@ public class PlaybackService extends Service implements Runnable, MediaPlayer.On synchronized (mSongTimeline) { int pos = mCurrentSong + delta; - + if (pos < 0) return null; - + int size = mSongTimeline.size(); if (pos > size) return null; - + if (pos == size) { if (mSongs == null) return null; mSongTimeline.add(randomSong()); } - - return mSongTimeline.get(pos); + + Song song = mSongTimeline.get(pos); + + if (song.path == null) { + song = randomSong(); + mSongTimeline.set(pos, song); + } + + return song; } }