summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlinus_lee <llee@cyngn.com>2014-12-15 13:58:18 -0800
committerlinus_lee <llee@cyngn.com>2014-12-16 14:52:16 -0800
commit25a2d2738e564fedddfb336122ec06fd752c189f (patch)
tree5a31c2132ddbd7f8fccfce5124f10a1cf975eac4
parent78e67f2f296cbd0012012379cfc861d1bc4e05ef (diff)
downloadandroid_packages_apps_Eleven-25a2d2738e564fedddfb336122ec06fd752c189f.tar.gz
android_packages_apps_Eleven-25a2d2738e564fedddfb336122ec06fd752c189f.tar.bz2
android_packages_apps_Eleven-25a2d2738e564fedddfb336122ec06fd752c189f.zip
Eleven: Remove tracks that give problems from the queue and warn
Instead of playing the tracks over and over, remove it from the queue Also pop up a warning if the music player is active Change-Id: I1d4e5a049b69de381f1a7f86ce2b837449bc378f
-rw-r--r--res/values/strings.xml1
-rw-r--r--src/com/cyanogenmod/eleven/MusicPlaybackService.java45
-rw-r--r--src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java7
3 files changed, 48 insertions, 5 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6f2dd84..38197c9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -166,6 +166,7 @@
<string name="empty_generic_secondary">To copy music from your computer to your device, use a USB cable.</string>
<string name="empty_queue_main">No songs in play queue</string>
<string name="empty_queue_secondary">To add songs to your Play Queue, tap the options menu on a song, album, or artist and select \"Add to queue\".</string>
+ <string name="error_playing_track">Unable to play track %1$s, removing it from the queue</string>
<!-- Section Headers -->
<string name="header_unknown_year">Unknown year</string>
diff --git a/src/com/cyanogenmod/eleven/MusicPlaybackService.java b/src/com/cyanogenmod/eleven/MusicPlaybackService.java
index 5b4d1fc..0a598fe 100644
--- a/src/com/cyanogenmod/eleven/MusicPlaybackService.java
+++ b/src/com/cyanogenmod/eleven/MusicPlaybackService.java
@@ -114,16 +114,21 @@ public class MusicPlaybackService extends Service {
public static final String PLAYLIST_CHANGED = "com.cyanogenmod.eleven.playlistchanged";
/**
- * Indicates the repeat mode chaned
+ * Indicates the repeat mode changed
*/
public static final String REPEATMODE_CHANGED = "com.cyanogenmod.eleven.repeatmodechanged";
/**
- * Indicates the shuffle mode chaned
+ * Indicates the shuffle mode changed
*/
public static final String SHUFFLEMODE_CHANGED = "com.cyanogenmod.eleven.shufflemodechanged";
/**
+ * Indicates the track fails to play
+ */
+ public static final String TRACK_ERROR = "com.cyanogenmod.eleven.trackerror";
+
+ /**
* For backwards compatibility reasons, also provide sticky
* broadcasts under the music package
*/
@@ -324,6 +329,13 @@ public class MusicPlaybackService extends Service {
*/
public static final int MAX_HISTORY_SIZE = 1000;
+ public interface TrackErrorExtra {
+ /**
+ * Name of the track that was unable to play
+ */
+ public static final String TRACK_NAME = "trackname";
+ }
+
/**
* The columns used to retrieve any info from the current track
*/
@@ -2757,7 +2769,14 @@ public class MusicPlaybackService extends Service {
break;
case SERVER_DIED:
if (service.isPlaying()) {
- service.gotoNext(true);
+ final Intent i = new Intent(TRACK_ERROR);
+ final TrackErrorInfo info = (TrackErrorInfo)msg.obj;
+ i.putExtra(TrackErrorExtra.TRACK_NAME, info.mTrackName);
+ service.sendBroadcast(i);
+
+ // since the service isPlaying(), we only need to remove the offending
+ // audio track, and the code will automatically play the next track
+ service.removeTrack(info.mId);
} else {
service.openCurrentAndNext();
}
@@ -2872,6 +2891,16 @@ public class MusicPlaybackService extends Service {
}
};
+ private static final class TrackErrorInfo {
+ public long mId;
+ public String mTrackName;
+
+ public TrackErrorInfo(long id, String trackName) {
+ mId = id;
+ mTrackName = trackName;
+ }
+ }
+
private static final class MultiPlayer implements MediaPlayer.OnErrorListener,
MediaPlayer.OnCompletionListener {
@@ -3136,13 +3165,19 @@ public class MusicPlaybackService extends Service {
*/
@Override
public boolean onError(final MediaPlayer mp, final int what, final int extra) {
+ Log.w(TAG, "Music Server Error what: " + what + " extra: " + extra);
switch (what) {
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
+ final MusicPlaybackService service = mService.get();
+ final TrackErrorInfo errorInfo = new TrackErrorInfo(service.getAudioId(),
+ service.getTrackName());
+
mIsInitialized = false;
mCurrentMediaPlayer.release();
mCurrentMediaPlayer = new MediaPlayer();
- mCurrentMediaPlayer.setWakeMode(mService.get(), PowerManager.PARTIAL_WAKE_LOCK);
- mHandler.sendMessageDelayed(mHandler.obtainMessage(SERVER_DIED), 2000);
+ mCurrentMediaPlayer.setWakeMode(service, PowerManager.PARTIAL_WAKE_LOCK);
+ Message msg = mHandler.obtainMessage(SERVER_DIED, errorInfo);
+ mHandler.sendMessageDelayed(msg, 2000);
return true;
default:
break;
diff --git a/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java b/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java
index d5df47f..da38924 100644
--- a/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java
+++ b/src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java
@@ -42,6 +42,7 @@ import com.cyanogenmod.eleven.R;
import com.cyanogenmod.eleven.cache.ICacheListener;
import com.cyanogenmod.eleven.cache.ImageFetcher;
import com.cyanogenmod.eleven.utils.ApolloUtils;
+import com.cyanogenmod.eleven.utils.CustomToast;
import com.cyanogenmod.eleven.utils.Lists;
import com.cyanogenmod.eleven.utils.MusicUtils;
import com.cyanogenmod.eleven.utils.MusicUtils.ServiceToken;
@@ -226,6 +227,8 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo
filter.addAction(MusicPlaybackService.REFRESH);
// If a playlist has changed, notify us
filter.addAction(MusicPlaybackService.PLAYLIST_CHANGED);
+ // If there is an error playing a track
+ filter.addAction(MusicPlaybackService.TRACK_ERROR);
registerReceiver(mPlaybackStatus, filter);
mPlayPauseProgressButton.resume();
@@ -391,6 +394,10 @@ public abstract class BaseActivity extends FragmentActivity implements ServiceCo
baseActivity.restartLoader();
} else if (action.equals(MusicPlaybackService.PLAYLIST_CHANGED)) {
baseActivity.onPlaylistChanged();
+ } else if (action.equals(MusicPlaybackService.TRACK_ERROR)) {
+ final String errorMsg = context.getString(R.string.error_playing_track,
+ intent.getStringExtra(MusicPlaybackService.TrackErrorExtra.TRACK_NAME));
+ CustomToast.makeText(baseActivity, errorMsg, CustomToast.LENGTH_SHORT).show();
}
}
}