diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java index f39c16600..53bae4393 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.java @@ -547,7 +547,6 @@ public class MainActivity extends AbsSlidingMusicPanelActivity case R.id.action_song_sort_order_composer: sortOrder = SongSortOrder.COMPOSER; break; - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt index 89d3e5116..5d216fff4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt @@ -19,8 +19,7 @@ abstract class AbsOffsetSongAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongAdapter.ViewHolder { if (viewType == OFFSET_ITEM) { - val view = LayoutInflater.from(activity) - .inflate(R.layout.item_list_quick_actions, parent, false) + val view = LayoutInflater.from(activity).inflate(R.layout.item_list_quick_actions, parent, false) return createViewHolder(view) } return super.onCreateViewHolder(parent, viewType) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt index 4f3935ad4..801fd1aba 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt @@ -1,12 +1,16 @@ package code.name.monkey.retromusic.adapter.song import android.view.View +import android.widget.PopupMenu import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.AppCompatImageView import code.name.monkey.retromusic.R import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.helper.SortOrder.SongSortOrder import code.name.monkey.retromusic.interfaces.CabHolder import code.name.monkey.retromusic.model.Song -import com.google.android.material.button.MaterialButton +import code.name.monkey.retromusic.util.PreferenceUtil +import com.google.android.material.textview.MaterialTextView class ShuffleButtonSongAdapter( activity: AppCompatActivity, @@ -22,24 +26,83 @@ class ShuffleButtonSongAdapter( override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { if (holder.itemViewType == OFFSET_ITEM) { val viewHolder = holder as ViewHolder - viewHolder.playAction?.let { - it.setOnClickListener { - MusicPlayerRemote.openQueue(dataSet, 0, true) - } + viewHolder.playAction?.setOnClickListener { + MusicPlayerRemote.openQueue(dataSet, 0, true) } - viewHolder.shuffleAction?.let { - it.setOnClickListener { - MusicPlayerRemote.openAndShuffleQueue(dataSet, true) - } + viewHolder.shuffleAction?.setOnClickListener { + MusicPlayerRemote.openAndShuffleQueue(dataSet, true) + } + val songCount = activity.resources.getQuantityString(R.plurals.songCount, dataSet.size, dataSet.size) + viewHolder.songCount?.text = songCount + viewHolder.sortAction?.setOnClickListener { + showSortPopupMenu(it) } } else { super.onBindViewHolder(holder, position - 1) } } + private fun showGridPopupMenu(view: View) { + val popupMenu = PopupMenu(activity, view) + popupMenu.menuInflater.inflate(R.menu.menu_grid_options, popupMenu.menu) + popupMenu.setOnMenuItemClickListener { + when (it.itemId) { + R.id.action_grid_size_1 -> { + PreferenceUtil.getInstance(activity).setSongGridSize(1) + } + R.id.action_grid_size_2 -> { + PreferenceUtil.getInstance(activity).setSongGridSize(2) + } + R.id.action_grid_size_3 -> { + PreferenceUtil.getInstance(activity).setSongGridSize(3) + } + R.id.action_grid_size_4 -> { + PreferenceUtil.getInstance(activity).setSongGridSize(4) + } + + } + return@setOnMenuItemClickListener true + } + popupMenu.show() + } + + private fun showSortPopupMenu(view: View) { + val popupMenu = PopupMenu(activity, view) + popupMenu.menuInflater.inflate(R.menu.menu_song_sort, popupMenu.menu) + popupMenu.setOnMenuItemClickListener { + when (it.itemId) { + R.id.action_song_sort_order_asc -> { + PreferenceUtil.getInstance(activity).songSortOrder = SongSortOrder.SONG_A_Z + } + R.id.action_song_sort_order_desc -> { + PreferenceUtil.getInstance(activity).songSortOrder = SongSortOrder.SONG_Z_A + } + R.id.action_song_sort_order_artist -> { + PreferenceUtil.getInstance(activity).songSortOrder = SongSortOrder.SONG_ARTIST + } + R.id.action_song_sort_order_album -> { + PreferenceUtil.getInstance(activity).songSortOrder = SongSortOrder.SONG_ALBUM + } + R.id.action_song_sort_order_date -> { + PreferenceUtil.getInstance(activity).songSortOrder = SongSortOrder.SONG_DATE + } + R.id.action_song_sort_order_composer -> { + PreferenceUtil.getInstance(activity).songSortOrder = SongSortOrder.COMPOSER + } + R.id.action_song_sort_order_year -> { + PreferenceUtil.getInstance(activity).songSortOrder = SongSortOrder.SONG_YEAR + } + } + return@setOnMenuItemClickListener true + } + popupMenu.show() + } + inner class ViewHolder(itemView: View) : AbsOffsetSongAdapter.ViewHolder(itemView) { - val playAction: MaterialButton? = itemView.findViewById(R.id.playAction) - val shuffleAction: MaterialButton? = itemView.findViewById(R.id.shuffleAction) + val playAction: AppCompatImageView? = itemView.findViewById(R.id.playAction) + val shuffleAction: AppCompatImageView? = itemView.findViewById(R.id.shuffleAction) + val sortAction: AppCompatImageView? = itemView.findViewById(R.id.sortAction) + val songCount: MaterialTextView? = itemView.findViewById(R.id.songCount) override fun onClick(v: View?) { if (itemViewType == OFFSET_ITEM) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt index 66529505a..b2ceea280 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/SongsFragment.kt @@ -1,5 +1,7 @@ package code.name.monkey.retromusic.fragments.mainactivity +import android.content.SharedPreferences +import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.os.Bundle import android.view.View import androidx.annotation.LayoutRes @@ -18,7 +20,7 @@ import java.util.ArrayList import javax.inject.Inject class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment(), - SongView, MainActivityFragmentCallbacks { + SongView, MainActivityFragmentCallbacks, OnSharedPreferenceChangeListener { @Inject lateinit var songPresenter: SongPresenter @@ -82,11 +84,13 @@ class SongsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_list_quick_actions.xml b/app/src/main/res/layout/item_list_quick_actions.xml index 5e53b9f7d..4e67689a2 100644 --- a/app/src/main/res/layout/item_list_quick_actions.xml +++ b/app/src/main/res/layout/item_list_quick_actions.xml @@ -14,32 +14,44 @@ + android:paddingStart="16dp" + android:paddingEnd="0dp"> - + android:textAppearance="@style/TextViewSubtitle1" + android:textStyle="bold" /> - + android:layout_weight="0" + android:background="?attr/roundSelector" + android:padding="16dp" + app:srcCompat="@drawable/ic_shuffle_white_24dp" + app:tint="?attr/colorControlNormal" + tools:tint="@color/black_color" /> + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_grid_options.xml b/app/src/main/res/menu/menu_grid_options.xml new file mode 100644 index 000000000..156927e61 --- /dev/null +++ b/app/src/main/res/menu/menu_grid_options.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_song_sort.xml b/app/src/main/res/menu/menu_song_sort.xml new file mode 100644 index 000000000..b6126f42c --- /dev/null +++ b/app/src/main/res/menu/menu_song_sort.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night-v27/styles.xml b/app/src/main/res/values-night-v27/styles.xml index 16bbd391e..accac239e 100644 --- a/app/src/main/res/values-night-v27/styles.xml +++ b/app/src/main/res/values-night-v27/styles.xml @@ -34,5 +34,7 @@ false @color/darkColorSurface + @style/RetroPopupTheme + @style/RetroPopupTheme \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index e53f21ee5..0f585cd02 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -34,5 +34,6 @@ @color/darkColorPrimary @color/darkColorSurface + @style/RetroPopupTheme \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles_parents.xml b/app/src/main/res/values-v27/styles_parents.xml index 0d3264478..959758387 100644 --- a/app/src/main/res/values-v27/styles_parents.xml +++ b/app/src/main/res/values-v27/styles_parents.xml @@ -31,6 +31,8 @@ @drawable/rect_selector @style/Widget.ActionButton.Overflow true + @style/RetroPopupTheme + @style/RetroPopupTheme \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c257950f1..b26236b08 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -307,7 +307,7 @@ 7 8 - + Grid style Hinge @@ -827,4 +827,8 @@ Retro Music Player Pro Free + + %d Song + %d Songs + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ed8fb9cd7..0976e75a4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -184,4 +184,8 @@ @android:color/transparent + diff --git a/app/src/main/res/values/styles_parents.xml b/app/src/main/res/values/styles_parents.xml index 6ac2764df..0b9290a73 100644 --- a/app/src/main/res/values/styles_parents.xml +++ b/app/src/main/res/values/styles_parents.xml @@ -17,6 +17,8 @@ @drawable/round_selector @drawable/rect_selector @style/Widget.ActionButton.Overflow + @style/RetroPopupTheme + @style/RetroPopupTheme