From d21bd475a10a48975e7cdab8dcb90f0319e94ec6 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Sun, 10 Aug 2025 12:54:05 -0700 Subject: [PATCH 1/3] wip: initial new rating on song layout --- ...nner_fragment_player_controller_layout.xml | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml index ac318326..024b14d8 100644 --- a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml +++ b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml @@ -104,6 +104,39 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/player_media_title_label" /> + + + + + + + + From 5fa46cc49bc445370dd6612a7ba48de4a1c48576 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Thu, 14 Aug 2025 21:46:33 -0700 Subject: [PATCH 2/3] feat:show rating on song view and allow setting/updating. #17 fixed a fr string error --- app/build.gradle | 2 +- .../ui/fragment/PlayerControllerFragment.java | 28 +++++++++++++++++++ .../viewmodel/PlayerBottomSheetViewModel.java | 6 ++-- ...nner_fragment_player_controller_layout.xml | 8 ++---- app/src/main/res/values-fr/strings.xml | 2 +- 5 files changed, 37 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ea649294..fbdfbdb7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { targetSdk 35 versionCode 27 - versionName '3.11.2' + versionName '3.11.3' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java index 01d8eb7b..ae5f633b 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java @@ -10,6 +10,8 @@ import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; import android.widget.ToggleButton; +import android.widget.RatingBar; +import android.util.Log; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; @@ -36,6 +38,7 @@ import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.util.MusicUtil; import com.cappielloantonio.tempo.util.Preferences; import com.cappielloantonio.tempo.viewmodel.PlayerBottomSheetViewModel; +import com.cappielloantonio.tempo.viewmodel.RatingViewModel; import com.google.android.material.chip.Chip; import com.google.android.material.elevation.SurfaceColors; import com.google.common.util.concurrent.ListenableFuture; @@ -53,6 +56,8 @@ public class PlayerControllerFragment extends Fragment { private InnerFragmentPlayerControllerBinding bind; private ViewPager2 playerMediaCoverViewPager; private ToggleButton buttonFavorite; + private RatingViewModel ratingViewModel; + private RatingBar songRatingBar; private TextView playerMediaTitleLabel; private TextView playerArtistNameLabel; private Button playbackSpeedButton; @@ -75,6 +80,7 @@ public class PlayerControllerFragment extends Fragment { View view = bind.getRoot(); playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class); + ratingViewModel = new ViewModelProvider(requireActivity()).get(RatingViewModel.class); init(); initQuickActionView(); @@ -117,6 +123,7 @@ public class PlayerControllerFragment extends Fragment { playerQuickActionView = bind.getRoot().findViewById(R.id.player_quick_action_view); playerOpenQueueButton = bind.getRoot().findViewById(R.id.player_open_queue_button); playerTrackInfo = bind.getRoot().findViewById(R.id.player_info_track); + songRatingBar = bind.getRoot().findViewById(R.id.song_rating_bar); } private void initQuickActionView() { @@ -313,6 +320,7 @@ public class PlayerControllerFragment extends Fragment { private void initMediaListenable() { playerBottomSheetViewModel.getLiveMedia().observe(getViewLifecycleOwner(), media -> { if (media != null) { + ratingViewModel.setSong(media); buttonFavorite.setChecked(media.getStarred() != null); buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext(), media)); buttonFavorite.setOnLongClickListener(v -> { @@ -323,9 +331,29 @@ public class PlayerControllerFragment extends Fragment { dialog.setArguments(bundle); dialog.show(requireActivity().getSupportFragmentManager(), null); + return true; }); + Integer currentRating = media.getUserRating(); + + if (currentRating != null) { + songRatingBar.setRating(currentRating); + } else { + songRatingBar.setRating(0); + } + + songRatingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { + @Override + public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { + if (fromUser) { + ratingViewModel.rate((int) rating); + media.setUserRating((int) rating); + } + } + }); + + if (getActivity() != null) { playerBottomSheetViewModel.refreshMediaInfo(requireActivity(), media); } diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java index 3e712479..339661d8 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java @@ -2,6 +2,7 @@ package com.cappielloantonio.tempo.viewmodel; import android.app.Application; import android.content.Context; +import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.OptIn; @@ -32,6 +33,8 @@ import com.cappielloantonio.tempo.util.NetworkUtil; import com.cappielloantonio.tempo.util.OpenSubsonicExtensionsUtil; import com.cappielloantonio.tempo.util.Preferences; +import org.jetbrains.annotations.Nullable; + import java.util.Collections; import java.util.Date; import java.util.List; @@ -103,7 +106,6 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel { favoriteRepository.starLater(media.getId(), null, null, false); } }); - media.setStarred(null); } @@ -131,7 +133,7 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel { } } - public LiveData getLiveLyrics() { + public LiveData getLiveLyrics() { return lyricsLiveData; } diff --git a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml index 024b14d8..b2bbb05e 100644 --- a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml +++ b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml @@ -108,12 +108,10 @@ android:id="@+id/rating_container" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="24dp" android:layout_marginTop="8dp" - android:layout_marginEnd="24dp" android:orientation="horizontal" - android:gravity="center_vertical" - app:layout_constraintEnd_toStartOf="@+id/button_favorite" + android:gravity="center" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/player_artist_name_label"> @@ -134,7 +132,7 @@ android:layout_marginStart="8dp" android:textSize="12sp" android:textColor="?attr/colorOnSurfaceVariant" - android:text="Not rated"/> + android:text=""/> Continuer Continuer et télécharger Le téléchargement des titres favoris pourrer utiliser beaucoup de données. - Synchroniser les titres favorisSync starred tracks + Synchroniser les titres favoris Veuillez redémarrer l\'app pour appliquer les changements. Modifier le chemin de stockage des fichiers mis en cache pourrait provoquer de tous les fichiers mis en cache précédemment. Sélectionner une option de stockage From 87f6db9e798fcc035de95655ffe615ca1034be50 Mon Sep 17 00:00:00 2001 From: eddyizm Date: Thu, 14 Aug 2025 21:54:25 -0700 Subject: [PATCH 3/3] chore: cleaned up dev log imports, commented code --- .../tempo/ui/fragment/PlayerControllerFragment.java | 1 - .../tempo/viewmodel/PlayerBottomSheetViewModel.java | 3 --- .../res/layout/inner_fragment_player_controller_layout.xml | 1 - 3 files changed, 5 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java index ae5f633b..a07d58ec 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerControllerFragment.java @@ -11,7 +11,6 @@ import android.widget.ImageButton; import android.widget.TextView; import android.widget.ToggleButton; import android.widget.RatingBar; -import android.util.Log; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java index 339661d8..bf90fa65 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/PlayerBottomSheetViewModel.java @@ -2,7 +2,6 @@ package com.cappielloantonio.tempo.viewmodel; import android.app.Application; import android.content.Context; -import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.OptIn; @@ -33,8 +32,6 @@ import com.cappielloantonio.tempo.util.NetworkUtil; import com.cappielloantonio.tempo.util.OpenSubsonicExtensionsUtil; import com.cappielloantonio.tempo.util.Preferences; -import org.jetbrains.annotations.Nullable; - import java.util.Collections; import java.util.Date; import java.util.List; diff --git a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml index b2bbb05e..9063e242 100644 --- a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml +++ b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml @@ -162,7 +162,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/exo_progress" /> -