From d28fa5db69d105f79a018b32ecd1b53013db2d64 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Thu, 13 Apr 2023 22:54:33 +0200 Subject: [PATCH] Enable nonFinalResIds --- .../auth/model/AuthenticationSortBy.kt | 12 +++--- .../androidtv/constant/GridDirection.kt | 12 +++--- .../androidtv/constant/HomeSectionType.kt | 43 ++++++------------- .../jellyfin/androidtv/constant/ImageType.kt | 15 +++---- .../jellyfin/androidtv/constant/PosterSize.kt | 21 ++++----- .../androidtv/preference/constant/AppTheme.kt | 15 +++---- .../preference/constant/AudioBehavior.kt | 14 +++--- .../preference/constant/ClockBehavior.kt | 18 ++++---- .../preference/constant/LiveTvChannelOrder.kt | 14 +++--- .../preference/constant/NextUpBehavior.kt | 15 +++---- .../constant/PreferredVideoPlayer.kt | 21 ++++----- .../preference/constant/RatingType.kt | 15 +++---- .../constant/RefreshRateSwitchingBehavior.kt | 15 +++---- .../constant/WatchedIndicatorBehavior.kt | 18 ++++---- .../store/DisplayPreferencesStore.kt | 2 +- .../ui/itemdetail/FullDetailsFragment.java | 33 +++++++------- .../ui/preference/dsl/EnumDisplayOptions.kt | 13 ------ .../ui/preference/dsl/OptionsItemEnum.kt | 16 +++---- gradle.properties | 2 - preference/src/main/kotlin/PreferenceEnum.kt | 18 +++++++- .../kotlin/store/SharedPreferenceStore.kt | 2 +- 21 files changed, 146 insertions(+), 188 deletions(-) delete mode 100644 app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/EnumDisplayOptions.kt diff --git a/app/src/main/java/org/jellyfin/androidtv/auth/model/AuthenticationSortBy.kt b/app/src/main/java/org/jellyfin/androidtv/auth/model/AuthenticationSortBy.kt index c7bcfbfcd..4d1bd103d 100644 --- a/app/src/main/java/org/jellyfin/androidtv/auth/model/AuthenticationSortBy.kt +++ b/app/src/main/java/org/jellyfin/androidtv/auth/model/AuthenticationSortBy.kt @@ -1,11 +1,11 @@ package org.jellyfin.androidtv.auth.model import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class AuthenticationSortBy { - @EnumDisplayOptions(name = R.string.last_use) - LAST_USE, - @EnumDisplayOptions(name = R.string.alphabetical) - ALPHABETICAL +enum class AuthenticationSortBy( + override val nameRes: Int +) : PreferenceEnum { + LAST_USE(R.string.last_use), + ALPHABETICAL(R.string.alphabetical); } diff --git a/app/src/main/java/org/jellyfin/androidtv/constant/GridDirection.kt b/app/src/main/java/org/jellyfin/androidtv/constant/GridDirection.kt index bbed1548e..03b3f3e14 100644 --- a/app/src/main/java/org/jellyfin/androidtv/constant/GridDirection.kt +++ b/app/src/main/java/org/jellyfin/androidtv/constant/GridDirection.kt @@ -1,18 +1,18 @@ package org.jellyfin.androidtv.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class GridDirection { +enum class GridDirection( + override val nameRes: Int, +) : PreferenceEnum { /** * Horizontal. */ - @EnumDisplayOptions(R.string.grid_direction_horizontal) - HORIZONTAL, + HORIZONTAL(R.string.grid_direction_horizontal), /** * Vertical. */ - @EnumDisplayOptions(R.string.grid_direction_vertical) - VERTICAL, + VERTICAL(R.string.grid_direction_vertical), } diff --git a/app/src/main/java/org/jellyfin/androidtv/constant/HomeSectionType.kt b/app/src/main/java/org/jellyfin/androidtv/constant/HomeSectionType.kt index 6436ebaec..13b3d5518 100644 --- a/app/src/main/java/org/jellyfin/androidtv/constant/HomeSectionType.kt +++ b/app/src/main/java/org/jellyfin/androidtv/constant/HomeSectionType.kt @@ -1,7 +1,6 @@ package org.jellyfin.androidtv.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions import org.jellyfin.preference.PreferenceEnum /** @@ -10,35 +9,17 @@ import org.jellyfin.preference.PreferenceEnum * https://github.com/jellyfin/jellyfin-web/blob/master/src/components/homesections/homesections.js */ enum class HomeSectionType( - override val serializedName: String + override val serializedName: String, + override val nameRes: Int, ) : PreferenceEnum { - @EnumDisplayOptions(R.string.home_section_latest_media) - LATEST_MEDIA("latestmedia"), - - @EnumDisplayOptions(R.string.home_section_library) - LIBRARY_TILES_SMALL("smalllibrarytiles"), - - @EnumDisplayOptions(R.string.home_section_library_small) - LIBRARY_BUTTONS("librarybuttons"), - - @EnumDisplayOptions(R.string.home_section_resume) - RESUME("resume"), - - @EnumDisplayOptions(R.string.home_section_resume_audio) - RESUME_AUDIO("resumeaudio"), - - @EnumDisplayOptions(R.string.home_section_resume_book) - RESUME_BOOK("resumebook"), - - @EnumDisplayOptions(R.string.home_section_active_recordings) - ACTIVE_RECORDINGS("activerecordings"), - - @EnumDisplayOptions(R.string.home_section_next_up) - NEXT_UP("nextup"), - - @EnumDisplayOptions(R.string.home_section_livetv) - LIVE_TV("livetv"), - - @EnumDisplayOptions(R.string.home_section_none) - NONE("none"), + LATEST_MEDIA("latestmedia", R.string.home_section_latest_media), + LIBRARY_TILES_SMALL("smalllibrarytiles", R.string.home_section_library), + LIBRARY_BUTTONS("librarybuttons", R.string.home_section_library_small), + RESUME("resume", R.string.home_section_resume), + RESUME_AUDIO("resumeaudio", R.string.home_section_resume_audio), + RESUME_BOOK("resumebook", R.string.home_section_resume_book), + ACTIVE_RECORDINGS("activerecordings", R.string.home_section_active_recordings), + NEXT_UP("nextup", R.string.home_section_next_up), + LIVE_TV("livetv", R.string.home_section_livetv), + NONE("none", R.string.home_section_none), } diff --git a/app/src/main/java/org/jellyfin/androidtv/constant/ImageType.kt b/app/src/main/java/org/jellyfin/androidtv/constant/ImageType.kt index d8f42ab76..601ba8eb2 100644 --- a/app/src/main/java/org/jellyfin/androidtv/constant/ImageType.kt +++ b/app/src/main/java/org/jellyfin/androidtv/constant/ImageType.kt @@ -1,24 +1,23 @@ package org.jellyfin.androidtv.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class ImageType { +enum class ImageType( + override val nameRes: Int, +) : PreferenceEnum { /** * Poster. */ - @EnumDisplayOptions(R.string.image_type_poster) - POSTER, + POSTER(R.string.image_type_poster), /** * Thumbnail. */ - @EnumDisplayOptions(R.string.image_type_thumbnail) - THUMB, + THUMB(R.string.image_type_thumbnail), /** * Banner. */ - @EnumDisplayOptions(R.string.image_type_banner) - BANNER + BANNER(R.string.image_type_banner), } diff --git a/app/src/main/java/org/jellyfin/androidtv/constant/PosterSize.kt b/app/src/main/java/org/jellyfin/androidtv/constant/PosterSize.kt index bf3261016..6b4b8afd9 100644 --- a/app/src/main/java/org/jellyfin/androidtv/constant/PosterSize.kt +++ b/app/src/main/java/org/jellyfin/androidtv/constant/PosterSize.kt @@ -1,35 +1,32 @@ package org.jellyfin.androidtv.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class PosterSize { +enum class PosterSize( + override val nameRes: Int, +) : PreferenceEnum { /** * Smallest. */ - @EnumDisplayOptions(R.string.image_size_smallest) - SMALLEST, + SMALLEST(R.string.image_size_smallest), /** * Small. */ - @EnumDisplayOptions(R.string.image_size_small) - SMALL, + SMALL(R.string.image_size_small), /** * Medium. */ - @EnumDisplayOptions(R.string.image_size_medium) - MED, + MED(R.string.image_size_medium), /** * Large. */ - @EnumDisplayOptions(R.string.image_size_large) - LARGE, + LARGE(R.string.image_size_large), /** * Extra Large. */ - @EnumDisplayOptions(R.string.image_size_xlarge) - X_LARGE + X_LARGE(R.string.image_size_xlarge), } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/AppTheme.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/AppTheme.kt index 012879a06..0f4b3c8ec 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/AppTheme.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/AppTheme.kt @@ -1,24 +1,23 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class AppTheme { +enum class AppTheme( + override val nameRes: Int, +) : PreferenceEnum { /** * The default dark theme */ - @EnumDisplayOptions(R.string.pref_theme_dark) - DARK, + DARK(R.string.pref_theme_dark), /** * The "classic" emerald theme */ - @EnumDisplayOptions(R.string.pref_theme_emerald) - EMERALD, + EMERALD(R.string.pref_theme_emerald), /** * A theme with a more muted accent color, inspired by CTalvio's Monochromic CSS theme for Jellyfin Web */ - @EnumDisplayOptions(R.string.pref_theme_muted_purple) - MUTED_PURPLE, + MUTED_PURPLE(R.string.pref_theme_muted_purple), } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/AudioBehavior.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/AudioBehavior.kt index 3c9b3d826..ba972fb60 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/AudioBehavior.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/AudioBehavior.kt @@ -1,22 +1,22 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions import org.jellyfin.androidtv.util.DeviceUtils +import org.jellyfin.preference.PreferenceEnum -enum class AudioBehavior { +enum class AudioBehavior( + override val nameRes: Int, +) : PreferenceEnum { /** * Directly stream audio without any changes */ - @EnumDisplayOptions(R.string.pref_audio_direct) - DIRECT_STREAM, + DIRECT_STREAM(R.string.pref_audio_direct), /** * Downnmix audio to stereo. Disables the AC3, EAC3 and AAC_LATM audio codecs. */ - @EnumDisplayOptions(R.string.pref_audio_compat) - DOWNMIX_TO_STEREO + DOWNMIX_TO_STEREO(R.string.pref_audio_compat), } val defaultAudioBehavior = if (DeviceUtils.isChromecastWithGoogleTV) AudioBehavior.DOWNMIX_TO_STEREO - else AudioBehavior.DIRECT_STREAM +else AudioBehavior.DIRECT_STREAM diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/ClockBehavior.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/ClockBehavior.kt index 79f51198e..4970cf1a6 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/ClockBehavior.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/ClockBehavior.kt @@ -1,30 +1,28 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class ClockBehavior { +enum class ClockBehavior( + override val nameRes: Int, +) : PreferenceEnum { /** * Always show clock. */ - @EnumDisplayOptions(R.string.lbl_always) - ALWAYS, + ALWAYS(R.string.lbl_always), /** * Show clock in menus only. */ - @EnumDisplayOptions(R.string.pref_clock_display_browsing) - IN_MENUS, + IN_MENUS(R.string.pref_clock_display_browsing), /** * Show clock in video only. */ - @EnumDisplayOptions(R.string.pref_clock_display_playback) - IN_VIDEO, + IN_VIDEO(R.string.pref_clock_display_playback), /** * Show clock never. */ - @EnumDisplayOptions(R.string.lbl_never) - NEVER + NEVER(R.string.lbl_never), } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/LiveTvChannelOrder.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/LiveTvChannelOrder.kt index 4e35cad16..6ca5de42f 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/LiveTvChannelOrder.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/LiveTvChannelOrder.kt @@ -1,17 +1,15 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum import org.jellyfin.sdk.model.constant.ItemSortBy enum class LiveTvChannelOrder( - val stringValue: String -) { - @EnumDisplayOptions(R.string.lbl_guide_option_played) - LAST_PLAYED(ItemSortBy.DatePlayed), - - @EnumDisplayOptions(R.string.lbl_guide_option_number) - CHANNEL_NUMBER(ItemSortBy.SortName); + override val nameRes: Int, + val stringValue: String, +) : PreferenceEnum { + LAST_PLAYED(R.string.lbl_guide_option_played, ItemSortBy.DatePlayed), + CHANNEL_NUMBER(R.string.lbl_guide_option_number, ItemSortBy.SortName); companion object { fun fromString(value: String) = values() diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/NextUpBehavior.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/NextUpBehavior.kt index 71547178e..d778d8185 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/NextUpBehavior.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/NextUpBehavior.kt @@ -1,26 +1,25 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class NextUpBehavior { +enum class NextUpBehavior( + override val nameRes: Int, +) : PreferenceEnum { /** * Enable the Next Up screen - show the item's thumbnail */ - @EnumDisplayOptions(R.string.lbl_next_up_extended) - EXTENDED, + EXTENDED(R.string.lbl_next_up_extended), /** * Enable the Next Up screen - hide the item's thumbnail */ - @EnumDisplayOptions(R.string.lbl_next_up_minimal) - MINIMAL, + MINIMAL(R.string.lbl_next_up_minimal), /** * Disable the Next Up screen */ - @EnumDisplayOptions(R.string.lbl_never) - DISABLED + DISABLED(R.string.lbl_never), } const val NEXTUP_TIMER_DISABLED: Int = 0 diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/PreferredVideoPlayer.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/PreferredVideoPlayer.kt index f7516e1dd..8e0f6b8de 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/PreferredVideoPlayer.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/PreferredVideoPlayer.kt @@ -1,36 +1,33 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class PreferredVideoPlayer { +enum class PreferredVideoPlayer( + override val nameRes: Int, +) : PreferenceEnum { /** * Automatically selects between exoplayer and vlc */ - @EnumDisplayOptions(R.string.pref_video_player_auto) - AUTO, + AUTO(R.string.pref_video_player_auto), /** * Force ExoPlayer */ - @EnumDisplayOptions(R.string.pref_video_player_exoplayer) - EXOPLAYER, + EXOPLAYER(R.string.pref_video_player_exoplayer), /** * Force libVLC */ - @EnumDisplayOptions(R.string.pref_video_player_vlc) - VLC, + VLC(R.string.pref_video_player_vlc), /** * Use external player */ - @EnumDisplayOptions(R.string.pref_video_player_external) - EXTERNAL, + EXTERNAL(R.string.pref_video_player_external), /** * Choose a player - play with button */ - @EnumDisplayOptions(R.string.pref_video_player_choose) - CHOOSE + CHOOSE(R.string.pref_video_player_choose), } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/RatingType.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/RatingType.kt index 5bf202a95..55ea1d5bf 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/RatingType.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/RatingType.kt @@ -1,24 +1,23 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class RatingType { +enum class RatingType( + override val nameRes: Int, +) : PreferenceEnum { /** * Sets default rating type to tomatoes. */ - @EnumDisplayOptions(R.string.lbl_tomatoes) - RATING_TOMATOES, + RATING_TOMATOES(R.string.lbl_tomatoes), /** * Sets the default rating type to stars. */ - @EnumDisplayOptions(R.string.lbl_stars) - RATING_STARS, + RATING_STARS(R.string.lbl_stars), /** * Sets the default rating type to hidden. */ - @EnumDisplayOptions(R.string.lbl_hidden) - RATING_HIDDEN + RATING_HIDDEN(R.string.lbl_hidden), } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/RefreshRateSwitchingBehavior.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/RefreshRateSwitchingBehavior.kt index 2b91c0bb5..3340b059a 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/RefreshRateSwitchingBehavior.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/RefreshRateSwitchingBehavior.kt @@ -1,22 +1,21 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class RefreshRateSwitchingBehavior { - @EnumDisplayOptions(R.string.state_disabled) - DISABLED, +enum class RefreshRateSwitchingBehavior( + override val nameRes: Int, +) : PreferenceEnum { + DISABLED(R.string.state_disabled), /** * When comparing modes, use difference in resolution to rank modes. */ - @EnumDisplayOptions(R.string.pref_refresh_rate_scale_on_tv) - SCALE_ON_TV, + SCALE_ON_TV(R.string.pref_refresh_rate_scale_on_tv), /** * When comparing modes, rank native resolution modes highest. * Otherwise use difference in resolution to rank modes. */ - @EnumDisplayOptions(R.string.pref_refresh_rate_scale_on_device) - SCALE_ON_DEVICE, + SCALE_ON_DEVICE(R.string.pref_refresh_rate_scale_on_device), } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/constant/WatchedIndicatorBehavior.kt b/app/src/main/java/org/jellyfin/androidtv/preference/constant/WatchedIndicatorBehavior.kt index e08d50226..6f2c8a88d 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/constant/WatchedIndicatorBehavior.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/constant/WatchedIndicatorBehavior.kt @@ -1,30 +1,28 @@ package org.jellyfin.androidtv.preference.constant import org.jellyfin.androidtv.R -import org.jellyfin.androidtv.ui.preference.dsl.EnumDisplayOptions +import org.jellyfin.preference.PreferenceEnum -enum class WatchedIndicatorBehavior { +enum class WatchedIndicatorBehavior( + override val nameRes: Int, +) : PreferenceEnum { /** * Always show watched indicators. */ - @EnumDisplayOptions(R.string.lbl_always) - ALWAYS, + ALWAYS(R.string.lbl_always), /** * Hide unwatched count indicator, show watched check mark only. */ - @EnumDisplayOptions(R.string.lbl_hide_unwatched_count) - HIDE_UNWATCHED, + HIDE_UNWATCHED(R.string.lbl_hide_unwatched_count), /** * Hide unwatched count indicator, show watched check mark on individual episodes only. */ - @EnumDisplayOptions(R.string.lbl_episode_marks) - EPISODES_ONLY, + EPISODES_ONLY(R.string.lbl_episode_marks), /** * Never show watched indicators. */ - @EnumDisplayOptions(R.string.lbl_never) - NEVER + NEVER(R.string.lbl_never), } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt b/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt index c6178228d..906d5c888 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt @@ -119,7 +119,7 @@ abstract class DisplayPreferencesStore( override fun > setEnum(preference: Preference<*>, value: Enum) = setString( preference.key, when (value) { - is PreferenceEnum -> value.serializedName + is PreferenceEnum -> value.serializedName ?: value.toString() else -> value.toString() } ) diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsFragment.java b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsFragment.java index 11faf8b6e..d9f8354fb 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsFragment.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsFragment.java @@ -1500,23 +1500,22 @@ public class FullDetailsFragment extends Fragment implements RecordingIndicatorV PopupMenu.OnMenuItemClickListener moreMenuListener = new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.addFav: - case R.id.remFav: - toggleFavorite(); - return true; - case R.id.playTrailers: - playTrailers(); - return true; - case R.id.gotoSeries: - gotoSeries(); - return true; - case R.id.shuffleAll: - play(mBaseItem, 0, true); - return true; - case R.id.addQueue: - addItemToQueue(); - return true; + int itemId = item.getItemId(); + if (itemId == R.id.addFav || itemId == R.id.remFav) { + toggleFavorite(); + return true; + } else if (itemId == R.id.playTrailers) { + playTrailers(); + return true; + } else if (itemId == R.id.gotoSeries) { + gotoSeries(); + return true; + } else if (itemId == R.id.shuffleAll) { + play(mBaseItem, 0, true); + return true; + } else if (itemId == R.id.addQueue) { + addItemToQueue(); + return true; } return false; } diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/EnumDisplayOptions.kt b/app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/EnumDisplayOptions.kt deleted file mode 100644 index 8ed27b614..000000000 --- a/app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/EnumDisplayOptions.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.jellyfin.androidtv.ui.preference.dsl - -import androidx.annotation.StringRes - -/** - * Annotation used in the [OptionsItemEnum] to add display options to enum entries. - * @param name The id of the name resource. -1 for "none" (default). - * @param hidden True to hide this option or false (default) to display. - */ -annotation class EnumDisplayOptions( - @StringRes val name: Int = -1, - val hidden: Boolean = false -) diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/OptionsItemEnum.kt b/app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/OptionsItemEnum.kt index 70d9c7ef4..49221981e 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/OptionsItemEnum.kt +++ b/app/src/main/java/org/jellyfin/androidtv/ui/preference/dsl/OptionsItemEnum.kt @@ -5,6 +5,7 @@ import androidx.annotation.StringRes import androidx.preference.PreferenceCategory import org.jellyfin.androidtv.ui.preference.custom.RichListPreference import org.jellyfin.preference.Preference +import org.jellyfin.preference.PreferenceEnum import org.jellyfin.preference.store.PreferenceStore import java.util.UUID @@ -26,17 +27,10 @@ class OptionsItemEnum>( private fun getEntries(): Map { return clazz.enumConstants?.mapNotNull { entry -> - val options = clazz - .getDeclaredField(entry.name) - .getAnnotation(EnumDisplayOptions::class.java) - when { - // Options set but entry is hidden - options?.hidden == true -> null - // Options not set or name not set - options == null || options.name == -1 -> Pair(entry, entry.name) - // Options set and name set - else -> Pair(entry, context.getString(options.name)) + entry is PreferenceEnum && entry.hidden -> null + entry is PreferenceEnum && entry.nameRes != -1 -> Pair(entry, context.getString(entry.nameRes)) + else -> Pair(entry, entry.name) } }?.toMap().orEmpty() } @@ -66,7 +60,7 @@ class OptionsItemEnum>( } } - container += { + container += { pref.isEnabled = dependencyCheckFun() && enabled } } diff --git a/gradle.properties b/gradle.properties index 58b1b3af2..ac848ba0d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,8 +10,6 @@ sdk.version=default # Android android.useAndroidX=true -# FIXME: Remove this once EnumDisplayOptions is updated -android.nonFinalResIds=false # FIXME: Remove this once all uses of R have correct imports android.nonTransitiveRClass=false diff --git a/preference/src/main/kotlin/PreferenceEnum.kt b/preference/src/main/kotlin/PreferenceEnum.kt index 9a2b4ea22..449d44658 100644 --- a/preference/src/main/kotlin/PreferenceEnum.kt +++ b/preference/src/main/kotlin/PreferenceEnum.kt @@ -1,5 +1,21 @@ package org.jellyfin.preference +import androidx.annotation.StringRes + interface PreferenceEnum { - val serializedName: String + /** + * True to hide this option or false (default) to display. + */ + val hidden: Boolean get() = false + + /** + * The id of the name resource or -1 for "none". + */ + @get:StringRes + val nameRes: Int + + /** + * The name used to store the preference or null to use the name property. + */ + val serializedName: String? get() = null } diff --git a/preference/src/main/kotlin/store/SharedPreferenceStore.kt b/preference/src/main/kotlin/store/SharedPreferenceStore.kt index 3f0c3fcf5..856fe5b11 100644 --- a/preference/src/main/kotlin/store/SharedPreferenceStore.kt +++ b/preference/src/main/kotlin/store/SharedPreferenceStore.kt @@ -70,7 +70,7 @@ abstract class SharedPreferenceStore( override fun > setEnum(preference: Preference<*>, value: Enum) = setString(preference.key, when (value) { - is PreferenceEnum -> value.serializedName + is PreferenceEnum -> value.serializedName ?: value.toString() else -> value.toString() })