Merge branch 'apo' into 'develop'

Use string references for the setting keys. Also make parallel downloads configurable

See merge request ultrasonic/ultrasonic!785
This commit is contained in:
birdbird 2022-07-11 08:53:41 +00:00
commit cfe16356c9
9 changed files with 244 additions and 198 deletions

View File

@ -245,8 +245,7 @@ class ActiveServerProvider(
if (isOffline()) { if (isOffline()) {
return false return false
} }
val preferences = Settings.preferences return Settings.scrobbleEnabled
return preferences.getBoolean(Constants.PREFERENCES_KEY_SCROBBLE, false)
} }
/** /**

View File

@ -99,36 +99,38 @@ class SettingsFragment :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setTitle(this, R.string.menu_settings) setTitle(this, R.string.menu_settings)
theme = findPreference(Constants.PREFERENCES_KEY_THEME) theme = findPreference(getString(R.string.setting_key_theme))
maxBitrateWifi = findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_WIFI) maxBitrateWifi = findPreference(getString(R.string.setting_key_max_bitrate_wifi))
maxBitrateMobile = findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_MOBILE) maxBitrateMobile = findPreference(getString(R.string.setting_key_max_bitrate_mobile))
cacheSize = findPreference(Constants.PREFERENCES_KEY_CACHE_SIZE) cacheSize = findPreference(getString(R.string.setting_key_cache_size))
cacheLocation = findPreference(Constants.PREFERENCES_KEY_CACHE_LOCATION) cacheLocation = findPreference(getString(R.string.setting_key_cache_location))
preloadCount = findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT) preloadCount = findPreference(getString(R.string.setting_key_preload_count))
bufferLength = findPreference(Constants.PREFERENCES_KEY_BUFFER_LENGTH) bufferLength = findPreference(getString(R.string.setting_key_buffer_length))
incrementTime = findPreference(Constants.PREFERENCES_KEY_INCREMENT_TIME) incrementTime = findPreference(getString(R.string.setting_key_increment_time))
networkTimeout = findPreference(Constants.PREFERENCES_KEY_NETWORK_TIMEOUT) networkTimeout = findPreference(getString(R.string.setting_key_network_timeout))
maxAlbums = findPreference(Constants.PREFERENCES_KEY_MAX_ALBUMS) maxAlbums = findPreference(getString(R.string.setting_key_max_albums))
maxSongs = findPreference(Constants.PREFERENCES_KEY_MAX_SONGS) maxSongs = findPreference(getString(R.string.setting_key_max_songs))
maxArtists = findPreference(Constants.PREFERENCES_KEY_MAX_ARTISTS) maxArtists = findPreference(getString(R.string.setting_key_max_artists))
defaultArtists = findPreference(Constants.PREFERENCES_KEY_DEFAULT_ARTISTS) defaultArtists = findPreference(getString(R.string.setting_key_default_artists))
defaultSongs = findPreference(Constants.PREFERENCES_KEY_DEFAULT_SONGS) defaultSongs = findPreference(getString(R.string.setting_key_default_songs))
defaultAlbums = findPreference(Constants.PREFERENCES_KEY_DEFAULT_ALBUMS) defaultAlbums = findPreference(getString(R.string.setting_key_default_albums))
chatRefreshInterval = findPreference(Constants.PREFERENCES_KEY_CHAT_REFRESH_INTERVAL) chatRefreshInterval = findPreference(getString(R.string.setting_key_chat_refresh_interval))
directoryCacheTime = findPreference(Constants.PREFERENCES_KEY_DIRECTORY_CACHE_TIME) directoryCacheTime = findPreference(getString(R.string.setting_key_directory_cache_time))
mediaButtonsEnabled = findPreference(Constants.PREFERENCES_KEY_MEDIA_BUTTONS) mediaButtonsEnabled = findPreference(getString(R.string.setting_key_media_buttons))
sharingDefaultDescription = sharingDefaultDescription =
findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION) findPreference(getString(R.string.setting_key_default_share_description))
sharingDefaultGreeting = findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_GREETING) sharingDefaultGreeting =
findPreference(getString(R.string.setting_key_default_share_greeting))
sharingDefaultExpiration = sharingDefaultExpiration =
findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION) findPreference(getString(R.string.setting_key_default_share_expiration))
resumeOnBluetoothDevice = resumeOnBluetoothDevice =
findPreference(Constants.PREFERENCES_KEY_RESUME_ON_BLUETOOTH_DEVICE) findPreference(getString(R.string.setting_key_resume_on_bluetooth_device))
pauseOnBluetoothDevice = findPreference(Constants.PREFERENCES_KEY_PAUSE_ON_BLUETOOTH_DEVICE) pauseOnBluetoothDevice =
debugLogToFile = findPreference(Constants.PREFERENCES_KEY_DEBUG_LOG_TO_FILE) findPreference(getString(R.string.setting_key_pause_on_bluetooth_device))
showArtistPicture = findPreference(Constants.PREFERENCES_KEY_SHOW_ARTIST_PICTURE) debugLogToFile = findPreference(getString(R.string.setting_key_debug_log_to_file))
useId3TagsOffline = findPreference(Constants.PREFERENCES_KEY_ID3_TAGS_OFFLINE) showArtistPicture = findPreference(getString(R.string.setting_key_show_artist_picture))
customCacheLocation = findPreference(Constants.PREFERENCES_KEY_CUSTOM_CACHE_LOCATION) useId3TagsOffline = findPreference(getString(R.string.setting_key_id3_tags_offline))
customCacheLocation = findPreference(getString(R.string.setting_key_custom_cache_location))
sharingDefaultGreeting?.text = shareGreeting sharingDefaultGreeting?.text = shareGreeting
@ -220,22 +222,22 @@ class SettingsFragment :
Timber.d("Preference changed: %s", key) Timber.d("Preference changed: %s", key)
update() update()
when (key) { when (key) {
Constants.PREFERENCES_KEY_HIDE_MEDIA -> { getString(R.string.setting_key_hide_media) -> {
setHideMedia(sharedPreferences.getBoolean(key, false)) 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)) setDebugLogToFile(sharedPreferences.getBoolean(key, false))
} }
Constants.PREFERENCES_KEY_ID3_TAGS -> { getString(R.string.setting_key_id3_tags) -> {
val enabled = sharedPreferences.getBoolean(key, false) val enabled = sharedPreferences.getBoolean(key, false)
showArtistPicture?.isEnabled = enabled showArtistPicture?.isEnabled = enabled
useId3TagsOffline?.isEnabled = enabled useId3TagsOffline?.isEnabled = enabled
setupTextColors(enabled) setupTextColors(enabled)
} }
Constants.PREFERENCES_KEY_THEME -> { getString(R.string.setting_key_theme) -> {
RxBus.themeChangedEventPublisher.onNext(Unit) RxBus.themeChangedEventPublisher.onNext(Unit)
} }
Constants.PREFERENCES_KEY_CUSTOM_CACHE_LOCATION -> { getString(R.string.setting_key_custom_cache_location) -> {
if (Settings.customCacheLocation) { if (Settings.customCacheLocation) {
selectCacheLocation() selectCacheLocation()
} else { } else {
@ -360,7 +362,7 @@ class SettingsFragment :
private fun setupClearSearchPreference() { private fun setupClearSearchPreference() {
val clearSearchPreference = val clearSearchPreference =
findPreference<Preference>(Constants.PREFERENCES_KEY_CLEAR_SEARCH_HISTORY) findPreference<Preference>(getString(R.string.setting_key_clear_search_history))
if (clearSearchPreference != null) { if (clearSearchPreference != null) {
clearSearchPreference.onPreferenceClickListener = clearSearchPreference.onPreferenceClickListener =
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {

View File

@ -190,7 +190,7 @@ class Downloader(
} }
// Fill up active List with waiting tasks // 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() val task = downloadQueue.remove()
activelyDownloading.add(task) activelyDownloading.add(task)
startDownloadOnService(task) startDownloadOnService(task)
@ -355,7 +355,6 @@ class Downloader(
} }
companion object { companion object {
const val PARALLEL_DOWNLOADS = 2
const val CHECK_INTERVAL = 5000L const val CHECK_INTERVAL = 5000L
} }

View File

@ -52,63 +52,14 @@ object Constants {
const val CMD_PREVIOUS = "org.moire.ultrasonic.CMD_PREVIOUS" const val CMD_PREVIOUS = "org.moire.ultrasonic.CMD_PREVIOUS"
const val CMD_NEXT = "org.moire.ultrasonic.CMD_NEXT" const val CMD_NEXT = "org.moire.ultrasonic.CMD_NEXT"
// Preferences keys. // Legacy Preferences keys
const val PREFERENCES_KEY_SERVER_INSTANCE = "serverInstanceId" // Warning: Don't add any new here!
const val PREFERENCES_KEY_THEME = "theme" // Use setting_keys.xml
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"
const val PREFERENCES_KEY_USE_FIVE_STAR_RATING = "use_five_star_rating" 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_ALL = 0
const val PREFERENCE_VALUE_A2DP = 1 const val PREFERENCE_VALUE_A2DP = 1
const val PREFERENCE_VALUE_DISABLED = 2 const val PREFERENCE_VALUE_DISABLED = 2
const val FILENAME_PLAYLIST_SER = "downloadstate.ser" const val FILENAME_PLAYLIST_SER = "downloadstate.ser"
const val ALBUM_ART_FILE = "folder.jpeg" const val ALBUM_ART_FILE = "folder.jpeg"
const val STARRED = "starred" const val STARRED = "starred"

View File

@ -22,8 +22,8 @@ object Settings {
@JvmStatic @JvmStatic
var theme by StringSetting( var theme by StringSetting(
Constants.PREFERENCES_KEY_THEME, getKey(R.string.setting_key_theme),
Constants.PREFERENCES_KEY_THEME_DARK getKey(R.string.setting_key_theme_dark)
) )
@JvmStatic @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 @JvmStatic
val preloadCount: Int val preloadCount: Int
get() { get() {
val preferences = preferences val preferences = preferences
val preloadCount = val preloadCount =
preferences.getString(Constants.PREFERENCES_KEY_PRELOAD_COUNT, "-1")!! preferences.getString(getKey(R.string.setting_key_preload_count), "-1")!!
.toInt() .toInt()
return if (preloadCount == -1) Int.MAX_VALUE else preloadCount return if (preloadCount == -1) Int.MAX_VALUE else preloadCount
} }
val parallelDownloads by IntSetting(getKey(R.string.setting_key_parallel_downloads), 3)
@JvmStatic @JvmStatic
val cacheSizeMB: Int val cacheSizeMB: Int
get() { get() {
val preferences = preferences val preferences = preferences
val cacheSize = preferences.getString( val cacheSize = preferences.getString(
Constants.PREFERENCES_KEY_CACHE_SIZE, getKey(R.string.setting_key_cache_size),
"-1" "-1"
)!!.toInt() )!!.toInt()
return if (cacheSize == -1) Int.MAX_VALUE else cacheSize return if (cacheSize == -1) Int.MAX_VALUE else cacheSize
@ -67,139 +71,141 @@ object Settings {
@JvmStatic @JvmStatic
var customCacheLocation by BooleanSetting( var customCacheLocation by BooleanSetting(
Constants.PREFERENCES_KEY_CUSTOM_CACHE_LOCATION, getKey(R.string.setting_key_custom_cache_location),
false false
) )
@JvmStatic @JvmStatic
var cacheLocationUri by StringSetting( var cacheLocationUri by StringSetting(
Constants.PREFERENCES_KEY_CACHE_LOCATION, "" getKey(R.string.setting_key_cache_location), ""
) )
@JvmStatic @JvmStatic
var isWifiRequiredForDownload by BooleanSetting( var isWifiRequiredForDownload by BooleanSetting(
Constants.PREFERENCES_KEY_WIFI_REQUIRED_FOR_DOWNLOAD, getKey(R.string.setting_key_wifi_required_for_download),
false false
) )
@JvmStatic @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 @JvmStatic
var shouldDisplayBitrateWithArtist by BooleanSetting( var shouldDisplayBitrateWithArtist by BooleanSetting(
Constants.PREFERENCES_KEY_DISPLAY_BITRATE_WITH_ARTIST, getKey(R.string.setting_key_display_bitrate_with_artist),
true true
) )
@JvmStatic @JvmStatic
var shouldUseFolderForArtistName 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 @JvmStatic
var shouldShowTrackNumber var shouldShowTrackNumber
by BooleanSetting(Constants.PREFERENCES_KEY_SHOW_TRACK_NUMBER, false) by BooleanSetting(getKey(R.string.setting_key_show_track_number), false)
@JvmStatic @JvmStatic
var defaultAlbums var defaultAlbums
by StringIntSetting(Constants.PREFERENCES_KEY_DEFAULT_ALBUMS, "5") by StringIntSetting(getKey(R.string.setting_key_default_albums), "5")
@JvmStatic @JvmStatic
var maxAlbums var maxAlbums
by StringIntSetting(Constants.PREFERENCES_KEY_MAX_ALBUMS, "20") by StringIntSetting(getKey(R.string.setting_key_max_albums), "20")
@JvmStatic @JvmStatic
var defaultSongs var defaultSongs
by StringIntSetting(Constants.PREFERENCES_KEY_DEFAULT_SONGS, "10") by StringIntSetting(getKey(R.string.setting_key_default_songs), "10")
@JvmStatic @JvmStatic
var maxSongs var maxSongs
by StringIntSetting(Constants.PREFERENCES_KEY_MAX_SONGS, "25") by StringIntSetting(getKey(R.string.setting_key_max_songs), "25")
@JvmStatic @JvmStatic
var maxArtists var maxArtists
by StringIntSetting(Constants.PREFERENCES_KEY_MAX_ARTISTS, "10") by StringIntSetting(getKey(R.string.setting_key_max_artists), "10")
@JvmStatic @JvmStatic
var defaultArtists var defaultArtists
by StringIntSetting(Constants.PREFERENCES_KEY_DEFAULT_ARTISTS, "3") by StringIntSetting(getKey(R.string.setting_key_default_artists), "3")
@JvmStatic @JvmStatic
var incrementTime var incrementTime
by StringIntSetting(Constants.PREFERENCES_KEY_INCREMENT_TIME, "5") by StringIntSetting(getKey(R.string.setting_key_increment_time), "5")
@JvmStatic @JvmStatic
var mediaButtonsEnabled var mediaButtonsEnabled
by BooleanSetting(Constants.PREFERENCES_KEY_MEDIA_BUTTONS, true) by BooleanSetting(getKey(R.string.setting_key_media_buttons), true)
var resumePlayOnHeadphonePlug 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 @JvmStatic
var resumeOnBluetoothDevice by IntSetting( var resumeOnBluetoothDevice by IntSetting(
Constants.PREFERENCES_KEY_RESUME_ON_BLUETOOTH_DEVICE, getKey(R.string.setting_key_resume_on_bluetooth_device),
Constants.PREFERENCE_VALUE_DISABLED Constants.PREFERENCE_VALUE_DISABLED
) )
@JvmStatic @JvmStatic
var pauseOnBluetoothDevice by IntSetting( var pauseOnBluetoothDevice by IntSetting(
Constants.PREFERENCES_KEY_PAUSE_ON_BLUETOOTH_DEVICE, getKey(R.string.setting_key_pause_on_bluetooth_device),
Constants.PREFERENCE_VALUE_A2DP Constants.PREFERENCE_VALUE_A2DP
) )
@JvmStatic @JvmStatic
var showNowPlaying var showNowPlaying
by BooleanSetting(Constants.PREFERENCES_KEY_SHOW_NOW_PLAYING, true) by BooleanSetting(getKey(R.string.setting_key_show_now_playing), true)
@JvmStatic @JvmStatic
var shouldTransitionOnPlayback by BooleanSetting( var shouldTransitionOnPlayback by BooleanSetting(
Constants.PREFERENCES_KEY_DOWNLOAD_TRANSITION, getKey(R.string.setting_key_download_transition),
true true
) )
@JvmStatic @JvmStatic
var showNowPlayingDetails 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, // Normally you don't need to use these Settings directly,
// use ActiveServerProvider.isID3Enabled() instead // use ActiveServerProvider.isID3Enabled() instead
@JvmStatic @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. // See comment above.
@JvmStatic @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 val shouldShowArtistPicture
by BooleanSetting(Constants.PREFERENCES_KEY_SHOW_ARTIST_PICTURE, false) by BooleanSetting(getKey(R.string.setting_key_show_artist_picture), false)
@JvmStatic @JvmStatic
var chatRefreshInterval by StringIntSetting( var chatRefreshInterval by StringIntSetting(
Constants.PREFERENCES_KEY_CHAT_REFRESH_INTERVAL, getKey(R.string.setting_key_chat_refresh_interval),
"5000" "5000"
) )
var directoryCacheTime by StringIntSetting( var directoryCacheTime by StringIntSetting(
Constants.PREFERENCES_KEY_DIRECTORY_CACHE_TIME, getKey(R.string.setting_key_directory_cache_time),
"300" "300"
) )
var shouldSortByDisc var shouldSortByDisc
by BooleanSetting(Constants.PREFERENCES_KEY_DISC_SORT, false) by BooleanSetting(getKey(R.string.setting_key_disc_sort), false)
var shouldClearBookmark var shouldClearBookmark
by BooleanSetting(Constants.PREFERENCES_KEY_CLEAR_BOOKMARK, false) by BooleanSetting(getKey(R.string.setting_key_clear_bookmark), false)
var shouldAskForShareDetails 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 var defaultShareDescription
by StringSetting(Constants.PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION, "") by StringSetting(getKey(R.string.setting_key_default_share_description), "")
@JvmStatic @JvmStatic
val shareGreeting: String? val shareGreeting: String?
@ -211,13 +217,13 @@ object Settings {
context.resources.getString(R.string.common_appname) context.resources.getString(R.string.common_appname)
) )
return preferences.getString( return preferences.getString(
Constants.PREFERENCES_KEY_DEFAULT_SHARE_GREETING, getKey(R.string.setting_key_default_share_greeting),
defaultVal defaultVal
) )
} }
var defaultShareExpiration by StringSetting( var defaultShareExpiration by StringSetting(
Constants.PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION, getKey(R.string.setting_key_default_share_expiration),
"0" "0"
) )
@ -225,7 +231,7 @@ object Settings {
get() { get() {
val preferences = preferences val preferences = preferences
val preference = 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) val split = PATTERN.split(preference)
if (split.size == 2) { if (split.size == 2) {
val timeSpanAmount = split[0].toInt() val timeSpanAmount = split[0].toInt()
@ -238,21 +244,27 @@ object Settings {
} }
@JvmStatic @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 @JvmStatic
val preferences: SharedPreferences val preferences: SharedPreferences
get() = PreferenceManager.getDefaultSharedPreferences(Util.appContext()) get() = PreferenceManager.getDefaultSharedPreferences(Util.appContext())
@JvmStatic @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 @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 // TODO: Remove in December 2022
fun migrateFeatureStorage() { fun migrateFeatureStorage() {
@ -264,8 +276,10 @@ object Settings {
return preferences.contains(key) return preferences.contains(key)
} }
fun getKey(key: Int): String {
return appContext.getString(key)
}
private val appContext: Context private val appContext: Context
get() { get() = UApp.applicationContext()
return UApp.applicationContext()
}
} }

View File

@ -81,17 +81,35 @@ object Util {
@JvmStatic @JvmStatic
fun applyTheme(context: Context?) { 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()) { when (Settings.theme.lowercase()) {
Constants.PREFERENCES_KEY_THEME_DARK,
"fullscreen" -> { "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" -> { "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
} }
} }
} }

View File

@ -1,4 +1,57 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="setting_keys.resume_play_on_headphones_plug" translatable="false">playback.resume_play_on_headphones_plug</string> <string name="setting_key.resume_play_on_headphones_plug" translatable="false">playback.resume_play_on_headphones_plug</string>
<string name="setting_key.server_instance" translatable="false">serverInstanceId</string>
<string name="setting_key.theme" translatable="false">theme</string>
<string name="setting_key.theme_light" translatable="false">light</string>
<string name="setting_key.theme_dark" translatable="false">dark</string>
<string name="setting_key.theme_black" translatable="false">black</string>
<string name="setting_key.display_bitrate_with_artist" translatable="false">displayBitrateWithArtist</string>
<string name="setting_key.use_folder_for_album_artist" translatable="false">useFolderForAlbumArtist</string>
<string name="setting_key.show_track_number" translatable="false">showTrackNumber</string>
<string name="setting_key.max_bitrate_wifi" translatable="false">maxBitrateWifi</string>
<string name="setting_key.max_bitrate_mobile" translatable="false">maxBitrateMobile</string>
<string name="setting_key.cache_size" translatable="false">cacheSize</string>
<string name="setting_key.custom_cache_location" translatable="false">customCacheLocation</string>
<string name="setting_key.cache_location" translatable="false">cacheLocation</string>
<string name="setting_key.preload_count" translatable="false">preloadCount</string>
<string name="setting_key.parallel_downloads" translatable="false">parallelDownloads</string>
<string name="setting_key.hide_media" translatable="false">hideMedia</string>
<string name="setting_key.media_buttons" translatable="false">mediaButtons</string>
<string name="setting_key.scrobble" translatable="false">scrobble</string>
<string name="setting_key.server_scaling" translatable="false">serverScaling</string>
<string name="setting_key.wifi_required_for_download" translatable="false">wifiRequiredForDownload</string>
<string name="setting_key.buffer_length" translatable="false">bufferLength</string>
<string name="setting_key.network_timeout" translatable="false">networkTimeout</string>
<string name="setting_key.max_albums" translatable="false">maxAlbums</string>
<string name="setting_key.max_songs" translatable="false">maxSongs</string>
<string name="setting_key.max_artists" translatable="false">maxArtists</string>
<string name="setting_key.default_albums" translatable="false">defaultAlbums</string>
<string name="setting_key.default_songs" translatable="false">defaultSongs</string>
<string name="setting_key.default_artists" translatable="false">defaultArtists</string>
<string name="setting_key.show_now_playing" translatable="false">showNowPlaying</string>
<string name="setting_key.clear_search_history" translatable="false">clearSearchHistory</string>
<string name="setting_key.download_transition" translatable="false">transitionToDownloadOnPlay</string>
<string name="setting_key.increment_time" translatable="false">incrementTime</string>
<string name="setting_key.show_now_playing_details" translatable="false">showNowPlayingDetails</string>
<string name="setting_key.id3_tags" translatable="false">useId3Tags</string>
<string name="setting_key.id3_tags_offline" translatable="false">useId3TagsOffline</string>
<string name="setting_key.show_artist_picture" translatable="false">showArtistPicture</string>
<string name="setting_key.chat_refresh_interval" translatable="false">chatRefreshInterval</string>
<string name="setting_key.directory_cache_time" translatable="false">directoryCacheTime</string>
<string name="setting_key.clear_bookmark" translatable="false">clearBookmark</string>
<string name="setting_key.disc_sort" translatable="false">discAndTrackSort</string>
<string name="setting_key.ask_for_share_details" translatable="false">sharingAlwaysAskForDetails</string>
<string name="setting_key.default_share_description" translatable="false">sharingDefaultDescription</string>
<string name="setting_key.default_share_greeting" translatable="false">sharingDefaultGreeting</string>
<string name="setting_key.share_on_server" translatable="false">sharingCreateOnServer</string>
<string name="setting_key.default_share_expiration" translatable="false">sharingDefaultExpiration</string>
<string name="setting_key.use_five_star_rating" translatable="false">use_five_star_rating</string>
<string name="setting_key.hardware_offload" translatable="false">use_hw_offload</string>
<string name="setting_key.first_run_executed" translatable="false">firstRunExecuted</string>
<string name="setting_key.resume_on_bluetooth_device" translatable="false">resumeOnBluetoothDevice</string>
<string name="setting_key.pause_on_bluetooth_device" translatable="false">pauseOnBluetoothDevice</string>
<string name="setting_key.debug_log_to_file" translatable="false">debugLogToFile</string>
<string name="setting_key.override_language" translatable="false">overrideLanguage</string>
<string name="setting_key.first_installed_version" translatable="false">firstInstalledVersion</string>
</resources> </resources>

View File

@ -264,6 +264,7 @@
<string name="settings.playback.resume_play_on_headphones_plug.title">Resume on headphones insertion</string> <string name="settings.playback.resume_play_on_headphones_plug.title">Resume on headphones insertion</string>
<string name="settings.playback.resume_play_on_headphones_plug.summary">App will resume paused playback on wired headphones insertion into device.</string> <string name="settings.playback.resume_play_on_headphones_plug.summary">App will resume paused playback on wired headphones insertion into device.</string>
<string name="settings.preload">Songs To Preload</string> <string name="settings.preload">Songs To Preload</string>
<string name="settings.parallel_downloads">How many song to download in parallel</string>
<string name="settings.preload_1">1 song</string> <string name="settings.preload_1">1 song</string>
<string name="settings.preload_10">10 songs</string> <string name="settings.preload_10">10 songs</string>
<string name="settings.preload_2">2 songs</string> <string name="settings.preload_2">2 songs</string>

View File

@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:a="http://schemas.android.com/apk/res/android" <PreferenceScreen xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" a:title="@string/common.appname"> xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
a:title="@string/common.appname">
<PreferenceCategory <PreferenceCategory
a:title="@string/settings.appearance_title" a:title="@string/settings.appearance_title"
@ -9,83 +11,82 @@
a:defaultValue="@string/preferences_key_theme_dark" a:defaultValue="@string/preferences_key_theme_dark"
a:entries="@array/themeNames" a:entries="@array/themeNames"
a:entryValues="@array/themeValues" a:entryValues="@array/themeValues"
a:key="theme" a:key="@string/setting_key.theme"
a:title="@string/settings.theme_title" a:title="@string/settings.theme_title"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="serverScaling" a:key="@string/setting_key.server_scaling"
a:summary="@string/settings.server_scaling_summary" a:summary="@string/settings.server_scaling_summary"
a:title="@string/settings.server_scaling_title" a:title="@string/settings.server_scaling_title"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="displayBitrateWithArtist" a:key="@string/setting_key.display_bitrate_with_artist"
a:summary="@string/settings.display_bitrate_summary" a:summary="@string/settings.display_bitrate_summary"
a:title="@string/settings.display_bitrate" a:title="@string/settings.display_bitrate"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="useFolderForAlbumArtist" a:key="@string/setting_key.use_folder_for_album_artist"
a:summary="@string/settings.use_folder_for_album_artist_summary" a:summary="@string/settings.use_folder_for_album_artist_summary"
a:title="@string/settings.use_folder_for_album_artist" a:title="@string/settings.use_folder_for_album_artist"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="showTrackNumber" a:key="@string/setting_key.show_track_number"
a:summary="@string/settings.show_track_number_summary" a:summary="@string/settings.show_track_number_summary"
a:title="@string/settings.show_track_number" a:title="@string/settings.show_track_number"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="discAndTrackSort" a:key="@string/setting_key.disc_sort"
a:summary="@string/settings.disc_sort_summary" a:summary="@string/settings.disc_sort_summary"
a:title="@string/settings.disc_sort" a:title="@string/settings.disc_sort"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
a:title="@string/settings.playback_control_title" a:title="@string/settings.playback_control_title"
a:key="playbackControlSettings"
app:iconSpaceReserved="false"> app:iconSpaceReserved="false">
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="showNowPlayingDetails" a:key="@string/setting_key.show_now_playing_details"
a:summary="@string/settings.show_now_playing_details_summary" a:summary="@string/settings.show_now_playing_details_summary"
a:title="@string/settings.show_now_playing_details" a:title="@string/settings.show_now_playing_details"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="useId3Tags" a:key="@string/setting_key.id3_tags"
a:summary="@string/settings.use_id3_summary" a:summary="@string/settings.use_id3_summary"
a:title="@string/settings.use_id3" a:title="@string/settings.use_id3"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="useId3TagsOffline" a:key="@string/setting_key.id3_tags_offline"
a:summary="@string/settings.use_id3_offline_summary" a:summary="@string/settings.use_id3_offline_summary"
a:title="@string/settings.use_id3_offline" a:title="@string/settings.use_id3_offline"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="showArtistPicture" a:key="@string/setting_key.show_artist_picture"
a:summary="@string/settings.show_artist_picture_summary" a:summary="@string/settings.show_artist_picture_summary"
a:title="@string/settings.show_artist_picture" a:title="@string/settings.show_artist_picture"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="mediaButtons" a:key="@string/setting_key.media_buttons"
a:summary="@string/settings.media_button_summary" a:summary="@string/settings.media_button_summary"
a:title="@string/settings.media_button_title" a:title="@string/settings.media_button_title"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="transitionToDownloadOnPlay" a:key="@string/setting_key.download_transition"
a:summary="@string/settings.download_transition_summary" a:summary="@string/settings.download_transition_summary"
a:title="@string/settings.download_transition" a:title="@string/settings.download_transition"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="clearBookmark" a:key="@string/setting_key.clear_bookmark"
a:summary="@string/settings.clear_bookmark_summary" a:summary="@string/settings.clear_bookmark_summary"
a:title="@string/settings.clear_bookmark" a:title="@string/settings.clear_bookmark"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
@ -93,43 +94,42 @@
a:defaultValue="5000" a:defaultValue="5000"
a:entries="@array/bufferLengthNames" a:entries="@array/bufferLengthNames"
a:entryValues="@array/incrementTimeValues" a:entryValues="@array/incrementTimeValues"
a:key="incrementTime" a:key="@string/setting_key.increment_time"
a:title="@string/settings.increment_time" a:title="@string/settings.increment_time"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="@string/setting_keys.resume_play_on_headphones_plug" a:key="@string/setting_key.resume_play_on_headphones_plug"
a:title="@string/settings.playback.resume_play_on_headphones_plug.title" a:title="@string/settings.playback.resume_play_on_headphones_plug.title"
a:summary="@string/settings.playback.resume_play_on_headphones_plug.summary" a:summary="@string/settings.playback.resume_play_on_headphones_plug.summary"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<Preference <Preference
a:key="resumeOnBluetoothDevice" a:key="@string/setting_key.resume_on_bluetooth_device"
a:title="@string/settings.playback.resume_on_bluetooth_device" a:title="@string/settings.playback.resume_on_bluetooth_device"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<Preference <Preference
a:key="pauseOnBluetoothDevice" a:key="@string/setting_key.pause_on_bluetooth_device"
a:title="@string/settings.playback.pause_on_bluetooth_device" a:title="@string/settings.playback.pause_on_bluetooth_device"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="use_five_star_rating" a:key="@string/setting_key.use_five_star_rating"
a:summary="@string/settings.five_star_rating_description" a:summary="@string/settings.five_star_rating_description"
a:title="@string/settings.five_star_rating_title" a:title="@string/settings.five_star_rating_title"
app:iconSpaceReserved="false" /> app:iconSpaceReserved="false" />
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="use_hw_offload" a:key="@string/setting_key.hardware_offload"
a:summary="@string/settings.use_hw_offload_description" a:summary="@string/settings.use_hw_offload_description"
a:title="@string/settings.use_hw_offload_title" a:title="@string/settings.use_hw_offload_title"
app:iconSpaceReserved="false" /> app:iconSpaceReserved="false" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
a:title="@string/settings.notifications_title" a:title="@string/settings.notifications_title"
a:key="notificationsCategory"
app:iconSpaceReserved="false"> app:iconSpaceReserved="false">
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="showNowPlaying" a:key="@string/setting_key.show_now_playing"
a:summary="@string/settings.show_now_playing_summary" a:summary="@string/settings.show_now_playing_summary"
a:title="@string/settings.show_now_playing" a:title="@string/settings.show_now_playing"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
@ -138,28 +138,28 @@
a:title="@string/settings.sharing_title" a:title="@string/settings.sharing_title"
app:iconSpaceReserved="false"> app:iconSpaceReserved="false">
<EditTextPreference <EditTextPreference
a:key="sharingDefaultGreeting" a:key="@string/setting_key.default_share_greeting"
a:title="@string/settings.share_greeting_default" a:title="@string/settings.share_greeting_default"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="sharingCreateOnServer" a:key="@string/setting_key.share_on_server"
a:title="@string/share_on_server" a:title="@string/share_on_server"
a:summary="@string/settings.share_on_server_summary" a:summary="@string/settings.share_on_server_summary"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="true" a:defaultValue="true"
a:key="sharingAlwaysAskForDetails" a:key="@string/setting_key.ask_for_share_details"
a:summary="@string/settings.sharing_always_ask_for_details_summary" a:summary="@string/settings.sharing_always_ask_for_details_summary"
a:title="@string/settings.sharing_always_ask_for_details" a:title="@string/settings.sharing_always_ask_for_details"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<EditTextPreference <EditTextPreference
a:key="sharingDefaultDescription" a:key="@string/setting_key.default_share_description"
a:title="@string/settings.share_description_default" a:title="@string/settings.share_description_default"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<org.moire.ultrasonic.util.TimeSpanPreference <org.moire.ultrasonic.util.TimeSpanPreference
a:defaultValue="0" a:defaultValue="0"
a:key="sharingDefaultExpiration" a:key="@string/setting_key.default_share_expiration"
a:title="@string/settings.share_expiration_default" a:title="@string/settings.share_expiration_default"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
</PreferenceCategory> </PreferenceCategory>
@ -170,19 +170,19 @@
a:defaultValue="0" a:defaultValue="0"
a:entries="@array/maxBitrateNames" a:entries="@array/maxBitrateNames"
a:entryValues="@array/maxBitrateValues" a:entryValues="@array/maxBitrateValues"
a:key="maxBitrateWifi" a:key="@string/setting_key.max_bitrate_wifi"
a:title="@string/settings.max_bitrate_wifi" a:title="@string/settings.max_bitrate_wifi"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="0" a:defaultValue="0"
a:entries="@array/maxBitrateNames" a:entries="@array/maxBitrateNames"
a:entryValues="@array/maxBitrateValues" a:entryValues="@array/maxBitrateValues"
a:key="maxBitrateMobile" a:key="@string/setting_key.max_bitrate_mobile"
a:title="@string/settings.max_bitrate_mobile" a:title="@string/settings.max_bitrate_mobile"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="wifiRequiredForDownload" a:key="@string/setting_key.wifi_required_for_download"
a:summary="@string/settings.wifi_required_summary" a:summary="@string/settings.wifi_required_summary"
a:title="@string/settings.wifi_required_title" a:title="@string/settings.wifi_required_title"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
@ -190,21 +190,21 @@
a:defaultValue="5" a:defaultValue="5"
a:entries="@array/bufferLengthNames" a:entries="@array/bufferLengthNames"
a:entryValues="@array/bufferLengthValues" a:entryValues="@array/bufferLengthValues"
a:key="bufferLength" a:key="@string/setting_key.buffer_length"
a:title="@string/settings.buffer_length" a:title="@string/settings.buffer_length"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="15000" a:defaultValue="15000"
a:entries="@array/networkTimeoutNames" a:entries="@array/networkTimeoutNames"
a:entryValues="@array/networkTimeoutValues" a:entryValues="@array/networkTimeoutValues"
a:key="networkTimeout" a:key="@string/setting_key.network_timeout"
a:title="@string/settings.network_timeout" a:title="@string/settings.network_timeout"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="5000" a:defaultValue="5000"
a:entries="@array/chatRefreshNames" a:entries="@array/chatRefreshNames"
a:entryValues="@array/chatRefreshValues" a:entryValues="@array/chatRefreshValues"
a:key="chatRefreshInterval" a:key="@string/setting_key.chat_refresh_interval"
a:title="@string/settings.chat_refresh" a:title="@string/settings.chat_refresh"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
</PreferenceCategory> </PreferenceCategory>
@ -215,29 +215,38 @@
a:defaultValue="500" a:defaultValue="500"
a:entries="@array/cacheSizeNames" a:entries="@array/cacheSizeNames"
a:entryValues="@array/cacheSizeValues" a:entryValues="@array/cacheSizeValues"
a:key="cacheSize" a:key="@string/setting_key.cache_size"
a:title="@string/settings.cache_size" a:title="@string/settings.cache_size"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:key="customCacheLocation" a:key="@string/setting_key.custom_cache_location"
a:title="@string/settings.custom_cache_location" a:title="@string/settings.custom_cache_location"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<Preference <Preference
a:key="cacheLocation" a:key="@string/setting_key.cache_location"
a:title="@string/settings.cache_location" a:title="@string/settings.cache_location"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="3" a:defaultValue="3"
a:entries="@array/preloadCountNames" a:entries="@array/preloadCountNames"
a:entryValues="@array/preloadCountValues" a:entryValues="@array/preloadCountValues"
a:key="preloadCount" a:key="@string/setting_key.preload_count"
a:title="@string/settings.preload" a:title="@string/settings.preload"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<SeekBarPreference
a:min="1"
a:defaultValue="3"
a:max="10"
app:showSeekBarValue="true"
a:key="@string/setting_key.parallel_downloads"
a:title="@string/settings.parallel_downloads"
app:iconSpaceReserved="false"
tools:ignore="UnusedAttribute" />
<ListPreference <ListPreference
a:defaultValue="300" a:defaultValue="300"
a:entries="@array/directoryCacheTimeNames" a:entries="@array/directoryCacheTimeNames"
a:entryValues="@array/directoryCacheTimeValues" a:entryValues="@array/directoryCacheTimeValues"
a:key="directoryCacheTime" a:key="@string/setting_key.directory_cache_time"
a:title="@string/settings.directory_cache_time" a:title="@string/settings.directory_cache_time"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
</PreferenceCategory> </PreferenceCategory>
@ -248,46 +257,46 @@
a:defaultValue="3" a:defaultValue="3"
a:entries="@array/searchNames" a:entries="@array/searchNames"
a:entryValues="@array/searchValues" a:entryValues="@array/searchValues"
a:key="defaultArtists" a:key="@string/setting_key.default_artists"
a:title="@string/settings.default_artists" a:title="@string/settings.default_artists"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="10" a:defaultValue="10"
a:entries="@array/searchNames" a:entries="@array/searchNames"
a:entryValues="@array/searchValues" a:entryValues="@array/searchValues"
a:key="maxArtists" a:key="@string/setting_key.max_artists"
a:title="@string/settings.max_artists" a:title="@string/settings.max_artists"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="5" a:defaultValue="5"
a:entries="@array/searchNames" a:entries="@array/searchNames"
a:entryValues="@array/searchValues" a:entryValues="@array/searchValues"
a:key="defaultAlbums" a:key="@string/setting_key.default_albums"
a:title="@string/settings.default_albums" a:title="@string/settings.default_albums"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="20" a:defaultValue="20"
a:entries="@array/searchNames" a:entries="@array/searchNames"
a:entryValues="@array/searchValues" a:entryValues="@array/searchValues"
a:key="maxAlbums" a:key="@string/setting_key.max_albums"
a:title="@string/settings.max_albums" a:title="@string/settings.max_albums"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="10" a:defaultValue="10"
a:entries="@array/searchNames" a:entries="@array/searchNames"
a:entryValues="@array/searchValues" a:entryValues="@array/searchValues"
a:key="defaultSongs" a:key="@string/setting_key.default_songs"
a:title="@string/settings.default_songs" a:title="@string/settings.default_songs"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<ListPreference <ListPreference
a:defaultValue="25" a:defaultValue="25"
a:entries="@array/searchNames" a:entries="@array/searchNames"
a:entryValues="@array/searchValues" a:entryValues="@array/searchValues"
a:key="maxSongs" a:key="@string/setting_key.max_songs"
a:title="@string/settings.max_songs" a:title="@string/settings.max_songs"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<Preference <Preference
a:key="clearSearchHistory" a:key="@string/setting_key.clear_search_history"
a:persistent="false" a:persistent="false"
a:title="@string/settings.clear_search_history" a:title="@string/settings.clear_search_history"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
@ -297,13 +306,13 @@
app:iconSpaceReserved="false"> app:iconSpaceReserved="false">
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="scrobble" a:key="@string/setting_key.scrobble"
a:summary="@string/settings.scrobble_summary" a:summary="@string/settings.scrobble_summary"
a:title="@string/settings.scrobble_title" a:title="@string/settings.scrobble_title"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="hideMedia" a:key="@string/setting_key.hide_media"
a:summary="@string/settings.hide_media_summary" a:summary="@string/settings.hide_media_summary"
a:title="@string/settings.hide_media_title" a:title="@string/settings.hide_media_title"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
@ -311,7 +320,7 @@
a:defaultValue="" a:defaultValue=""
a:entries="@array/languageNames" a:entries="@array/languageNames"
a:entryValues="@array/languageValues" a:entryValues="@array/languageValues"
a:key="overrideLanguage" a:key="@string/setting_key.override_language"
a:title="@string/settings.override_language" a:title="@string/settings.override_language"
a:summary="@string/settings.override_language_summary" a:summary="@string/settings.override_language_summary"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
@ -321,7 +330,7 @@
app:iconSpaceReserved="false"> app:iconSpaceReserved="false">
<CheckBoxPreference <CheckBoxPreference
a:defaultValue="false" a:defaultValue="false"
a:key="debugLogToFile" a:key="@string/setting_key.debug_log_to_file"
a:title="@string/settings.debug.log_to_file" a:title="@string/settings.debug.log_to_file"
a:summary="" a:summary=""
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>