diff --git a/src/org/kreed/vanilla/PlaybackActivity.java b/src/org/kreed/vanilla/PlaybackActivity.java index c2a060e9..9096e5b4 100644 --- a/src/org/kreed/vanilla/PlaybackActivity.java +++ b/src/org/kreed/vanilla/PlaybackActivity.java @@ -171,7 +171,11 @@ public class PlaybackActivity extends Activity implements Handler.Callback, View public void playPause() { - setState(ContextApplication.getService().toggleFlag(PlaybackService.FLAG_PLAYING)); + PlaybackService service = ContextApplication.getService(); + int state = service.toggleFlag(PlaybackService.FLAG_PLAYING); + if ((state & PlaybackService.FLAG_ERROR) != 0) + Toast.makeText(this, service.getErrorMessage(), Toast.LENGTH_LONG).show(); + setState(state); } public void onClick(View view) @@ -199,7 +203,6 @@ public class PlaybackActivity extends Activity implements Handler.Callback, View { if ((toggled & PlaybackService.FLAG_PLAYING) != 0 && mPlayPauseButton != null) mPlayPauseButton.setImageResource((state & PlaybackService.FLAG_PLAYING) == 0 ? R.drawable.play : R.drawable.pause); - } protected void setState(final int state) @@ -347,7 +350,10 @@ public class PlaybackActivity extends Activity implements Handler.Callback, View */ public void toggleShuffle() { - setState(ContextApplication.getService().toggleFlag(PlaybackService.FLAG_SHUFFLE)); + int state = ContextApplication.getService().toggleFlag(PlaybackService.FLAG_SHUFFLE); + int res = (state & PlaybackService.FLAG_SHUFFLE) == 0 ? R.string.shuffle_disabling : R.string.shuffle_enabling; + Toast.makeText(this, res, Toast.LENGTH_LONG).show(); + setState(state); } /** @@ -355,7 +361,10 @@ public class PlaybackActivity extends Activity implements Handler.Callback, View */ public void toggleRepeat() { - setState(ContextApplication.getService().toggleFlag(PlaybackService.FLAG_REPEAT)); + int state = ContextApplication.getService().toggleFlag(PlaybackService.FLAG_REPEAT); + int res = (state & PlaybackService.FLAG_REPEAT) == 0 ? R.string.repeat_disabling : R.string.repeat_enabling; + Toast.makeText(this, res, Toast.LENGTH_LONG).show(); + setState(state); } /** diff --git a/src/org/kreed/vanilla/PlaybackService.java b/src/org/kreed/vanilla/PlaybackService.java index 6de42ca4..6829df4e 100644 --- a/src/org/kreed/vanilla/PlaybackService.java +++ b/src/org/kreed/vanilla/PlaybackService.java @@ -50,7 +50,7 @@ import android.telephony.TelephonyManager; import android.util.Log; import android.widget.Toast; -public final class PlaybackService extends Service implements Handler.Callback, MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, SharedPreferences.OnSharedPreferenceChangeListener, SongTimeline.Callback { +public final class PlaybackService extends Service implements Handler.Callback, MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, SharedPreferences.OnSharedPreferenceChangeListener, SongTimeline.Callback { private static final int NOTIFICATION_ID = 2; /** @@ -141,6 +141,7 @@ public final class PlaybackService extends Service implements Handler.Callback, public Receiver mReceiver; public InCallListener mCallListener; private boolean mLoaded; + private String mErrorMessage; /** * The volume set by the user in the preferences. */ @@ -183,16 +184,6 @@ public final class PlaybackService extends Service implements Handler.Callback, mHandler.sendEmptyMessage(CREATE); } - /** - * Show a Toast that notifies the user the Service is starting up. Useful - * to provide a quick response to play/pause and next events from widgets - * when we must initialize the service before acting on the event. - */ - private void showStartupToast() - { - Toast.makeText(this, R.string.starting, Toast.LENGTH_SHORT).show(); - } - @Override public void onStart(Intent intent, int flags) { @@ -421,16 +412,9 @@ public final class PlaybackService extends Service implements Handler.Callback, { state &= ALL_FLAGS; - if ((state & FLAG_NO_MEDIA) != 0) + if ((state & FLAG_NO_MEDIA) != 0 || (state & FLAG_ERROR) != 0) state &= ~FLAG_PLAYING; - if ((state & FLAG_ERROR) != 0 && (state & FLAG_PLAYING) != 0) { - state &= ~FLAG_PLAYING; - Song song = mCurrentSong; - String text = getResources().getString(R.string.song_load_failed, song == null ? null : song.path); - Toast.makeText(this, text, Toast.LENGTH_LONG).show(); - } - int oldState = mState; mState = state; @@ -470,25 +454,10 @@ public final class PlaybackService extends Service implements Handler.Callback, } } - if ((toggled & FLAG_SHUFFLE) != 0) { - if ((state & FLAG_SHUFFLE) != 0) { - mTimeline.setShuffle(true); - Toast.makeText(this, R.string.shuffle_enabling, Toast.LENGTH_LONG).show(); - } else { - mTimeline.setShuffle(false); - Toast.makeText(this, R.string.shuffle_disabling, Toast.LENGTH_SHORT).show(); - } - } - - if ((toggled & FLAG_REPEAT) != 0) { - if ((state & FLAG_REPEAT) != 0) { - mTimeline.setRepeat(true); - Toast.makeText(this, R.string.repeat_enabling, Toast.LENGTH_LONG).show(); - } else { - mTimeline.setRepeat(false); - Toast.makeText(this, R.string.repeat_disabling, Toast.LENGTH_SHORT).show(); - } - } + if ((toggled & FLAG_SHUFFLE) != 0) + mTimeline.setShuffle((state & FLAG_SHUFFLE) != 0); + if ((toggled & FLAG_REPEAT) != 0) + mTimeline.setRepeat((state & FLAG_REPEAT) != 0); } private void broadcastChange(int state, Song song, long uptime) @@ -598,11 +567,15 @@ public final class PlaybackService extends Service implements Handler.Callback, if ((mState & FLAG_PLAYING) != 0) mMediaPlayer.start(); - updateState(mState & ~FLAG_ERROR); + + if ((mState & FLAG_ERROR) != 0) { + mErrorMessage = null; + updateState(mState & ~FLAG_ERROR); + } } catch (IOException e) { - // FLAG_PLAYING is set to force showing the Toast. updateState() - // will unset it. - updateState(mState | FLAG_PLAYING | FLAG_ERROR); + mErrorMessage = getResources().getString(R.string.song_load_failed, song == null ? null : song.path); + updateState(mState | FLAG_ERROR); + Toast.makeText(this, mErrorMessage, Toast.LENGTH_LONG).show(); Log.e("VanillaMusic", "IOException", e); } @@ -644,9 +617,6 @@ public final class PlaybackService extends Service implements Handler.Callback, private void go(int delta, boolean autoPlay) { - if (!mLoaded) - showStartupToast(); - if (autoPlay) { synchronized (mStateLock) { mState |= FLAG_PLAYING; @@ -1054,4 +1024,12 @@ public final class PlaybackService extends Service implements Handler.Callback, { mTimeline.finishEnqueueing(); } + + /** + * Return the error message set when FLAG_ERROR is set. + */ + public String getErrorMessage() + { + return mErrorMessage; + } }