summaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/eleven/MusicPlaybackService.java
diff options
context:
space:
mode:
authorlinus_lee <llee@cyngn.com>2014-12-22 17:18:39 -0800
committerSteve Kondik <shade@chemlab.org>2014-12-27 12:27:00 +0000
commitdc144e3c1f422dba925b0a62cbb87b7c024ef1b7 (patch)
tree355b34c12e90c5ee4e4873f2308343ed7df13702 /src/com/cyanogenmod/eleven/MusicPlaybackService.java
parent04f294bf3896f10c85a46c998be03856e2a68073 (diff)
downloadandroid_packages_apps_Eleven-dc144e3c1f422dba925b0a62cbb87b7c024ef1b7.tar.gz
android_packages_apps_Eleven-dc144e3c1f422dba925b0a62cbb87b7c024ef1b7.tar.bz2
android_packages_apps_Eleven-dc144e3c1f422dba925b0a62cbb87b7c024ef1b7.zip
Eleven: Show error message for corrupt tracks (additional codepaths)
Add showing error message for code paths where the media player fails gracefully Unfortunately adding the logic to remove the bad track is not trivial because the removeTracks logic automatically does other things to try to go to the next track. For now I will leave the logic so that it goes on to the next track and make a note on the music service rewrite notes to cover this scenario as well. Change-Id: Ib7ae5ce7819b15cdb3ada4995bc0734ab2d9b0a2
Diffstat (limited to 'src/com/cyanogenmod/eleven/MusicPlaybackService.java')
-rw-r--r--src/com/cyanogenmod/eleven/MusicPlaybackService.java47
1 files changed, 30 insertions, 17 deletions
diff --git a/src/com/cyanogenmod/eleven/MusicPlaybackService.java b/src/com/cyanogenmod/eleven/MusicPlaybackService.java
index 5b71d86..73c3694 100644
--- a/src/com/cyanogenmod/eleven/MusicPlaybackService.java
+++ b/src/com/cyanogenmod/eleven/MusicPlaybackService.java
@@ -1156,6 +1156,8 @@ public class MusicPlaybackService extends Service {
}
stop(false);
+ boolean shutdown = false;
+
updateCursor(mPlaylist.get(mPlayPos).mId);
while (true) {
if (mCursor != null
@@ -1163,6 +1165,7 @@ public class MusicPlaybackService extends Service {
+ mCursor.getLong(IDCOLIDX))) {
break;
}
+
// if we get here then opening the file failed. We can close the
// cursor now, because
// we're either going to create a new one next, or stop trying
@@ -1170,12 +1173,8 @@ public class MusicPlaybackService extends Service {
if (mOpenFailedCounter++ < 10 && mPlaylist.size() > 1) {
final int pos = getNextPosition(false);
if (pos < 0) {
- scheduleDelayedShutdown();
- if (mIsSupposedToBePlaying) {
- mIsSupposedToBePlaying = false;
- notifyChange(PLAYSTATE_CHANGED);
- }
- return;
+ shutdown = true;
+ break;
}
mPlayPos = pos;
stop(false);
@@ -1184,20 +1183,29 @@ public class MusicPlaybackService extends Service {
} else {
mOpenFailedCounter = 0;
Log.w(TAG, "Failed to open file for playback");
- scheduleDelayedShutdown();
- if (mIsSupposedToBePlaying) {
- mIsSupposedToBePlaying = false;
- notifyChange(PLAYSTATE_CHANGED);
- }
- return;
+ shutdown = true;
+ break;
}
}
- if (openNext) {
+
+ if (shutdown) {
+ scheduleDelayedShutdown();
+ if (mIsSupposedToBePlaying) {
+ mIsSupposedToBePlaying = false;
+ notifyChange(PLAYSTATE_CHANGED);
+ }
+ } else if (openNext) {
setNextTrack();
}
}
}
+ private void sendErrorMessage(final String trackName) {
+ final Intent i = new Intent(TRACK_ERROR);
+ i.putExtra(TrackErrorExtra.TRACK_NAME, trackName);
+ sendBroadcast(i);
+ }
+
/**
* @param force True to force the player onto the track next, false
* otherwise.
@@ -1727,6 +1735,13 @@ public class MusicPlaybackService extends Service {
mOpenFailedCounter = 0;
return true;
}
+
+ String trackName = getTrackName();
+ if (TextUtils.isEmpty(trackName)) {
+ trackName = path;
+ }
+ sendErrorMessage(trackName);
+
stop(true);
return false;
}
@@ -1989,7 +2004,7 @@ public class MusicPlaybackService extends Service {
*/
public String getGenreName() {
synchronized (this) {
- if (mCursor == null) {
+ if (mCursor == null || mPlayPos < 0 || mPlayPos >= mPlaylist.size()) {
return null;
}
String[] genreProjection = { MediaStore.Audio.Genres.NAME };
@@ -2813,10 +2828,8 @@ public class MusicPlaybackService extends Service {
break;
case SERVER_DIED:
if (service.isPlaying()) {
- final Intent i = new Intent(TRACK_ERROR);
final TrackErrorInfo info = (TrackErrorInfo)msg.obj;
- i.putExtra(TrackErrorExtra.TRACK_NAME, info.mTrackName);
- service.sendBroadcast(i);
+ service.sendErrorMessage(info.mTrackName);
// since the service isPlaying(), we only need to remove the offending
// audio track, and the code will automatically play the next track