From ff6bf20c305b869301052fc33bd6dcfcb40439cc Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sun, 24 Mar 2024 18:50:05 +0100 Subject: [PATCH] style: refined the design of favorite and rating indicators --- .../ui/adapter/PlayerSongQueueAdapter.java | 24 +++++ .../ui/adapter/SongHorizontalAdapter.java | 24 ++++- .../tempo/util/MusicUtil.java | 15 ---- app/src/main/res/drawable/ic_drag_handle.xml | 12 +-- app/src/main/res/drawable/ic_star.xml | 9 ++ .../main/res/drawable/ic_star_outlined.xml | 9 ++ .../main/res/layout/item_horizontal_track.xml | 56 ++++++++++-- .../res/layout/item_player_queue_song.xml | 90 ++++++++++++++++--- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 14 files changed, 203 insertions(+), 48 deletions(-) create mode 100644 app/src/main/res/drawable/ic_star.xml create mode 100644 app/src/main/res/drawable/ic_star_outlined.xml diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java index 6b2bd284..d0b9764d 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java @@ -2,9 +2,11 @@ package com.cappielloantonio.tempo.ui.adapter; import android.os.Bundle; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.appcompat.content.res.AppCompatResources; import androidx.media3.session.MediaBrowser; import androidx.recyclerview.widget.RecyclerView; @@ -17,6 +19,7 @@ import com.cappielloantonio.tempo.service.MediaManager; import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.util.MusicUtil; +import com.cappielloantonio.tempo.util.Preferences; import com.google.common.util.concurrent.ListenableFuture; import java.util.ArrayList; @@ -66,12 +69,33 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter= 1 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.twoStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 2 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.threeStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 3 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.fourStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 4 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.fiveStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 5 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + } + } else { + holder.item.ratingIndicatorImageView.setVisibility(View.GONE); + } } public List getItems() { diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java index 2893ffe8..c2e1d7d6 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java @@ -6,6 +6,7 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.appcompat.content.res.AppCompatResources; import androidx.media3.common.util.UnstableApi; import androidx.recyclerview.widget.RecyclerView; @@ -60,13 +61,11 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter 0 && songs.get(position - 1) != null && songs.get(position - 1).getDiscNumber() != null && songs.get(position).getDiscNumber() != null && songs.get(position - 1).getDiscNumber() < songs.get(position).getDiscNumber())) { holder.item.differentDiskDivider.setVisibility(View.VISIBLE); } + + if (Preferences.showItemRating()) { + if (song.getStarred() == null && song.getUserRating() == null) { + holder.item.ratingIndicatorImageView.setVisibility(View.GONE); + } + + holder.item.preferredIcon.setVisibility(song.getStarred() != null ? View.VISIBLE : View.GONE); + holder.item.ratingBarLayout.setVisibility(song.getUserRating() != null ? View.VISIBLE : View.GONE); + + if (song.getUserRating() != null) { + holder.item.oneStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 1 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.twoStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 2 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.threeStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 3 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.fourStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 4 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + holder.item.fiveStarIcon.setImageDrawable(AppCompatResources.getDrawable(holder.itemView.getContext(), song.getUserRating() >= 5 ? R.drawable.ic_star : R.drawable.ic_star_outlined)); + } + } else { + holder.item.ratingIndicatorImageView.setVisibility(View.GONE); + } } @Override diff --git a/app/src/main/java/com/cappielloantonio/tempo/util/MusicUtil.java b/app/src/main/java/com/cappielloantonio/tempo/util/MusicUtil.java index bb347a1d..6b0b23fe 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/util/MusicUtil.java +++ b/app/src/main/java/com/cappielloantonio/tempo/util/MusicUtil.java @@ -195,21 +195,6 @@ public class MusicUtil { return context.getString(R.string.label_placeholder); } - public static String getRatingNumber(Integer ratingNumber) { - if (ratingNumber == null || !Preferences.showItemRating()) return ""; - - StringBuilder builder = new StringBuilder(); - - builder.append("•"); - builder.append(" "); - - for (int i = 0; i < ratingNumber; i++) { - builder.append("★"); - } - - return builder.toString(); - } - public static String forceReadableString(String string) { if (string != null) { return getReadableString(string) diff --git a/app/src/main/res/drawable/ic_drag_handle.xml b/app/src/main/res/drawable/ic_drag_handle.xml index 3c6cdf66..d283f15d 100644 --- a/app/src/main/res/drawable/ic_drag_handle.xml +++ b/app/src/main/res/drawable/ic_drag_handle.xml @@ -1,9 +1,9 @@ + android:width="20dp" + android:height="20dp" + android:viewportWidth="960" + android:viewportHeight="960"> - + android:pathData="M228.29,600Q213,600 202.5,589.71Q192,579.42 192,564.21Q192,549 202.34,538.5Q212.69,528 227.98,528L731.71,528Q747,528 757.5,538.29Q768,548.58 768,563.79Q768,579 757.66,589.5Q747.31,600 732.02,600L228.29,600ZM228.29,432Q213,432 202.5,421.71Q192,411.42 192,396.21Q192,381 202.34,370.5Q212.69,360 227.98,360L731.71,360Q747,360 757.5,370.29Q768,380.58 768,395.79Q768,411 757.66,421.5Q747.31,432 732.02,432L228.29,432Z" /> + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_star.xml b/app/src/main/res/drawable/ic_star.xml new file mode 100644 index 00000000..2d74f8a6 --- /dev/null +++ b/app/src/main/res/drawable/ic_star.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_star_outlined.xml b/app/src/main/res/drawable/ic_star_outlined.xml new file mode 100644 index 00000000..7637008b --- /dev/null +++ b/app/src/main/res/drawable/ic_star_outlined.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_horizontal_track.xml b/app/src/main/res/layout/item_horizontal_track.xml index 10d96ded..21c7d3c7 100644 --- a/app/src/main/res/layout/item_horizontal_track.xml +++ b/app/src/main/res/layout/item_horizontal_track.xml @@ -78,11 +78,11 @@ app:layout_constraintStart_toEndOf="@+id/cover_image_separator" app:layout_constraintTop_toBottomOf="@+id/search_result_song_title_text_view" /> - - + + + + + + + + + + + + + + + @@ -30,9 +31,11 @@ android:paddingEnd="12dp" android:singleLine="true" android:text="@string/label_placeholder" - app:layout_constraintEnd_toStartOf="@+id/queue_song_holder_image" + app:layout_constraintEnd_toStartOf="@+id/rating_indicator_image_view" app:layout_constraintStart_toEndOf="@+id/queue_song_cover_image_view" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@id/queue_song_cover_image_view" + app:layout_constraintBottom_toTopOf="@id/queue_song_subtitle_text_view" + app:layout_constraintVertical_chainStyle="packed"/> + app:layout_constraintTop_toBottomOf="@+id/queue_song_title_text_view" + app:layout_constraintBottom_toBottomOf="@+id/queue_song_cover_image_view"/> + + + + + + + + + + + + + + + + + + + + app:layout_constraintStart_toEndOf="@+id/rating_indicator_image_view" + app:layout_constraintTop_toTopOf="@+id/queue_song_cover_image_view" /> \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7002907b..abe76469 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -313,7 +313,7 @@ Lieblingslieder %1$s\'s Top Tracks Jahr %1$d - %1$s • %2$s %3$s %4$s + %1$s • %2$s %3$s Abbrechen Weiter Weiter und Herunterladen diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 91d778d0..d6659fa5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -328,7 +328,7 @@ Titres favoris Les meilleurs titres de %1$s Année %1$d - %1$s • %2$s %3$s %4$s + %1$s • %2$s %3$s Annuler Continuer Continuer et télécharger diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index c01de5e9..679f333a 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -331,7 +331,7 @@ 즐겨찾기한 트랙 %1$s\의 top tracks 년도 %1$d - %1$s • %2$s %3$s %4$s + %1$s • %2$s %3$s 취소 계속 계속해서 다운로드 diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index ee78697b..12f04a31 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -330,7 +330,7 @@ Músicas favoritas Músicas preferidas de %1$s Ano %1$d - %1$s • %2$s %3$s %4$s + %1$s • %2$s %3$s Cancelar Continuar Continuar e baixar diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index ce6cb55b..85ab92a5 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -327,7 +327,7 @@ 已收藏的曲目 %1$s 的热门曲目 年份 %1$d - %1$s • %2$s %3$s %4$s + %1$s • %2$s %3$s 取消 继续 继续并下载 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b56360c..dfbe4863 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -345,7 +345,7 @@ Starred tracks %1$s\'s top tracks Year %1$d - %1$s • %2$s %3$s %4$s + %1$s • %2$s %3$s Cancel Continue Continue and download