diff options
author | linus_lee <llee@cyngn.com> | 2014-12-15 13:58:18 -0800 |
---|---|---|
committer | linus_lee <llee@cyngn.com> | 2014-12-16 14:52:16 -0800 |
commit | 25a2d2738e564fedddfb336122ec06fd752c189f (patch) | |
tree | 5a31c2132ddbd7f8fccfce5124f10a1cf975eac4 /src | |
parent | 78e67f2f296cbd0012012379cfc861d1bc4e05ef (diff) | |
download | android_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
Diffstat (limited to 'src')
-rw-r--r-- | src/com/cyanogenmod/eleven/MusicPlaybackService.java | 45 | ||||
-rw-r--r-- | src/com/cyanogenmod/eleven/ui/activities/BaseActivity.java | 7 |
2 files changed, 47 insertions, 5 deletions
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(); } } } |