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;
+ }
}