Merge branch 'develop' into ready/LRUCache

This commit is contained in:
Nite 2022-02-05 11:54:38 +01:00 committed by GitHub
commit ca9ba68a5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 84 additions and 66 deletions

View File

@ -0,0 +1,4 @@
Others
- #671: Bump versions.mockito from 4.1.0 to 4.3.1.
- Update translations.

View File

@ -0,0 +1,4 @@
Otros
- #671: Actualizado versions.mockito de 4.1.0 a 4.3.1.
- Traducciones actualizadas.

View File

@ -9,8 +9,8 @@ android {
defaultConfig { defaultConfig {
applicationId "org.moire.ultrasonic" applicationId "org.moire.ultrasonic"
versionCode 99 versionCode 100
versionName "3.0.0" versionName "3.0.1"
minSdkVersion versions.minSdk minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk targetSdkVersion versions.targetSdk

View File

@ -208,8 +208,8 @@ class NavigationActivity : AppCompatActivity() {
selectServerButton?.text = getString(R.string.main_setup_server, activeServer.name) selectServerButton?.text = getString(R.string.main_setup_server, activeServer.name)
else selectServerButton?.text = activeServer.name else selectServerButton?.text = activeServer.name
val foregroundColor = ServerColor.getForegroundColor(this, null) val foregroundColor = ServerColor.getForegroundColor(this, activeServer.color)
val backgroundColor = ServerColor.getBackgroundColor(this, null) val backgroundColor = ServerColor.getBackgroundColor(this, activeServer.color)
if (activeServer.index == 0) if (activeServer.index == 0)
selectServerButton?.icon = selectServerButton?.icon =

View File

@ -108,8 +108,8 @@ internal class ServerRowAdapter(
} }
// Set colors // Set colors
icon?.setTint(ServerColor.getForegroundColor(context, null)) icon?.setTint(ServerColor.getForegroundColor(context, setting?.color))
background?.setTint(ServerColor.getBackgroundColor(context, null)) background?.setTint(ServerColor.getBackgroundColor(context, setting?.color))
// Set the final drawables // Set the final drawables
image?.setImageDrawable(icon) image?.setImageDrawable(icon)

View File

@ -9,7 +9,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
* Room Database to be used to store global data for the whole app. * Room Database to be used to store global data for the whole app.
* This could be settings or data that are not specific to any remote music database * This could be settings or data that are not specific to any remote music database
*/ */
@Database(entities = [ServerSetting::class], version = 3) @Database(entities = [ServerSetting::class], version = 4)
abstract class AppDatabase : RoomDatabase() { abstract class AppDatabase : RoomDatabase() {
/** /**

View File

@ -23,6 +23,7 @@ data class ServerSetting(
@ColumnInfo(name = "index") var index: Int, @ColumnInfo(name = "index") var index: Int,
@ColumnInfo(name = "name") var name: String, @ColumnInfo(name = "name") var name: String,
@ColumnInfo(name = "url") var url: String, @ColumnInfo(name = "url") var url: String,
@ColumnInfo(name = "color") var color: Int? = null,
@ColumnInfo(name = "userName") var userName: String, @ColumnInfo(name = "userName") var userName: String,
@ColumnInfo(name = "password") var password: String, @ColumnInfo(name = "password") var password: String,
@ColumnInfo(name = "jukeboxByDefault") var jukeboxByDefault: Boolean, @ColumnInfo(name = "jukeboxByDefault") var jukeboxByDefault: Boolean,
@ -36,9 +37,9 @@ data class ServerSetting(
@ColumnInfo(name = "podcastSupport") var podcastSupport: Boolean? = null @ColumnInfo(name = "podcastSupport") var podcastSupport: Boolean? = null
) { ) {
constructor() : this ( constructor() : this (
-1, 0, "", "", "", "", false, false, false, null, null -1, 0, "", "", null, "", "", false, false, false, null, null
) )
constructor(name: String, url: String) : this( constructor(name: String, url: String) : this(
-1, 0, name, url, "", "", false, false, false, null, null -1, 0, name, url, null, "", "", false, false, false, null, null
) )
} }

View File

@ -6,13 +6,15 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button import android.widget.Button
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.google.android.material.switchmaterial.SwitchMaterial import com.google.android.material.switchmaterial.SwitchMaterial
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import com.skydoves.colorpickerview.ColorPickerDialog
import com.skydoves.colorpickerview.flag.BubbleFlag
import com.skydoves.colorpickerview.flag.FlagMode
import com.skydoves.colorpickerview.listeners.ColorEnvelopeListener
import java.io.IOException import java.io.IOException
import java.net.MalformedURLException import java.net.MalformedURLException
import java.net.URL import java.net.URL
@ -41,6 +43,8 @@ import org.moire.ultrasonic.util.Util
import retrofit2.Response import retrofit2.Response
import timber.log.Timber import timber.log.Timber
private const val DIALOG_PADDING = 12
/** /**
* Displays a form where server settings can be created / edited * Displays a form where server settings can be created / edited
*/ */
@ -68,8 +72,6 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
private var currentColor: Int = 0 private var currentColor: Int = 0
private var selectedColor: Int? = null private var selectedColor: Int? = null
private var editServerColorText: TextView? = null
@Override @Override
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
Util.applyTheme(this.context) Util.applyTheme(this.context)
@ -97,7 +99,6 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
jukeboxSwitch = view.findViewById(R.id.edit_jukebox) jukeboxSwitch = view.findViewById(R.id.edit_jukebox)
saveButton = view.findViewById(R.id.edit_save) saveButton = view.findViewById(R.id.edit_save)
testButton = view.findViewById(R.id.edit_test) testButton = view.findViewById(R.id.edit_test)
editServerColorText = view.findViewById(R.id.edit_server_color_text)
val index = arguments?.getInt( val index = arguments?.getInt(
EDIT_SERVER_INTENT_INDEX, EDIT_SERVER_INTENT_INDEX,
@ -146,7 +147,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
} else { } else {
// Creating a new server // Creating a new server
FragmentTitle.setTitle(this, R.string.server_editor_new_label) FragmentTitle.setTitle(this, R.string.server_editor_new_label)
// updateColor(null) updateColor(null)
currentServerSetting = ServerSetting() currentServerSetting = ServerSetting()
saveButton!!.setOnClickListener { saveButton!!.setOnClickListener {
if (getFields()) { if (getFields()) {
@ -162,37 +163,33 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
} }
} }
// serverColorImageView!!.setOnClickListener { serverColorImageView!!.setOnClickListener {
// val bubbleFlag = BubbleFlag(context) val bubbleFlag = BubbleFlag(context)
// bubbleFlag.flagMode = FlagMode.LAST bubbleFlag.flagMode = FlagMode.LAST
// ColorPickerDialog.Builder(context).apply { ColorPickerDialog.Builder(context).apply {
// this.colorPickerView.setInitialColor(currentColor) this.colorPickerView.setInitialColor(currentColor)
// this.colorPickerView.flagView = bubbleFlag this.colorPickerView.flagView = bubbleFlag
// } }
// .attachAlphaSlideBar(false) .attachAlphaSlideBar(false)
// .setPositiveButton( .setPositiveButton(
// getString(R.string.common_ok), getString(R.string.common_ok),
// ColorEnvelopeListener { envelope, _ -> ColorEnvelopeListener { envelope, _ ->
// selectedColor = envelope.color selectedColor = envelope.color
// updateColor(envelope.color) updateColor(envelope.color)
// } }
// ) )
// .setNegativeButton(getString(R.string.common_cancel)) { .setNegativeButton(getString(R.string.common_cancel)) {
// dialogInterface, _ -> dialogInterface, _ ->
// dialogInterface.dismiss() dialogInterface.dismiss()
// } }
// .setBottomSpace(DIALOG_PADDING) .setBottomSpace(DIALOG_PADDING)
// .show() .show()
// } }
serverColorImageView?.isVisible = false
editServerColorText?.isVisible = false
} }
@Suppress("unused") private fun updateColor(color: Int?) {
private fun updateColor() {
val image = ContextCompat.getDrawable(requireContext(), R.drawable.thumb_drawable) val image = ContextCompat.getDrawable(requireContext(), R.drawable.thumb_drawable)
currentColor = ServerColor.getBackgroundColor(requireContext(), null) currentColor = ServerColor.getBackgroundColor(requireContext(), color)
image?.setTint(currentColor) image?.setTint(currentColor)
serverColorImageView?.background = image serverColorImageView?.background = image
} }
@ -257,7 +254,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
selfSignedSwitch!!.isChecked = savedInstanceState.getBoolean(::selfSignedSwitch.name) selfSignedSwitch!!.isChecked = savedInstanceState.getBoolean(::selfSignedSwitch.name)
ldapSwitch!!.isChecked = savedInstanceState.getBoolean(::ldapSwitch.name) ldapSwitch!!.isChecked = savedInstanceState.getBoolean(::ldapSwitch.name)
jukeboxSwitch!!.isChecked = savedInstanceState.getBoolean(::jukeboxSwitch.name) jukeboxSwitch!!.isChecked = savedInstanceState.getBoolean(::jukeboxSwitch.name)
// updateColor(savedInstanceState.getInt(::serverColorImageView.name)) updateColor(savedInstanceState.getInt(::serverColorImageView.name))
if (savedInstanceState.containsKey(::selectedColor.name)) if (savedInstanceState.containsKey(::selectedColor.name))
selectedColor = savedInstanceState.getInt(::selectedColor.name) selectedColor = savedInstanceState.getInt(::selectedColor.name)
isInstanceStateSaved = savedInstanceState.getBoolean(::isInstanceStateSaved.name) isInstanceStateSaved = savedInstanceState.getBoolean(::isInstanceStateSaved.name)
@ -276,7 +273,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
selfSignedSwitch!!.isChecked = currentServerSetting!!.allowSelfSignedCertificate selfSignedSwitch!!.isChecked = currentServerSetting!!.allowSelfSignedCertificate
ldapSwitch!!.isChecked = currentServerSetting!!.ldapSupport ldapSwitch!!.isChecked = currentServerSetting!!.ldapSupport
jukeboxSwitch!!.isChecked = currentServerSetting!!.jukeboxByDefault jukeboxSwitch!!.isChecked = currentServerSetting!!.jukeboxByDefault
// updateColor(currentServerSetting!!.color) updateColor(currentServerSetting!!.color)
} }
/** /**
@ -325,7 +322,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
if (isValid) { if (isValid) {
currentServerSetting!!.name = serverNameEditText!!.editText?.text.toString() currentServerSetting!!.name = serverNameEditText!!.editText?.text.toString()
currentServerSetting!!.url = serverAddressEditText!!.editText?.text.toString() currentServerSetting!!.url = serverAddressEditText!!.editText?.text.toString()
// currentServerSetting!!.color = selectedColor currentServerSetting!!.color = selectedColor
currentServerSetting!!.userName = userNameEditText!!.editText?.text.toString() currentServerSetting!!.userName = userNameEditText!!.editText?.text.toString()
currentServerSetting!!.password = passwordEditText!!.editText?.text.toString() currentServerSetting!!.password = passwordEditText!!.editText?.text.toString()
currentServerSetting!!.allowSelfSignedCertificate = selfSignedSwitch!!.isChecked currentServerSetting!!.allowSelfSignedCertificate = selfSignedSwitch!!.isChecked

View File

@ -212,6 +212,7 @@ class ServerSettingsModel(
serverId, serverId,
settings.getString(PREFERENCES_KEY_SERVER_NAME + preferenceId, "")!!, settings.getString(PREFERENCES_KEY_SERVER_NAME + preferenceId, "")!!,
url, url,
null,
userName, userName,
settings.getString(PREFERENCES_KEY_PASSWORD + preferenceId, "")!!, settings.getString(PREFERENCES_KEY_PASSWORD + preferenceId, "")!!,
settings.getBoolean(PREFERENCES_KEY_JUKEBOX_BY_DEFAULT + preferenceId, false), settings.getBoolean(PREFERENCES_KEY_JUKEBOX_BY_DEFAULT + preferenceId, false),

View File

@ -29,14 +29,14 @@
<string name="chat.send_a_message">Nachricht senden</string> <string name="chat.send_a_message">Nachricht senden</string>
<string name="common.album">Album</string> <string name="common.album">Album</string>
<string name="common.appname">Ultrasonic</string> <string name="common.appname">Ultrasonic</string>
<string name="common.artist">Künstler*in</string> <string name="common.artist">Künstler</string>
<string name="common.cancel">Abbrechen</string> <string name="common.cancel">Abbrechen</string>
<string name="common.comment">Kommentar</string> <string name="common.comment">Kommentar</string>
<string name="common.confirm">Bestätigen</string> <string name="common.confirm">Bestätigen</string>
<string name="common.delete">Löschen</string> <string name="common.delete">Löschen</string>
<string name="common.download">Herunterladen</string> <string name="common.download">Herunterladen</string>
<string name="common.info">Details</string> <string name="common.info">Details</string>
<string name="common.multiple_genres">Mehrere Genre</string> <string name="common.multiple_genres">Mehrere Genres</string>
<string name="common.name">Name</string> <string name="common.name">Name</string>
<string name="common.ok">OK</string> <string name="common.ok">OK</string>
<string name="common.pin">Anheften</string> <string name="common.pin">Anheften</string>
@ -44,15 +44,14 @@
<string name="common.play">Abspielen</string> <string name="common.play">Abspielen</string>
<string name="common.play_last">Zuletzt spielen</string> <string name="common.play_last">Zuletzt spielen</string>
<string name="common.play_next">Als nächstes spielen</string> <string name="common.play_next">Als nächstes spielen</string>
<string name="common.play_previous">Vorheriges abspielen <string name="common.play_previous">Vorheriges abspielen</string>
</string>
<string name="common.play_now">Jetzt spielen</string> <string name="common.play_now">Jetzt spielen</string>
<string name="common.play_shuffled">Zufällig spielen</string> <string name="common.play_shuffled">Zufällig spielen</string>
<string name="common.public">Öffentlich</string> <string name="common.public">Öffentlich</string>
<string name="common.save">Speichern</string> <string name="common.save">Speichern</string>
<string name="common.title">Titel</string> <string name="common.title">Titel</string>
<string name="common.unpin">Lösen</string> <string name="common.unpin">Lösen</string>
<string name="common.various_artists">Verschiedene Künstler*innen</string> <string name="common.various_artists">Verschiedene Künstler</string>
<string name="delete_playlist">Möchtest du %1$s löschen</string> <string name="delete_playlist">Möchtest du %1$s löschen</string>
<string name="download.bookmark_removed" formatted="false">Lesezeichen entfernt</string> <string name="download.bookmark_removed" formatted="false">Lesezeichen entfernt</string>
<string name="download.bookmark_set_at_position" formatted="false">Lesezeichen gesetzt als %s.</string> <string name="download.bookmark_set_at_position" formatted="false">Lesezeichen gesetzt als %s.</string>
@ -94,7 +93,7 @@
<string name="help.url">file:///android_asset/html/de/index.html</string> <string name="help.url">file:///android_asset/html/de/index.html</string>
<string name="jukebox.is_default">Jukebox als Standard</string> <string name="jukebox.is_default">Jukebox als Standard</string>
<string name="lyrics.nomatch">Keine Liedtexte gefunden</string> <string name="lyrics.nomatch">Keine Liedtexte gefunden</string>
<string name="main.albums_alphaByArtist">Nach Künstler*innen</string> <string name="main.albums_alphaByArtist">Nach Künstler</string>
<string name="main.albums_alphaByName">Nach Namen</string> <string name="main.albums_alphaByName">Nach Namen</string>
<string name="main.albums_frequent">Am häufigsten gespielt</string> <string name="main.albums_frequent">Am häufigsten gespielt</string>
<string name="main.albums_highest">Am besten bewertet</string> <string name="main.albums_highest">Am besten bewertet</string>
@ -103,10 +102,11 @@
<string name="main.albums_recent">Kürzlich gespielt</string> <string name="main.albums_recent">Kürzlich gespielt</string>
<string name="main.albums_starred">Mit Stern</string> <string name="main.albums_starred">Mit Stern</string>
<string name="main.albums_title">Alben</string> <string name="main.albums_title">Alben</string>
<string name="main.artists_title">Künstler*innen</string> <string name="main.artists_title">Künstler</string>
<string name="main.genres_title">Genres</string> <string name="main.genres_title">Genres</string>
<string name="main.music">Musik</string> <string name="main.music">Musik</string>
<string name="main.offline">Offline</string> <string name="main.offline">Offline</string>
<string name="main.setup_server">%s - Server einrichten</string>
<string name="main.shuffle">Gemischte Wiedergabe</string> <string name="main.shuffle">Gemischte Wiedergabe</string>
<string name="main.songs_random">Zufällig</string> <string name="main.songs_random">Zufällig</string>
<string name="main.songs_starred">Mit Stern</string> <string name="main.songs_starred">Mit Stern</string>
@ -125,7 +125,7 @@
<string name="music_library.label">Medienbibliothek</string> <string name="music_library.label">Medienbibliothek</string>
<string name="music_library.label_offline">Offline Medien</string> <string name="music_library.label_offline">Offline Medien</string>
<string name="music_service.retry">Netzwerkfehler. Neuer Versuch %1$d von %2$d.</string> <string name="music_service.retry">Netzwerkfehler. Neuer Versuch %1$d von %2$d.</string>
<string name="parser.artist_count">%d Künstler*in gefunden</string> <string name="parser.artist_count">%d Künstler gefunden</string>
<string name="parser.reading">Lese vom Server.</string> <string name="parser.reading">Lese vom Server.</string>
<string name="parser.reading_done">Lese vom Server. Fertig!</string> <string name="parser.reading_done">Lese vom Server. Fertig!</string>
<string name="playlist.label">Wiedergabelisten</string> <string name="playlist.label">Wiedergabelisten</string>
@ -134,7 +134,7 @@
<string name="playlist.updated_info_error">Aktualisierung der Wiedergabeliste %s ist fehlgeschlagen</string> <string name="playlist.updated_info_error">Aktualisierung der Wiedergabeliste %s ist fehlgeschlagen</string>
<string name="progress.wait">Bitte warten&#8230;</string> <string name="progress.wait">Bitte warten&#8230;</string>
<string name="search.albums">Alben</string> <string name="search.albums">Alben</string>
<string name="search.artists">Künstler*innen</string> <string name="search.artists">Künstler</string>
<string name="search.label">Suche</string> <string name="search.label">Suche</string>
<string name="search.more">Zeige mehr</string> <string name="search.more">Zeige mehr</string>
<string name="search.no_match">Keine Treffer, bitte erneut versuchen</string> <string name="search.no_match">Keine Treffer, bitte erneut versuchen</string>
@ -149,7 +149,7 @@
<string name="select_artist.folder">Ordner wählen</string> <string name="select_artist.folder">Ordner wählen</string>
<string name="select_genre.empty">Keine Genres gefunden</string> <string name="select_genre.empty">Keine Genres gefunden</string>
<string name="select_playlist.empty">Keine Wiedergabelisten auf dem Server</string> <string name="select_playlist.empty">Keine Wiedergabelisten auf dem Server</string>
<string name="service.connecting">Kontaktierse Server, bitte warten.</string> <string name="service.connecting">Kontaktiere Server, bitte warten.</string>
<string name="settings.appearance_title">Aussehen</string> <string name="settings.appearance_title">Aussehen</string>
<string name="settings.buffer_length">Puffer-Länge</string> <string name="settings.buffer_length">Puffer-Länge</string>
<string name="settings.buffer_length_0">Deaktiviert</string> <string name="settings.buffer_length_0">Deaktiviert</string>
@ -218,7 +218,7 @@
<string name="settings.invalid_url">Bitte eine gültige URL angeben.</string> <string name="settings.invalid_url">Bitte eine gültige URL angeben.</string>
<string name="settings.invalid_username">Bitte einen gültigen Benutzernamen eingeben (ohne führende Leerzeichen).</string> <string name="settings.invalid_username">Bitte einen gültigen Benutzernamen eingeben (ohne führende Leerzeichen).</string>
<string name="settings.max_albums">Maximale Alben</string> <string name="settings.max_albums">Maximale Alben</string>
<string name="settings.max_artists">Maximale Künstler*innen</string> <string name="settings.max_artists">Max Künstler</string>
<string name="settings.max_bitrate_112">112 Kbps</string> <string name="settings.max_bitrate_112">112 Kbps</string>
<string name="settings.max_bitrate_128">128 Kbps</string> <string name="settings.max_bitrate_128">128 Kbps</string>
<string name="settings.max_bitrate_160">160 Kbps</string> <string name="settings.max_bitrate_160">160 Kbps</string>
@ -229,12 +229,12 @@
<string name="settings.max_bitrate_64">64 Kbps</string> <string name="settings.max_bitrate_64">64 Kbps</string>
<string name="settings.max_bitrate_80">80 Kbps</string> <string name="settings.max_bitrate_80">80 Kbps</string>
<string name="settings.max_bitrate_96">96 Kbps</string> <string name="settings.max_bitrate_96">96 Kbps</string>
<string name="settings.max_bitrate_mobile">Maximale Bitragte - Mobil</string> <string name="settings.max_bitrate_mobile">Max Bitrate - Mobil</string>
<string name="settings.max_bitrate_unlimited">Unbegrenzt</string> <string name="settings.max_bitrate_unlimited">Unbegrenzt</string>
<string name="settings.max_bitrate_wifi">Maximale Bitrate - WLAN</string> <string name="settings.max_bitrate_wifi">Max Bitrate - WLAN</string>
<string name="settings.max_songs">Maximale Titel</string> <string name="settings.max_songs">Maximale Titel</string>
<string name="settings.media_button_summary">Auf Telefon, Headset und Bluetooth-Media-Tasten reagieren</string> <string name="settings.media_button_summary">Auf Telefon, Headset und Bluetooth-Media-Tasten reagieren</string>
<string name="settings.media_button_title">Media Tasten</string> <string name="settings.media_button_title">Medien Tasten</string>
<string name="settings.network_timeout">Netzwerk Zeitüberschreitung</string> <string name="settings.network_timeout">Netzwerk Zeitüberschreitung</string>
<string name="settings.network_timeout_105000">105 Sekunden</string> <string name="settings.network_timeout_105000">105 Sekunden</string>
<string name="settings.network_timeout_120000">120 Sekunden</string> <string name="settings.network_timeout_120000">120 Sekunden</string>
@ -257,6 +257,7 @@
<string name="settings.preload_unlimited">Unbegrenzt</string> <string name="settings.preload_unlimited">Unbegrenzt</string>
<string name="settings.playback.resume_play_on_headphones_plug.title">Fortsetzen mit Kopfhörer</string> <string name="settings.playback.resume_play_on_headphones_plug.title">Fortsetzen mit Kopfhörer</string>
<string name="settings.playback.resume_play_on_headphones_plug.summary">Die App setzt eine pausierte Wiedergabe beim Anschließen der Kopfhörer fort.</string> <string name="settings.playback.resume_play_on_headphones_plug.summary">Die App setzt eine pausierte Wiedergabe beim Anschließen der Kopfhörer fort.</string>
<string name="settings.scrobble_title">Gespielte Musik scrobbeln</string>
<string name="settings.search_1">1</string> <string name="settings.search_1">1</string>
<string name="settings.search_10">10</string> <string name="settings.search_10">10</string>
<string name="settings.search_100">100</string> <string name="settings.search_100">100</string>
@ -301,6 +302,7 @@
<string name="settings.testing_unlicensed">Verbindung OK, Server nicht lizensiert.</string> <string name="settings.testing_unlicensed">Verbindung OK, Server nicht lizensiert.</string>
<string name="settings.theme_light">Hell</string> <string name="settings.theme_light">Hell</string>
<string name="settings.theme_dark">Dunkel</string> <string name="settings.theme_dark">Dunkel</string>
<string name="settings.theme_black">Schwarz</string>
<string name="settings.theme_title">Thema</string> <string name="settings.theme_title">Thema</string>
<string name="settings.title.allow_self_signed_certificate">Selbst-signierte HTTPS Zertifikate erlauben</string> <string name="settings.title.allow_self_signed_certificate">Selbst-signierte HTTPS Zertifikate erlauben</string>
<string name="settings.title.enable_ldap_users_support">LDAP Benutzeranmeldung aktivieren</string> <string name="settings.title.enable_ldap_users_support">LDAP Benutzeranmeldung aktivieren</string>
@ -310,6 +312,8 @@
<string name="settings.use_id3">Durchsuchen von ID3-Tags</string> <string name="settings.use_id3">Durchsuchen von ID3-Tags</string>
<string name="settings.use_id3_summary">Nutze ID3 Tag Methode anstatt Dateisystem-Methode</string> <string name="settings.use_id3_summary">Nutze ID3 Tag Methode anstatt Dateisystem-Methode</string>
<string name="main.video" tools:ignore="UnusedResources">Film</string> <string name="main.video" tools:ignore="UnusedResources">Film</string>
<string name="settings.wifi_required_summary">Medien nur über gebührenfreie Verbindungen herunterladen</string>
<string name="settings.wifi_required_title">Nur über WLAN herunterladen</string>
<string name="song_details.all">%1$s%2$s</string> <string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string> <string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string> <string name="util.bytes_format.byte">0 B</string>
@ -322,11 +326,13 @@
<string name="widget.sdcard_busy">SD Karte nicht verfügbar</string> <string name="widget.sdcard_busy">SD Karte nicht verfügbar</string>
<string name="widget.sdcard_missing">Keine SD Karte</string> <string name="widget.sdcard_missing">Keine SD Karte</string>
<string name="settings.share_description_default">Standard Beschreibung einer Freigabe</string> <string name="settings.share_description_default">Standard Beschreibung einer Freigabe</string>
<string name="settings.sharing_title">Teilen</string> <string name="settings.sharing_title">Freigaben</string>
<string name="settings.sharing_always_ask_for_details">Immer nach Details fragen</string> <string name="settings.sharing_always_ask_for_details">Immer nach Details fragen</string>
<string name="settings.share_expiration_default">Standard Ablaufzeit</string> <string name="settings.share_expiration_default">Standard Ablaufzeit</string>
<string name="do_not_show_dialog_again">Dialog nicht wieder anzeigen</string> <string name="do_not_show_dialog_again">Dialog nicht wieder anzeigen</string>
<string name="share_set_share_options">Ferigabeoptionen</string> <string name="share_set_share_options">Freigabeoptionen</string>
<string name="share_on_server">Freigabe auf Server erstellen</string>
<string name="settings.share_on_server_summary">Teilen erzeugt eine Freigabe auf dem Server und sendet die URL. Wenn ausgeschaltet, werden nur die Lied-Details geteilt.</string>
<string name="no_expiration">Kein Ablaufdatum</string> <string name="no_expiration">Kein Ablaufdatum</string>
<string name="download.toggle_playlist">Wiedergabeliste umschalten</string> <string name="download.toggle_playlist">Wiedergabeliste umschalten</string>
<string name="download.bookmark_set">Lesezeichen setzen</string> <string name="download.bookmark_set">Lesezeichen setzen</string>
@ -350,13 +356,13 @@
<string name="download_song_removed">%s wurde von der Wiedergabeliste entfernt</string> <string name="download_song_removed">%s wurde von der Wiedergabeliste entfernt</string>
<string name="download.share_playlist">Wiedergabeliste teilen</string> <string name="download.share_playlist">Wiedergabeliste teilen</string>
<string name="download.share_song">Aktuelles Lied teilen</string> <string name="download.share_song">Aktuelles Lied teilen</string>
<string name="settings.share_greeting_default">Standard Begrüßung beim Teilen</string> <string name="settings.share_greeting_default">Standard Freigabe-Begrüßung</string>
<string name="share_default_greeting">Hör dir mal die Musik an, die ich mit dir über %s geteilt habe.</string> <string name="share_default_greeting">Hör dir mal die Musik an, die ich mit dir über %s geteilt habe.</string>
<string name="share_via">Titel teilen über</string> <string name="share_via">Titel teilen über</string>
<string name="menu.share">Freigabe</string> <string name="menu.share">Freigabe</string>
<string name="settings.show_all_songs_by_artist">Alle Titel nach Künstler*innen sortieren</string> <string name="settings.show_all_songs_by_artist">Alle Titel nach Künstler sortieren</string>
<string name="settings.show_all_songs_by_artist_summary">Einen neuen Eintrag in der Künstleransicht hinzufügen, um auf alle Lieder eines Künstlers zuzugreifen</string> <string name="settings.show_all_songs_by_artist_summary">Einen neuen Eintrag in der Künstleransicht hinzufügen, um auf alle Lieder eines Künstlers zuzugreifen</string>
<string name="download.menu_show_artist">Künstler*in zeigen</string> <string name="download.menu_show_artist">Künstler zeigen</string>
<string name="common_multiple_years">Mehrere Jahre</string> <string name="common_multiple_years">Mehrere Jahre</string>
<string name="settings.playback.resume_on_bluetooth_device">Wiedergabe fortsetzen, wenn ein Bluetooth Gerät verbunden wurde</string> <string name="settings.playback.resume_on_bluetooth_device">Wiedergabe fortsetzen, wenn ein Bluetooth Gerät verbunden wurde</string>
<string name="settings.playback.pause_on_bluetooth_device">Wiedergabe pausieren, wenn ein Bluetooth Gerät getrennt wurde</string> <string name="settings.playback.pause_on_bluetooth_device">Wiedergabe pausieren, wenn ein Bluetooth Gerät getrennt wurde</string>
@ -379,4 +385,9 @@
<string name="api.subsonic.upgrade_client">Inkompatible Versionen. Bitte die Ultrasonic App aktualisieren.</string> <string name="api.subsonic.upgrade_client">Inkompatible Versionen. Bitte die Ultrasonic App aktualisieren.</string>
<string name="api.subsonic.upgrade_server">Inkompatible Versionen. Bitte den subsonic Server aktualisieren.</string> <string name="api.subsonic.upgrade_server">Inkompatible Versionen. Bitte den subsonic Server aktualisieren.</string>
</resources> <!-- Subsonic features -->
<string name="settings.features_title">Besonderheiten</string>
<string name="settings.five_star_rating_title">Fünf-Stern Bewertung</string>
<string name="settings.five_star_rating_description">Benutze Bewertungssystem mit fünf Sternen anstatt Lieder mit bloß einem Stern zu markieren.</string>
</resources>