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