From 27f5a47cc962270c73b745b484d1973b0de653c2 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Thu, 27 Nov 2025 08:04:40 -0800 Subject: [PATCH] feat: save q to playlist, removed save queue button, added style to fab. --- .../ui/fragment/PlayerQueueFragment.java | 30 ++++++++++++------- .../layout/inner_fragment_player_queue.xml | 11 +------ app/src/main/res/values-night/styles.xml | 17 +++++++++++ app/src/main/res/values/styles.xml | 17 +++++++++++ 4 files changed, 55 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java index 2fa80702..809b1a18 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java @@ -6,6 +6,7 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -23,6 +24,7 @@ import com.cappielloantonio.tempo.service.MediaManager; import com.cappielloantonio.tempo.service.MediaService; import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.ui.adapter.PlayerSongQueueAdapter; +import com.cappielloantonio.tempo.ui.dialog.PlaylistChooserDialog; import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.viewmodel.PlaybackViewModel; import com.cappielloantonio.tempo.viewmodel.PlayerBottomSheetViewModel; @@ -31,6 +33,7 @@ import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; @UnstableApi @@ -46,7 +49,6 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { private com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton fabSaveToPlaylist; private com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton fabDownloadAll; - private com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton fabSaveQueue; private com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton fabLoadQueue; private boolean isMenuOpen = false; @@ -73,7 +75,6 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { fabSaveToPlaylist = bind.fabSaveToPlaylist; fabDownloadAll = bind.fabDownloadAll; - fabSaveQueue = bind.fabSaveQueue; fabLoadQueue = bind.fabLoadQueue; fabMenuToggle.setOnClickListener(v -> toggleFabMenu()); @@ -82,7 +83,6 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { fabSaveToPlaylist.setOnClickListener(v -> handleSaveToPlaylistClick()); fabDownloadAll.setOnClickListener(v -> handleDownloadAllClick()); - fabSaveQueue.setOnClickListener(v -> handleSaveQueueClick()); fabLoadQueue.setOnClickListener(v -> handleLoadQueueClick()); initQueueRecyclerView(); @@ -246,7 +246,6 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { // CLOSE MENU (Reverse order for visual effect) closeFab(fabSaveToPlaylist, 5); closeFab(fabDownloadAll, 4); - closeFab(fabSaveQueue, 3); closeFab(fabLoadQueue, 2); closeFab(fabClearQueue, 1); closeFab(fabShuffleQueue, 0); @@ -257,7 +256,6 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { openFab(fabShuffleQueue, 0); openFab(fabClearQueue, 1); openFab(fabLoadQueue, 2); - openFab(fabSaveQueue, 3); openFab(fabDownloadAll, 4); openFab(fabSaveToPlaylist, 5); @@ -352,7 +350,23 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { } private void handleSaveToPlaylistClick() { - Log.d(TAG, "Save to Playlist Clicked! (Placeholder)"); + Log.d(TAG, "Save to Playlist Clicked!"); + + List queueSongs = playerSongQueueAdapter.getItems(); + + if (queueSongs == null || queueSongs.isEmpty()) { + Toast.makeText(requireContext(), "Queue is empty", Toast.LENGTH_SHORT).show(); + toggleFabMenu(); + return; + } + + Bundle bundle = new Bundle(); + bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, new ArrayList<>(queueSongs)); + + PlaylistChooserDialog dialog = new PlaylistChooserDialog(); + dialog.setArguments(bundle); + dialog.show(requireActivity().getSupportFragmentManager(), null); + toggleFabMenu(); } @@ -361,10 +375,6 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { toggleFabMenu(); } - private void handleSaveQueueClick() { - Log.d(TAG, "Save Queue Clicked! (Placeholder)"); - toggleFabMenu(); - } private void handleLoadQueueClick() { Log.d(TAG, "Load Queue Clicked! (Placeholder)"); diff --git a/app/src/main/res/layout/inner_fragment_player_queue.xml b/app/src/main/res/layout/inner_fragment_player_queue.xml index 1f3eec9f..16fb9b44 100644 --- a/app/src/main/res/layout/inner_fragment_player_queue.xml +++ b/app/src/main/res/layout/inner_fragment_player_queue.xml @@ -35,7 +35,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:visibility="gone" - android:text="Save to Playlist (TODO)" + android:text="Save Queue to Playlist" tools:ignore="HardcodedText" app:icon="@android:drawable/ic_menu_edit" /> @@ -49,15 +49,6 @@ tools:ignore="HardcodedText" app:icon="@android:drawable/stat_sys_download_done" /> - ?attr/colorSurface ?attr/colorSurface none + + @style/FloatingActionButtonStyle + + + + + + + +