diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ActiveServerProvider.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ActiveServerProvider.kt index 5e3cc2d0..d7b50e7a 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ActiveServerProvider.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ActiveServerProvider.kt @@ -245,8 +245,7 @@ class ActiveServerProvider( if (isOffline()) { return false } - val preferences = Settings.preferences - return preferences.getBoolean(Constants.PREFERENCES_KEY_SCROBBLE, false) + return Settings.scrobbleEnabled } /** diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt index 5e90715d..c6cca89b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt @@ -99,36 +99,38 @@ class SettingsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setTitle(this, R.string.menu_settings) - theme = findPreference(Constants.PREFERENCES_KEY_THEME) - maxBitrateWifi = findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_WIFI) - maxBitrateMobile = findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_MOBILE) - cacheSize = findPreference(Constants.PREFERENCES_KEY_CACHE_SIZE) - cacheLocation = findPreference(Constants.PREFERENCES_KEY_CACHE_LOCATION) - preloadCount = findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT) - bufferLength = findPreference(Constants.PREFERENCES_KEY_BUFFER_LENGTH) - incrementTime = findPreference(Constants.PREFERENCES_KEY_INCREMENT_TIME) - networkTimeout = findPreference(Constants.PREFERENCES_KEY_NETWORK_TIMEOUT) - maxAlbums = findPreference(Constants.PREFERENCES_KEY_MAX_ALBUMS) - maxSongs = findPreference(Constants.PREFERENCES_KEY_MAX_SONGS) - maxArtists = findPreference(Constants.PREFERENCES_KEY_MAX_ARTISTS) - defaultArtists = findPreference(Constants.PREFERENCES_KEY_DEFAULT_ARTISTS) - defaultSongs = findPreference(Constants.PREFERENCES_KEY_DEFAULT_SONGS) - defaultAlbums = findPreference(Constants.PREFERENCES_KEY_DEFAULT_ALBUMS) - chatRefreshInterval = findPreference(Constants.PREFERENCES_KEY_CHAT_REFRESH_INTERVAL) - directoryCacheTime = findPreference(Constants.PREFERENCES_KEY_DIRECTORY_CACHE_TIME) - mediaButtonsEnabled = findPreference(Constants.PREFERENCES_KEY_MEDIA_BUTTONS) + theme = findPreference(getString(R.string.setting_key_theme)) + maxBitrateWifi = findPreference(getString(R.string.setting_key_max_bitrate_wifi)) + maxBitrateMobile = findPreference(getString(R.string.setting_key_max_bitrate_mobile)) + cacheSize = findPreference(getString(R.string.setting_key_cache_size)) + cacheLocation = findPreference(getString(R.string.setting_key_cache_location)) + preloadCount = findPreference(getString(R.string.setting_key_preload_count)) + bufferLength = findPreference(getString(R.string.setting_key_buffer_length)) + incrementTime = findPreference(getString(R.string.setting_key_increment_time)) + networkTimeout = findPreference(getString(R.string.setting_key_network_timeout)) + maxAlbums = findPreference(getString(R.string.setting_key_max_albums)) + maxSongs = findPreference(getString(R.string.setting_key_max_songs)) + maxArtists = findPreference(getString(R.string.setting_key_max_artists)) + defaultArtists = findPreference(getString(R.string.setting_key_default_artists)) + defaultSongs = findPreference(getString(R.string.setting_key_default_songs)) + defaultAlbums = findPreference(getString(R.string.setting_key_default_albums)) + chatRefreshInterval = findPreference(getString(R.string.setting_key_chat_refresh_interval)) + directoryCacheTime = findPreference(getString(R.string.setting_key_directory_cache_time)) + mediaButtonsEnabled = findPreference(getString(R.string.setting_key_media_buttons)) sharingDefaultDescription = - findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION) - sharingDefaultGreeting = findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_GREETING) + findPreference(getString(R.string.setting_key_default_share_description)) + sharingDefaultGreeting = + findPreference(getString(R.string.setting_key_default_share_greeting)) sharingDefaultExpiration = - findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION) + findPreference(getString(R.string.setting_key_default_share_expiration)) resumeOnBluetoothDevice = - findPreference(Constants.PREFERENCES_KEY_RESUME_ON_BLUETOOTH_DEVICE) - pauseOnBluetoothDevice = findPreference(Constants.PREFERENCES_KEY_PAUSE_ON_BLUETOOTH_DEVICE) - debugLogToFile = findPreference(Constants.PREFERENCES_KEY_DEBUG_LOG_TO_FILE) - showArtistPicture = findPreference(Constants.PREFERENCES_KEY_SHOW_ARTIST_PICTURE) - useId3TagsOffline = findPreference(Constants.PREFERENCES_KEY_ID3_TAGS_OFFLINE) - customCacheLocation = findPreference(Constants.PREFERENCES_KEY_CUSTOM_CACHE_LOCATION) + findPreference(getString(R.string.setting_key_resume_on_bluetooth_device)) + pauseOnBluetoothDevice = + findPreference(getString(R.string.setting_key_pause_on_bluetooth_device)) + debugLogToFile = findPreference(getString(R.string.setting_key_debug_log_to_file)) + showArtistPicture = findPreference(getString(R.string.setting_key_show_artist_picture)) + useId3TagsOffline = findPreference(getString(R.string.setting_key_id3_tags_offline)) + customCacheLocation = findPreference(getString(R.string.setting_key_custom_cache_location)) sharingDefaultGreeting?.text = shareGreeting @@ -220,22 +222,22 @@ class SettingsFragment : Timber.d("Preference changed: %s", key) update() when (key) { - Constants.PREFERENCES_KEY_HIDE_MEDIA -> { + getString(R.string.setting_key_hide_media) -> { setHideMedia(sharedPreferences.getBoolean(key, false)) } - Constants.PREFERENCES_KEY_DEBUG_LOG_TO_FILE -> { + getString(R.string.setting_key_debug_log_to_file) -> { setDebugLogToFile(sharedPreferences.getBoolean(key, false)) } - Constants.PREFERENCES_KEY_ID3_TAGS -> { + getString(R.string.setting_key_id3_tags) -> { val enabled = sharedPreferences.getBoolean(key, false) showArtistPicture?.isEnabled = enabled useId3TagsOffline?.isEnabled = enabled setupTextColors(enabled) } - Constants.PREFERENCES_KEY_THEME -> { + getString(R.string.setting_key_theme) -> { RxBus.themeChangedEventPublisher.onNext(Unit) } - Constants.PREFERENCES_KEY_CUSTOM_CACHE_LOCATION -> { + getString(R.string.setting_key_custom_cache_location) -> { if (Settings.customCacheLocation) { selectCacheLocation() } else { @@ -360,7 +362,7 @@ class SettingsFragment : private fun setupClearSearchPreference() { val clearSearchPreference = - findPreference(Constants.PREFERENCES_KEY_CLEAR_SEARCH_HISTORY) + findPreference(getString(R.string.setting_key_clear_search_history)) if (clearSearchPreference != null) { clearSearchPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt index b46cb151..f8bc608f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt @@ -190,7 +190,7 @@ class Downloader( } // Fill up active List with waiting tasks - while (activelyDownloading.size < PARALLEL_DOWNLOADS && downloadQueue.size > 0) { + while (activelyDownloading.size < Settings.parallelDownloads && downloadQueue.size > 0) { val task = downloadQueue.remove() activelyDownloading.add(task) startDownloadOnService(task) @@ -355,7 +355,6 @@ class Downloader( } companion object { - const val PARALLEL_DOWNLOADS = 2 const val CHECK_INTERVAL = 5000L } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt index 0f12af49..b8b178fc 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Constants.kt @@ -52,63 +52,14 @@ object Constants { const val CMD_PREVIOUS = "org.moire.ultrasonic.CMD_PREVIOUS" const val CMD_NEXT = "org.moire.ultrasonic.CMD_NEXT" - // Preferences keys. - const val PREFERENCES_KEY_SERVER_INSTANCE = "serverInstanceId" - const val PREFERENCES_KEY_THEME = "theme" - const val PREFERENCES_KEY_THEME_LIGHT = "light" - const val PREFERENCES_KEY_THEME_DARK = "dark" - const val PREFERENCES_KEY_THEME_BLACK = "black" - const val PREFERENCES_KEY_DISPLAY_BITRATE_WITH_ARTIST = "displayBitrateWithArtist" - const val PREFERENCES_KEY_USE_FOLDER_FOR_ALBUM_ARTIST = "useFolderForAlbumArtist" - const val PREFERENCES_KEY_SHOW_TRACK_NUMBER = "showTrackNumber" - const val PREFERENCES_KEY_MAX_BITRATE_WIFI = "maxBitrateWifi" - const val PREFERENCES_KEY_MAX_BITRATE_MOBILE = "maxBitrateMobile" - const val PREFERENCES_KEY_CACHE_SIZE = "cacheSize" - const val PREFERENCES_KEY_CUSTOM_CACHE_LOCATION = "customCacheLocation" - const val PREFERENCES_KEY_CACHE_LOCATION = "cacheLocation" - const val PREFERENCES_KEY_PRELOAD_COUNT = "preloadCount" - const val PREFERENCES_KEY_HIDE_MEDIA = "hideMedia" - const val PREFERENCES_KEY_MEDIA_BUTTONS = "mediaButtons" - const val PREFERENCES_KEY_SCROBBLE = "scrobble" - const val PREFERENCES_KEY_SERVER_SCALING = "serverScaling" - const val PREFERENCES_KEY_WIFI_REQUIRED_FOR_DOWNLOAD = "wifiRequiredForDownload" - const val PREFERENCES_KEY_BUFFER_LENGTH = "bufferLength" - const val PREFERENCES_KEY_NETWORK_TIMEOUT = "networkTimeout" - const val PREFERENCES_KEY_MAX_ALBUMS = "maxAlbums" - const val PREFERENCES_KEY_MAX_SONGS = "maxSongs" - const val PREFERENCES_KEY_MAX_ARTISTS = "maxArtists" - const val PREFERENCES_KEY_DEFAULT_ALBUMS = "defaultAlbums" - const val PREFERENCES_KEY_DEFAULT_SONGS = "defaultSongs" - const val PREFERENCES_KEY_DEFAULT_ARTISTS = "defaultArtists" - const val PREFERENCES_KEY_SHOW_NOW_PLAYING = "showNowPlaying" - const val PREFERENCES_KEY_CLEAR_SEARCH_HISTORY = "clearSearchHistory" - const val PREFERENCES_KEY_DOWNLOAD_TRANSITION = "transitionToDownloadOnPlay" - const val PREFERENCES_KEY_INCREMENT_TIME = "incrementTime" - const val PREFERENCES_KEY_SHOW_NOW_PLAYING_DETAILS = "showNowPlayingDetails" - const val PREFERENCES_KEY_ID3_TAGS = "useId3Tags" - const val PREFERENCES_KEY_ID3_TAGS_OFFLINE = "useId3TagsOffline" - const val PREFERENCES_KEY_SHOW_ARTIST_PICTURE = "showArtistPicture" - const val PREFERENCES_KEY_CHAT_REFRESH_INTERVAL = "chatRefreshInterval" - const val PREFERENCES_KEY_DIRECTORY_CACHE_TIME = "directoryCacheTime" - const val PREFERENCES_KEY_CLEAR_BOOKMARK = "clearBookmark" - const val PREFERENCES_KEY_DISC_SORT = "discAndTrackSort" - const val PREFERENCES_KEY_ASK_FOR_SHARE_DETAILS = "sharingAlwaysAskForDetails" - const val PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION = "sharingDefaultDescription" - const val PREFERENCES_KEY_DEFAULT_SHARE_GREETING = "sharingDefaultGreeting" - const val PREFERENCES_KEY_SHARE_ON_SERVER = "sharingCreateOnServer" - const val PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION = "sharingDefaultExpiration" + // Legacy Preferences keys + // Warning: Don't add any new here! + // Use setting_keys.xml const val PREFERENCES_KEY_USE_FIVE_STAR_RATING = "use_five_star_rating" - const val PREFERENCES_KEY_HARDWARE_OFFLOAD = "use_hw_offload" - const val PREFERENCES_KEY_CATEGORY_NOTIFICATIONS = "notificationsCategory" - const val PREFERENCES_KEY_FIRST_RUN_EXECUTED = "firstRunExecuted" - const val PREFERENCES_KEY_RESUME_ON_BLUETOOTH_DEVICE = "resumeOnBluetoothDevice" - const val PREFERENCES_KEY_PAUSE_ON_BLUETOOTH_DEVICE = "pauseOnBluetoothDevice" - const val PREFERENCES_KEY_DEBUG_LOG_TO_FILE = "debugLogToFile" - const val PREFERENCES_KEY_OVERRIDE_LANGUAGE = "overrideLanguage" - const val PREFERENCES_FIRST_INSTALLED_VERSION = "firstInstalledVersion" const val PREFERENCE_VALUE_ALL = 0 const val PREFERENCE_VALUE_A2DP = 1 const val PREFERENCE_VALUE_DISABLED = 2 + const val FILENAME_PLAYLIST_SER = "downloadstate.ser" const val ALBUM_ART_FILE = "folder.jpeg" const val STARRED = "starred" diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt index 018fa98c..ace620e2 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Settings.kt @@ -22,8 +22,8 @@ object Settings { @JvmStatic var theme by StringSetting( - Constants.PREFERENCES_KEY_THEME, - Constants.PREFERENCES_KEY_THEME_DARK + getKey(R.string.setting_key_theme), + getKey(R.string.setting_key_theme_dark) ) @JvmStatic @@ -40,26 +40,30 @@ object Settings { } } - private var maxWifiBitRate by StringIntSetting(Constants.PREFERENCES_KEY_MAX_BITRATE_WIFI) + private var maxWifiBitRate + by StringIntSetting(getKey(R.string.setting_key_max_bitrate_wifi)) - private var maxMobileBitRate by StringIntSetting(Constants.PREFERENCES_KEY_MAX_BITRATE_MOBILE) + private var maxMobileBitRate + by StringIntSetting(getKey(R.string.setting_key_max_bitrate_mobile)) @JvmStatic val preloadCount: Int get() { val preferences = preferences val preloadCount = - preferences.getString(Constants.PREFERENCES_KEY_PRELOAD_COUNT, "-1")!! + preferences.getString(getKey(R.string.setting_key_preload_count), "-1")!! .toInt() return if (preloadCount == -1) Int.MAX_VALUE else preloadCount } + val parallelDownloads by IntSetting(getKey(R.string.setting_key_parallel_downloads), 3) + @JvmStatic val cacheSizeMB: Int get() { val preferences = preferences val cacheSize = preferences.getString( - Constants.PREFERENCES_KEY_CACHE_SIZE, + getKey(R.string.setting_key_cache_size), "-1" )!!.toInt() return if (cacheSize == -1) Int.MAX_VALUE else cacheSize @@ -67,139 +71,141 @@ object Settings { @JvmStatic var customCacheLocation by BooleanSetting( - Constants.PREFERENCES_KEY_CUSTOM_CACHE_LOCATION, + getKey(R.string.setting_key_custom_cache_location), false ) @JvmStatic var cacheLocationUri by StringSetting( - Constants.PREFERENCES_KEY_CACHE_LOCATION, "" + getKey(R.string.setting_key_cache_location), "" ) @JvmStatic var isWifiRequiredForDownload by BooleanSetting( - Constants.PREFERENCES_KEY_WIFI_REQUIRED_FOR_DOWNLOAD, + getKey(R.string.setting_key_wifi_required_for_download), false ) @JvmStatic - var shareOnServer by BooleanSetting(Constants.PREFERENCES_KEY_SHARE_ON_SERVER, true) + var shareOnServer by BooleanSetting(getKey(R.string.setting_key_share_on_server), true) @JvmStatic var shouldDisplayBitrateWithArtist by BooleanSetting( - Constants.PREFERENCES_KEY_DISPLAY_BITRATE_WITH_ARTIST, + getKey(R.string.setting_key_display_bitrate_with_artist), true ) @JvmStatic var shouldUseFolderForArtistName - by BooleanSetting(Constants.PREFERENCES_KEY_USE_FOLDER_FOR_ALBUM_ARTIST, false) + by BooleanSetting(getKey(R.string.setting_key_use_folder_for_album_artist), false) @JvmStatic var shouldShowTrackNumber - by BooleanSetting(Constants.PREFERENCES_KEY_SHOW_TRACK_NUMBER, false) + by BooleanSetting(getKey(R.string.setting_key_show_track_number), false) @JvmStatic var defaultAlbums - by StringIntSetting(Constants.PREFERENCES_KEY_DEFAULT_ALBUMS, "5") + by StringIntSetting(getKey(R.string.setting_key_default_albums), "5") @JvmStatic var maxAlbums - by StringIntSetting(Constants.PREFERENCES_KEY_MAX_ALBUMS, "20") + by StringIntSetting(getKey(R.string.setting_key_max_albums), "20") @JvmStatic var defaultSongs - by StringIntSetting(Constants.PREFERENCES_KEY_DEFAULT_SONGS, "10") + by StringIntSetting(getKey(R.string.setting_key_default_songs), "10") @JvmStatic var maxSongs - by StringIntSetting(Constants.PREFERENCES_KEY_MAX_SONGS, "25") + by StringIntSetting(getKey(R.string.setting_key_max_songs), "25") @JvmStatic var maxArtists - by StringIntSetting(Constants.PREFERENCES_KEY_MAX_ARTISTS, "10") + by StringIntSetting(getKey(R.string.setting_key_max_artists), "10") @JvmStatic var defaultArtists - by StringIntSetting(Constants.PREFERENCES_KEY_DEFAULT_ARTISTS, "3") + by StringIntSetting(getKey(R.string.setting_key_default_artists), "3") @JvmStatic var incrementTime - by StringIntSetting(Constants.PREFERENCES_KEY_INCREMENT_TIME, "5") + by StringIntSetting(getKey(R.string.setting_key_increment_time), "5") @JvmStatic var mediaButtonsEnabled - by BooleanSetting(Constants.PREFERENCES_KEY_MEDIA_BUTTONS, true) + by BooleanSetting(getKey(R.string.setting_key_media_buttons), true) var resumePlayOnHeadphonePlug - by BooleanSetting(R.string.setting_keys_resume_play_on_headphones_plug, true) + by BooleanSetting(R.string.setting_key_resume_play_on_headphones_plug, true) @JvmStatic var resumeOnBluetoothDevice by IntSetting( - Constants.PREFERENCES_KEY_RESUME_ON_BLUETOOTH_DEVICE, + getKey(R.string.setting_key_resume_on_bluetooth_device), Constants.PREFERENCE_VALUE_DISABLED ) @JvmStatic var pauseOnBluetoothDevice by IntSetting( - Constants.PREFERENCES_KEY_PAUSE_ON_BLUETOOTH_DEVICE, + getKey(R.string.setting_key_pause_on_bluetooth_device), Constants.PREFERENCE_VALUE_A2DP ) @JvmStatic var showNowPlaying - by BooleanSetting(Constants.PREFERENCES_KEY_SHOW_NOW_PLAYING, true) + by BooleanSetting(getKey(R.string.setting_key_show_now_playing), true) @JvmStatic var shouldTransitionOnPlayback by BooleanSetting( - Constants.PREFERENCES_KEY_DOWNLOAD_TRANSITION, + getKey(R.string.setting_key_download_transition), true ) @JvmStatic var showNowPlayingDetails - by BooleanSetting(Constants.PREFERENCES_KEY_SHOW_NOW_PLAYING_DETAILS, false) + by BooleanSetting(getKey(R.string.setting_key_show_now_playing_details), false) + + var scrobbleEnabled by BooleanSetting(getKey(R.string.setting_key_scrobble), false) // Normally you don't need to use these Settings directly, // use ActiveServerProvider.isID3Enabled() instead @JvmStatic - var shouldUseId3Tags by BooleanSetting(Constants.PREFERENCES_KEY_ID3_TAGS, false) + var shouldUseId3Tags by BooleanSetting(getKey(R.string.setting_key_id3_tags), false) // See comment above. @JvmStatic - var useId3TagsOffline by BooleanSetting(Constants.PREFERENCES_KEY_ID3_TAGS_OFFLINE, false) + var useId3TagsOffline by BooleanSetting(getKey(R.string.setting_key_id3_tags_offline), false) - var activeServer by IntSetting(Constants.PREFERENCES_KEY_SERVER_INSTANCE, -1) + var activeServer by IntSetting(getKey(R.string.setting_key_server_instance), -1) - var serverScaling by BooleanSetting(Constants.PREFERENCES_KEY_SERVER_SCALING, false) + var serverScaling by BooleanSetting(getKey(R.string.setting_key_server_scaling), false) - var firstRunExecuted by BooleanSetting(Constants.PREFERENCES_KEY_FIRST_RUN_EXECUTED, false) + var firstRunExecuted by BooleanSetting(getKey(R.string.setting_key_first_run_executed), false) val shouldShowArtistPicture - by BooleanSetting(Constants.PREFERENCES_KEY_SHOW_ARTIST_PICTURE, false) + by BooleanSetting(getKey(R.string.setting_key_show_artist_picture), false) @JvmStatic var chatRefreshInterval by StringIntSetting( - Constants.PREFERENCES_KEY_CHAT_REFRESH_INTERVAL, + getKey(R.string.setting_key_chat_refresh_interval), "5000" ) var directoryCacheTime by StringIntSetting( - Constants.PREFERENCES_KEY_DIRECTORY_CACHE_TIME, + getKey(R.string.setting_key_directory_cache_time), "300" ) var shouldSortByDisc - by BooleanSetting(Constants.PREFERENCES_KEY_DISC_SORT, false) + by BooleanSetting(getKey(R.string.setting_key_disc_sort), false) var shouldClearBookmark - by BooleanSetting(Constants.PREFERENCES_KEY_CLEAR_BOOKMARK, false) + by BooleanSetting(getKey(R.string.setting_key_clear_bookmark), false) var shouldAskForShareDetails - by BooleanSetting(Constants.PREFERENCES_KEY_ASK_FOR_SHARE_DETAILS, true) + by BooleanSetting(getKey(R.string.setting_key_ask_for_share_details), true) var defaultShareDescription - by StringSetting(Constants.PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION, "") + by StringSetting(getKey(R.string.setting_key_default_share_description), "") @JvmStatic val shareGreeting: String? @@ -211,13 +217,13 @@ object Settings { context.resources.getString(R.string.common_appname) ) return preferences.getString( - Constants.PREFERENCES_KEY_DEFAULT_SHARE_GREETING, + getKey(R.string.setting_key_default_share_greeting), defaultVal ) } var defaultShareExpiration by StringSetting( - Constants.PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION, + getKey(R.string.setting_key_default_share_expiration), "0" ) @@ -225,7 +231,7 @@ object Settings { get() { val preferences = preferences val preference = - preferences.getString(Constants.PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION, "0")!! + preferences.getString(getKey(R.string.setting_key_default_share_expiration), "0")!! val split = PATTERN.split(preference) if (split.size == 2) { val timeSpanAmount = split[0].toInt() @@ -238,21 +244,27 @@ object Settings { } @JvmStatic - var debugLogToFile by BooleanSetting(Constants.PREFERENCES_KEY_DEBUG_LOG_TO_FILE, false) + var debugLogToFile by BooleanSetting(getKey(R.string.setting_key_debug_log_to_file), false) @JvmStatic val preferences: SharedPreferences get() = PreferenceManager.getDefaultSharedPreferences(Util.appContext()) @JvmStatic - val overrideLanguage by StringSetting(Constants.PREFERENCES_KEY_OVERRIDE_LANGUAGE, "") + val overrideLanguage by StringSetting(getKey(R.string.setting_key_override_language), "") - var useFiveStarRating by BooleanSetting(Constants.PREFERENCES_KEY_USE_FIVE_STAR_RATING, false) + var useFiveStarRating by BooleanSetting( + getKey(R.string.setting_key_use_five_star_rating), + false + ) - var useHwOffload by BooleanSetting(Constants.PREFERENCES_KEY_HARDWARE_OFFLOAD, false) + var useHwOffload by BooleanSetting(getKey(R.string.setting_key_hardware_offload), false) @JvmStatic - var firstInstalledVersion by IntSetting(Constants.PREFERENCES_FIRST_INSTALLED_VERSION, 0) + var firstInstalledVersion by IntSetting( + getKey(R.string.setting_key_first_installed_version), + 0 + ) // TODO: Remove in December 2022 fun migrateFeatureStorage() { @@ -264,8 +276,10 @@ object Settings { return preferences.contains(key) } + fun getKey(key: Int): String { + return appContext.getString(key) + } + private val appContext: Context - get() { - return UApp.applicationContext() - } + get() = UApp.applicationContext() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt index f3e16d44..641b4591 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt @@ -81,17 +81,35 @@ object Util { @JvmStatic fun applyTheme(context: Context?) { + if (context == null) return + val style = getStyleFromSettings(context) + context.setTheme(style) + } + + private fun getStyleFromSettings(context: Context): Int { + // Migration + // TODO: Remove in June 2023 when (Settings.theme.lowercase()) { - Constants.PREFERENCES_KEY_THEME_DARK, "fullscreen" -> { - context!!.setTheme(R.style.UltrasonicTheme_Dark) + Settings.theme = context.getString(R.string.setting_key_theme_dark) } - Constants.PREFERENCES_KEY_THEME_BLACK -> { - context!!.setTheme(R.style.UltrasonicTheme_Black) - } - Constants.PREFERENCES_KEY_THEME_LIGHT, "fullscreenlight" -> { - context!!.setTheme(R.style.UltrasonicTheme_Light) + Settings.theme = context.getString(R.string.setting_key_theme_light) + } + } + + return when (Settings.theme.lowercase()) { + context.getString(R.string.setting_key_theme_dark) -> { + R.style.UltrasonicTheme_Dark + } + context.getString(R.string.setting_key_theme_black) -> { + R.style.UltrasonicTheme_Black + } + context.getString(R.string.setting_key_theme_light) -> { + R.style.UltrasonicTheme_Light + } + else -> { + R.style.UltrasonicTheme_Dark } } } diff --git a/ultrasonic/src/main/res/values/setting_keys.xml b/ultrasonic/src/main/res/values/setting_keys.xml index 3378560d..4fd3551f 100644 --- a/ultrasonic/src/main/res/values/setting_keys.xml +++ b/ultrasonic/src/main/res/values/setting_keys.xml @@ -1,4 +1,57 @@ - playback.resume_play_on_headphones_plug + playback.resume_play_on_headphones_plug + serverInstanceId + theme + light + dark + black + displayBitrateWithArtist + useFolderForAlbumArtist + showTrackNumber + maxBitrateWifi + maxBitrateMobile + cacheSize + customCacheLocation + cacheLocation + preloadCount + parallelDownloads + hideMedia + mediaButtons + scrobble + serverScaling + wifiRequiredForDownload + bufferLength + networkTimeout + maxAlbums + maxSongs + maxArtists + defaultAlbums + defaultSongs + defaultArtists + showNowPlaying + clearSearchHistory + transitionToDownloadOnPlay + incrementTime + showNowPlayingDetails + useId3Tags + useId3TagsOffline + showArtistPicture + chatRefreshInterval + directoryCacheTime + clearBookmark + discAndTrackSort + sharingAlwaysAskForDetails + sharingDefaultDescription + sharingDefaultGreeting + sharingCreateOnServer + sharingDefaultExpiration + use_five_star_rating + use_hw_offload + firstRunExecuted + resumeOnBluetoothDevice + pauseOnBluetoothDevice + debugLogToFile + overrideLanguage + firstInstalledVersion \ No newline at end of file diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 63654d43..0e2a3eb1 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -264,6 +264,7 @@ Resume on headphones insertion App will resume paused playback on wired headphones insertion into device. Songs To Preload + How many song to download in parallel 1 song 10 songs 2 songs diff --git a/ultrasonic/src/main/res/xml/settings.xml b/ultrasonic/src/main/res/xml/settings.xml index 8cd5fea1..68b89ca5 100644 --- a/ultrasonic/src/main/res/xml/settings.xml +++ b/ultrasonic/src/main/res/xml/settings.xml @@ -1,6 +1,8 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + a:title="@string/common.appname"> @@ -93,43 +94,42 @@ a:defaultValue="5000" a:entries="@array/bufferLengthNames" a:entryValues="@array/incrementTimeValues" - a:key="incrementTime" + a:key="@string/setting_key.increment_time" a:title="@string/settings.increment_time" app:iconSpaceReserved="false"/> @@ -138,28 +138,28 @@ a:title="@string/settings.sharing_title" app:iconSpaceReserved="false"> @@ -170,19 +170,19 @@ a:defaultValue="0" a:entries="@array/maxBitrateNames" a:entryValues="@array/maxBitrateValues" - a:key="maxBitrateWifi" + a:key="@string/setting_key.max_bitrate_wifi" a:title="@string/settings.max_bitrate_wifi" app:iconSpaceReserved="false"/> @@ -190,21 +190,21 @@ a:defaultValue="5" a:entries="@array/bufferLengthNames" a:entryValues="@array/bufferLengthValues" - a:key="bufferLength" + a:key="@string/setting_key.buffer_length" a:title="@string/settings.buffer_length" app:iconSpaceReserved="false"/> @@ -215,29 +215,38 @@ a:defaultValue="500" a:entries="@array/cacheSizeNames" a:entryValues="@array/cacheSizeValues" - a:key="cacheSize" + a:key="@string/setting_key.cache_size" a:title="@string/settings.cache_size" app:iconSpaceReserved="false"/> + @@ -248,46 +257,46 @@ a:defaultValue="3" a:entries="@array/searchNames" a:entryValues="@array/searchValues" - a:key="defaultArtists" + a:key="@string/setting_key.default_artists" a:title="@string/settings.default_artists" app:iconSpaceReserved="false"/> @@ -297,13 +306,13 @@ app:iconSpaceReserved="false"> @@ -311,7 +320,7 @@ a:defaultValue="" a:entries="@array/languageNames" a:entryValues="@array/languageValues" - a:key="overrideLanguage" + a:key="@string/setting_key.override_language" a:title="@string/settings.override_language" a:summary="@string/settings.override_language_summary" app:iconSpaceReserved="false"/> @@ -321,7 +330,7 @@ app:iconSpaceReserved="false">