diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ShuffleButtonSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ShuffleButtonSongAdapter.java new file mode 100644 index 00000000..e4730728 --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ShuffleButtonSongAdapter.java @@ -0,0 +1,116 @@ +package com.kabouzeid.gramophone.adapter.song; + +import android.graphics.Typeface; +import android.support.annotation.LayoutRes; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.afollestad.materialdialogs.ThemeSingleton; +import com.kabouzeid.gramophone.R; +import com.kabouzeid.gramophone.helper.MusicPlayerRemote; +import com.kabouzeid.gramophone.interfaces.CabHolder; +import com.kabouzeid.gramophone.model.Song; + +import java.util.ArrayList; + +/** + * @author Karim Abou Zeid (kabouzeid) + */ +public class ShuffleButtonSongAdapter extends SongAdapter { + private static final int SHUFFLE_BUTTON = 0; + private static final int SONG = 1; + + public ShuffleButtonSongAdapter(AppCompatActivity activity, ArrayList dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) { + super(activity, dataSet, itemLayoutRes, usePalette, cabHolder); + } + + @Override + protected SongAdapter.ViewHolder createViewHolder(View view) { + return new ViewHolder(view); + } + + @Override + public long getItemId(int position) { + position--; + if (position < 0) return -2; + return super.getItemId(position); + } + + @Override + protected Song getIdentifier(int position) { + position--; + if (position < 0) return new Song(); + return super.getIdentifier(position); + } + + @Override + public int getItemViewType(int position) { + return position == 0 ? SHUFFLE_BUTTON : SONG; + } + + @Override + public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder, int position) { + if (holder.getItemViewType() == SHUFFLE_BUTTON) { + if (holder.title != null) { + holder.title.setText(activity.getResources().getString(R.string.action_shuffle_all).toUpperCase()); + holder.title.setTextColor(ThemeSingleton.get().positiveColor); + holder.title.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL)); + } + if (holder.text != null) { + holder.text.setVisibility(View.GONE); + } + if (holder.menu != null) { + holder.menu.setVisibility(View.GONE); + } + if (holder.image != null) { + final int padding = activity.getResources().getDimensionPixelSize(R.dimen.default_item_margin) / 2; + holder.image.setPadding(padding, padding, padding, padding); + holder.image.setColorFilter(ThemeSingleton.get().positiveColor); + holder.image.setImageResource(R.drawable.ic_shuffle_white_24dp); + } + if (holder.separator != null) { + holder.separator.setVisibility(View.VISIBLE); + } + if (holder.shortSeparator != null) { + holder.shortSeparator.setVisibility(View.GONE); + } + } else { + super.onBindViewHolder(holder, position - 1); + } + } + + public class ViewHolder extends SongAdapter.ViewHolder { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + + @Override + protected Song getSong() { + if (getItemViewType() == SHUFFLE_BUTTON) return new Song(); + return dataSet.get(getAdapterPosition() - 1); + } + + @Override + public void onClick(View v) { + if (getItemViewType() == SHUFFLE_BUTTON) { + MusicPlayerRemote.openAndShuffleQueue(dataSet, true); + return; + } + if (isInQuickSelectMode()) { + toggleChecked(getAdapterPosition()); + } else { + MusicPlayerRemote.openQueue(dataSet, getAdapterPosition() - 1, true); + } + } + + @Override + public boolean onLongClick(View view) { + if (getItemViewType() == SHUFFLE_BUTTON) return false; + toggleChecked(getAdapterPosition()); + return true; + } + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java index 7a17507c..20be0321 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/SongViewFragment.java @@ -4,14 +4,14 @@ import android.support.annotation.NonNull; import android.support.v7.widget.GridLayoutManager; import com.kabouzeid.gramophone.R; -import com.kabouzeid.gramophone.adapter.song.SongAdapter; +import com.kabouzeid.gramophone.adapter.song.ShuffleButtonSongAdapter; import com.kabouzeid.gramophone.loader.SongLoader; import com.kabouzeid.gramophone.util.PreferenceUtil; /** * @author Karim Abou Zeid (kabouzeid) */ -public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment { +public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragment { public static final String TAG = SongViewFragment.class.getSimpleName(); @@ -23,8 +23,8 @@ public class SongViewFragment extends AbsMainActivityRecyclerViewLayoutModeFragm @NonNull @Override - protected SongAdapter createAdapter() { - return new SongAdapter( + protected ShuffleButtonSongAdapter createAdapter() { + return new ShuffleButtonSongAdapter( getMainActivity(), SongLoader.getAllSongs(getActivity()), getItemLayout(), diff --git a/app/src/main/res/drawable-hdpi/ic_shuffle_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_shuffle_white_24dp.png new file mode 100644 index 00000000..e7cea329 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_shuffle_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_shuffle_white_48dp.png b/app/src/main/res/drawable-hdpi/ic_shuffle_white_48dp.png deleted file mode 100644 index 5b3d814a..00000000 Binary files a/app/src/main/res/drawable-hdpi/ic_shuffle_white_48dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_shuffle_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_shuffle_white_24dp.png new file mode 100644 index 00000000..1b8351cf Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_shuffle_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_shuffle_white_48dp.png b/app/src/main/res/drawable-mdpi/ic_shuffle_white_48dp.png deleted file mode 100644 index b1f6d8d9..00000000 Binary files a/app/src/main/res/drawable-mdpi/ic_shuffle_white_48dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_shuffle_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_shuffle_white_24dp.png new file mode 100644 index 00000000..de074c2f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_shuffle_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_shuffle_white_48dp.png b/app/src/main/res/drawable-xhdpi/ic_shuffle_white_48dp.png deleted file mode 100644 index 02ea7875..00000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_shuffle_white_48dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_shuffle_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_shuffle_white_24dp.png new file mode 100644 index 00000000..e79444c4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_shuffle_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_shuffle_white_48dp.png b/app/src/main/res/drawable-xxhdpi/ic_shuffle_white_48dp.png deleted file mode 100644 index aaea4dc0..00000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_shuffle_white_48dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_shuffle_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_shuffle_white_24dp.png new file mode 100644 index 00000000..da327b9f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_shuffle_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_shuffle_white_48dp.png b/app/src/main/res/drawable-xxxhdpi/ic_shuffle_white_48dp.png deleted file mode 100755 index 08b8ba5a..00000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_shuffle_white_48dp.png and /dev/null differ