diff --git a/res/drawable-hdpi/music_bottom_playback_bg.9.png b/res/drawable-hdpi/music_bottom_playback_bg.9.png index 16804f34..d6a74844 100644 Binary files a/res/drawable-hdpi/music_bottom_playback_bg.9.png and b/res/drawable-hdpi/music_bottom_playback_bg.9.png differ diff --git a/res/drawable-mdpi/music_bottom_playback_bg.9.png b/res/drawable-mdpi/music_bottom_playback_bg.9.png index b0800c94..c5816416 100644 Binary files a/res/drawable-mdpi/music_bottom_playback_bg.9.png and b/res/drawable-mdpi/music_bottom_playback_bg.9.png differ diff --git a/res/layout/library_withcontrols.xml b/res/layout/library_withcontrols.xml index 46f63c04..1d64c511 100644 --- a/res/layout/library_withcontrols.xml +++ b/res/layout/library_withcontrols.xml @@ -38,6 +38,29 @@ THE SOFTWARE. android:layout_width="80dip" android:layout_height="fill_parent" android:layout_gravity="center" /> + + + + + android:layout_toLeftOf="@id/state_buttons" /> + android:layout_alignParentBottom="true" + android:layout_toLeftOf="@id/state_buttons" > + + diff --git a/src/org/kreed/vanilla/FullPlaybackActivity.java b/src/org/kreed/vanilla/FullPlaybackActivity.java index 5f95d334..464e9743 100644 --- a/src/org/kreed/vanilla/FullPlaybackActivity.java +++ b/src/org/kreed/vanilla/FullPlaybackActivity.java @@ -30,7 +30,6 @@ import android.os.Handler; import android.os.Message; import android.text.format.DateUtils; import android.util.Log; -import android.view.ContextMenu; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; @@ -71,9 +70,6 @@ public class FullPlaybackActivity extends PlaybackActivity private TextView mAlbum; private TextView mArtist; - private ImageButton mShuffleButton; - private ImageButton mEndButton; - /** * True if the controls are visible (play, next, seek bar, etc). */ @@ -251,37 +247,6 @@ public class FullPlaybackActivity extends PlaybackActivity if ((state & PlaybackService.FLAG_PLAYING) != 0) updateProgress(); - - if ((toggled & PlaybackService.MASK_FINISH) != 0) { - switch (PlaybackService.finishAction(state)) { - case SongTimeline.FINISH_STOP: - mEndButton.setImageResource(R.drawable.repeat_inactive); - break; - case SongTimeline.FINISH_REPEAT: - mEndButton.setImageResource(R.drawable.repeat_active); - break; - case SongTimeline.FINISH_REPEAT_CURRENT: - mEndButton.setImageResource(R.drawable.repeat_current_active); - break; - case SongTimeline.FINISH_RANDOM: - mEndButton.setImageResource(R.drawable.random_active); - break; - } - } - - if ((toggled & PlaybackService.MASK_SHUFFLE) != 0) { - switch (PlaybackService.shuffleMode(state)) { - case SongTimeline.SHUFFLE_NONE: - mShuffleButton.setImageResource(R.drawable.shuffle_inactive); - break; - case SongTimeline.SHUFFLE_SONGS: - mShuffleButton.setImageResource(R.drawable.shuffle_active); - break; - case SongTimeline.SHUFFLE_ALBUMS: - mShuffleButton.setImageResource(R.drawable.shuffle_album_active); - break; - } - } } @Override @@ -477,22 +442,10 @@ public class FullPlaybackActivity extends PlaybackActivity { if (view == mOverlayText && (mState & PlaybackService.FLAG_EMPTY_QUEUE) != 0) { setState(PlaybackService.get(this).setFinishAction(SongTimeline.FINISH_RANDOM)); - return; - } - - switch (view.getId()) { - case R.id.cover_view: + } else if (view == mCoverView) { performAction(mCoverPressAction); - break; - case R.id.end_action: - cycleFinishAction(); - break; - case R.id.shuffle: - cycleShuffle(); - break; - default: + } else { super.onClick(view); - break; } } @@ -506,34 +459,4 @@ public class FullPlaybackActivity extends PlaybackActivity return false; } - - private static final int GROUP_SHUFFLE = 0; - private static final int GROUP_FINISH = 1; - - @Override - public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) - { - if (view == mShuffleButton) { - menu.add(GROUP_SHUFFLE, SongTimeline.SHUFFLE_NONE, 0, R.string.no_shuffle); - menu.add(GROUP_SHUFFLE, SongTimeline.SHUFFLE_SONGS, 0, R.string.shuffle_songs); - menu.add(GROUP_SHUFFLE, SongTimeline.SHUFFLE_ALBUMS, 0, R.string.shuffle_albums); - } else if (view == mEndButton) { - menu.add(GROUP_FINISH, SongTimeline.FINISH_STOP, 0, R.string.no_repeat); - menu.add(GROUP_FINISH, SongTimeline.FINISH_REPEAT, 0, R.string.repeat); - menu.add(GROUP_FINISH, SongTimeline.FINISH_REPEAT_CURRENT, 0, R.string.repeat_current_song); - menu.add(GROUP_FINISH, SongTimeline.FINISH_RANDOM, 0, R.string.random); - } - } - - @Override - public boolean onContextItemSelected(MenuItem item) - { - int group = item.getGroupId(); - int id = item.getItemId(); - if (group == GROUP_SHUFFLE) - setState(PlaybackService.get(this).setShuffleMode(id)); - else if (group == GROUP_FINISH) - setState(PlaybackService.get(this).setFinishAction(id)); - return true; - } } diff --git a/src/org/kreed/vanilla/LibraryActivity.java b/src/org/kreed/vanilla/LibraryActivity.java index 94ca6295..7e7ee84d 100644 --- a/src/org/kreed/vanilla/LibraryActivity.java +++ b/src/org/kreed/vanilla/LibraryActivity.java @@ -131,6 +131,13 @@ public class LibraryActivity previous.setOnClickListener(this); mPlayPauseButton.setOnClickListener(this); next.setOnClickListener(this); + + mShuffleButton = (ImageButton)findViewById(R.id.shuffle); + mShuffleButton.setOnClickListener(this); + registerForContextMenu(mShuffleButton); + mEndButton = (ImageButton)findViewById(R.id.end_action); + mEndButton.setOnClickListener(this); + registerForContextMenu(mEndButton); } else { setContentView(R.layout.library_content); } @@ -527,6 +534,11 @@ public class LibraryActivity @Override public void onCreateContextMenu(ContextMenu menu, View listView, ContextMenu.ContextMenuInfo absInfo) { + if (!(listView instanceof ListView)) { + super.onCreateContextMenu(menu, listView, absInfo); + return; + } + MediaAdapter adapter = (MediaAdapter)((ListView)listView).getAdapter(); MediaView view = (MediaView)((AdapterView.AdapterContextMenuInfo)absInfo).targetView; @@ -613,6 +625,9 @@ public class LibraryActivity @Override public boolean onContextItemSelected(MenuItem item) { + if (item.getGroupId() != 0) + return super.onContextItemSelected(item); + Intent intent = item.getIntent(); switch (item.getItemId()) { diff --git a/src/org/kreed/vanilla/MiniPlaybackActivity.java b/src/org/kreed/vanilla/MiniPlaybackActivity.java index 05ef34e2..51084577 100644 --- a/src/org/kreed/vanilla/MiniPlaybackActivity.java +++ b/src/org/kreed/vanilla/MiniPlaybackActivity.java @@ -52,6 +52,13 @@ public class MiniPlaybackActivity extends PlaybackActivity { mPlayPauseButton.setOnClickListener(this); View nextButton = findViewById(R.id.next); nextButton.setOnClickListener(this); + + mShuffleButton = (ImageButton)findViewById(R.id.shuffle); + mShuffleButton.setOnClickListener(this); + registerForContextMenu(mShuffleButton); + mEndButton = (ImageButton)findViewById(R.id.end_action); + mEndButton.setOnClickListener(this); + registerForContextMenu(mEndButton); } @Override diff --git a/src/org/kreed/vanilla/PlaybackActivity.java b/src/org/kreed/vanilla/PlaybackActivity.java index d930263e..09eae20f 100644 --- a/src/org/kreed/vanilla/PlaybackActivity.java +++ b/src/org/kreed/vanilla/PlaybackActivity.java @@ -32,6 +32,7 @@ import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.SystemClock; +import android.view.ContextMenu; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; @@ -74,6 +75,8 @@ public class PlaybackActivity extends Activity protected CoverView mCoverView; protected ImageButton mPlayPauseButton; + protected ImageButton mShuffleButton; + protected ImageButton mEndButton; protected int mState; private long mLastStateEvent; @@ -216,6 +219,12 @@ public class PlaybackActivity extends Activity case R.id.previous: previousSong(); break; + case R.id.end_action: + cycleFinishAction(); + break; + case R.id.shuffle: + cycleShuffle(); + break; } } @@ -229,6 +238,37 @@ public class PlaybackActivity extends Activity { if ((toggled & PlaybackService.FLAG_PLAYING) != 0 && mPlayPauseButton != null) mPlayPauseButton.setImageResource((state & PlaybackService.FLAG_PLAYING) == 0 ? R.drawable.play : R.drawable.pause); + + if ((toggled & PlaybackService.MASK_FINISH) != 0 && mShuffleButton != null) { + switch (PlaybackService.finishAction(state)) { + case SongTimeline.FINISH_STOP: + mEndButton.setImageResource(R.drawable.repeat_inactive); + break; + case SongTimeline.FINISH_REPEAT: + mEndButton.setImageResource(R.drawable.repeat_active); + break; + case SongTimeline.FINISH_REPEAT_CURRENT: + mEndButton.setImageResource(R.drawable.repeat_current_active); + break; + case SongTimeline.FINISH_RANDOM: + mEndButton.setImageResource(R.drawable.random_active); + break; + } + } + + if ((toggled & PlaybackService.MASK_SHUFFLE) != 0 && mEndButton != null) { + switch (PlaybackService.shuffleMode(state)) { + case SongTimeline.SHUFFLE_NONE: + mShuffleButton.setImageResource(R.drawable.shuffle_inactive); + break; + case SongTimeline.SHUFFLE_SONGS: + mShuffleButton.setImageResource(R.drawable.shuffle_active); + break; + case SongTimeline.SHUFFLE_ALBUMS: + mShuffleButton.setImageResource(R.drawable.shuffle_album_active); + break; + } + } } protected void setState(final int state) @@ -426,4 +466,34 @@ public class PlaybackActivity extends Activity { performAction(mDownAction); } + + private static final int GROUP_SHUFFLE = 100; + private static final int GROUP_FINISH = 101; + + @Override + public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) + { + if (view == mShuffleButton) { + menu.add(GROUP_SHUFFLE, SongTimeline.SHUFFLE_NONE, 0, R.string.no_shuffle); + menu.add(GROUP_SHUFFLE, SongTimeline.SHUFFLE_SONGS, 0, R.string.shuffle_songs); + menu.add(GROUP_SHUFFLE, SongTimeline.SHUFFLE_ALBUMS, 0, R.string.shuffle_albums); + } else if (view == mEndButton) { + menu.add(GROUP_FINISH, SongTimeline.FINISH_STOP, 0, R.string.no_repeat); + menu.add(GROUP_FINISH, SongTimeline.FINISH_REPEAT, 0, R.string.repeat); + menu.add(GROUP_FINISH, SongTimeline.FINISH_REPEAT_CURRENT, 0, R.string.repeat_current_song); + menu.add(GROUP_FINISH, SongTimeline.FINISH_RANDOM, 0, R.string.random); + } + } + + @Override + public boolean onContextItemSelected(MenuItem item) + { + int group = item.getGroupId(); + int id = item.getItemId(); + if (group == GROUP_SHUFFLE) + setState(PlaybackService.get(this).setShuffleMode(id)); + else if (group == GROUP_FINISH) + setState(PlaybackService.get(this).setFinishAction(id)); + return true; + } }