mirror of
https://gitlab.com/ultrasonic/ultrasonic.git
synced 2025-07-19 18:01:58 +03:00
Compare commits
10 Commits
03d06896e9
...
35334c93cc
Author | SHA1 | Date | |
---|---|---|---|
|
35334c93cc | ||
|
a98f50412f | ||
|
b0e8ddfa66 | ||
|
c18f07362f | ||
|
26e9fcd40f | ||
|
b2498367b1 | ||
|
f68eee5233 | ||
|
fd22c0f8b5 | ||
|
bfe24e5dfd | ||
|
bfec814b43 |
@ -12,7 +12,7 @@ preferences = "1.2.0"
|
|||||||
media3 = "1.0.2"
|
media3 = "1.0.2"
|
||||||
|
|
||||||
androidSupport = "1.6.0"
|
androidSupport = "1.6.0"
|
||||||
materialDesign = "1.8.0"
|
materialDesign = "1.9.0"
|
||||||
constraintLayout = "2.1.4"
|
constraintLayout = "2.1.4"
|
||||||
multidex = "2.0.1"
|
multidex = "2.0.1"
|
||||||
room = "2.5.1"
|
room = "2.5.1"
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
android:supportsRtl="false"
|
android:supportsRtl="false"
|
||||||
android:preserveLegacyExternalStorage="true"
|
android:preserveLegacyExternalStorage="true"
|
||||||
tools:ignore="UnusedAttribute">
|
tools:ignore="UnusedAttribute">
|
||||||
|
<!-- Add for API 34 android:enableOnBackInvokedCallBack="true" -->
|
||||||
|
|
||||||
<meta-data android:name="com.google.android.gms.car.application"
|
<meta-data android:name="com.google.android.gms.car.application"
|
||||||
android:resource="@xml/automotive_app_desc"/>
|
android:resource="@xml/automotive_app_desc"/>
|
||||||
|
@ -21,6 +21,7 @@ import android.view.Menu
|
|||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
@ -51,18 +52,20 @@ import org.moire.ultrasonic.R
|
|||||||
import org.moire.ultrasonic.app.UApp
|
import org.moire.ultrasonic.app.UApp
|
||||||
import org.moire.ultrasonic.data.ActiveServerProvider
|
import org.moire.ultrasonic.data.ActiveServerProvider
|
||||||
import org.moire.ultrasonic.data.ServerSettingDao
|
import org.moire.ultrasonic.data.ServerSettingDao
|
||||||
import org.moire.ultrasonic.fragment.OnBackPressedHandler
|
|
||||||
import org.moire.ultrasonic.model.ServerSettingsModel
|
import org.moire.ultrasonic.model.ServerSettingsModel
|
||||||
import org.moire.ultrasonic.provider.SearchSuggestionProvider
|
import org.moire.ultrasonic.provider.SearchSuggestionProvider
|
||||||
import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport
|
import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport
|
||||||
import org.moire.ultrasonic.service.MediaPlayerManager
|
import org.moire.ultrasonic.service.MediaPlayerManager
|
||||||
|
import org.moire.ultrasonic.service.MusicServiceFactory
|
||||||
import org.moire.ultrasonic.service.RxBus
|
import org.moire.ultrasonic.service.RxBus
|
||||||
import org.moire.ultrasonic.service.plusAssign
|
import org.moire.ultrasonic.service.plusAssign
|
||||||
|
import org.moire.ultrasonic.subsonic.DownloadHandler
|
||||||
import org.moire.ultrasonic.util.Constants
|
import org.moire.ultrasonic.util.Constants
|
||||||
import org.moire.ultrasonic.util.InfoDialog
|
import org.moire.ultrasonic.util.InfoDialog
|
||||||
import org.moire.ultrasonic.util.LocaleHelper
|
import org.moire.ultrasonic.util.LocaleHelper
|
||||||
import org.moire.ultrasonic.util.ServerColor
|
import org.moire.ultrasonic.util.ServerColor
|
||||||
import org.moire.ultrasonic.util.Settings
|
import org.moire.ultrasonic.util.Settings
|
||||||
|
import org.moire.ultrasonic.util.ShortcutUtil
|
||||||
import org.moire.ultrasonic.util.Storage
|
import org.moire.ultrasonic.util.Storage
|
||||||
import org.moire.ultrasonic.util.UncaughtExceptionHandler
|
import org.moire.ultrasonic.util.UncaughtExceptionHandler
|
||||||
import org.moire.ultrasonic.util.Util
|
import org.moire.ultrasonic.util.Util
|
||||||
@ -126,6 +129,8 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
navigationView = findViewById(R.id.nav_view)
|
navigationView = findViewById(R.id.nav_view)
|
||||||
drawerLayout = findViewById(R.id.drawer_layout)
|
drawerLayout = findViewById(R.id.drawer_layout)
|
||||||
|
|
||||||
|
setupDrawerLayout(drawerLayout!!)
|
||||||
|
|
||||||
val toolbar = findViewById<Toolbar>(R.id.toolbar)
|
val toolbar = findViewById<Toolbar>(R.id.toolbar)
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
|
|
||||||
@ -210,6 +215,33 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
cachedServerCount = count ?: 0
|
cachedServerCount = count ?: 0
|
||||||
updateNavigationHeaderForServer()
|
updateNavigationHeaderForServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setup app shortcuts on supported devices, but not on first start, when the server
|
||||||
|
// is not configured yet.
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && !UApp.instance!!.isFirstRun) {
|
||||||
|
ShortcutUtil.registerShortcuts(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupDrawerLayout(drawerLayout: DrawerLayout) {
|
||||||
|
onBackPressedDispatcher.addCallback(this, closeNavigationDrawerOnBack)
|
||||||
|
drawerLayout.addDrawerListener(object : DrawerLayout.DrawerListener {
|
||||||
|
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDrawerOpened(drawerView: View) {
|
||||||
|
closeNavigationDrawerOnBack.isEnabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDrawerClosed(drawerView: View) {
|
||||||
|
closeNavigationDrawerOnBack.isEnabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDrawerStateChanged(newState: Int) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
@ -315,11 +347,18 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
selectServerButton =
|
selectServerButton =
|
||||||
navigationView?.getHeaderView(0)?.findViewById(R.id.header_select_server)
|
navigationView?.getHeaderView(0)?.findViewById(R.id.header_select_server)
|
||||||
selectServerButton?.setOnClickListener {
|
val dropDownButton: ImageView? =
|
||||||
|
navigationView?.getHeaderView(0)?.findViewById(R.id.edit_server_button)
|
||||||
|
|
||||||
|
val onClick: (View) -> Unit = {
|
||||||
if (drawerLayout?.isDrawerVisible(GravityCompat.START) == true)
|
if (drawerLayout?.isDrawerVisible(GravityCompat.START) == true)
|
||||||
this.drawerLayout?.closeDrawer(GravityCompat.START)
|
this.drawerLayout?.closeDrawer(GravityCompat.START)
|
||||||
navController.navigate(R.id.serverSelectorFragment)
|
navController.navigate(R.id.serverSelectorFragment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectServerButton?.setOnClickListener(onClick)
|
||||||
|
dropDownButton?.setOnClickListener(onClick)
|
||||||
|
|
||||||
headerBackgroundImage =
|
headerBackgroundImage =
|
||||||
navigationView?.getHeaderView(0)?.findViewById(R.id.img_header_bg)
|
navigationView?.getHeaderView(0)?.findViewById(R.id.img_header_bg)
|
||||||
}
|
}
|
||||||
@ -328,13 +367,9 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
setupActionBarWithNavController(navController, appBarConfig)
|
setupActionBarWithNavController(navController, appBarConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
private val closeNavigationDrawerOnBack = object : OnBackPressedCallback(true) {
|
||||||
if (drawerLayout?.isDrawerVisible(GravityCompat.START) == true) {
|
override fun handleOnBackPressed() {
|
||||||
this.drawerLayout?.closeDrawer(GravityCompat.START)
|
drawerLayout?.closeDrawer(GravityCompat.START)
|
||||||
} else {
|
|
||||||
val currentFragment = host!!.childFragmentManager.fragments.last()
|
|
||||||
if (currentFragment is OnBackPressedHandler) currentFragment.onBackPressed()
|
|
||||||
else super.onBackPressed()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,22 +387,34 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
super.onOptionsItemSelected(item)
|
super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Why is this needed? Shouldn't it just work by default?
|
||||||
override fun onSupportNavigateUp(): Boolean {
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
val currentFragment = host!!.childFragmentManager.fragments.last()
|
return findNavController(R.id.nav_host_fragment).navigateUp(appBarConfiguration)
|
||||||
return if (currentFragment is OnBackPressedHandler) {
|
|
||||||
currentFragment.onBackPressed()
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
findNavController(R.id.nav_host_fragment).navigateUp(appBarConfiguration)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Test if this works with external Intents
|
// TODO: Test if this works with external Intents
|
||||||
// android.intent.action.SEARCH and android.media.action.MEDIA_PLAY_FROM_SEARCH calls here
|
// android.intent.action.SEARCH and android.media.action.MEDIA_PLAY_FROM_SEARCH calls here
|
||||||
override fun onNewIntent(intent: Intent?) {
|
override fun onNewIntent(intent: Intent?) {
|
||||||
super.onNewIntent(intent)
|
super.onNewIntent(intent)
|
||||||
if (intent == null) return
|
if (intent == null) return
|
||||||
|
|
||||||
|
if (intent.action == Constants.INTENT_PLAY_RANDOM_SONGS) {
|
||||||
|
val currentFragment = host?.childFragmentManager?.fragments?.last() ?: return
|
||||||
|
val service = MusicServiceFactory.getMusicService()
|
||||||
|
val musicDirectory = service.getRandomSongs(Settings.maxSongs)
|
||||||
|
val downloadHandler: DownloadHandler by inject()
|
||||||
|
downloadHandler.addTracksToMediaController(
|
||||||
|
songs = musicDirectory.getTracks(),
|
||||||
|
append = false,
|
||||||
|
playNext = false,
|
||||||
|
autoPlay = true,
|
||||||
|
shuffle = false,
|
||||||
|
fragment = currentFragment,
|
||||||
|
playlistName = null
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (intent.getBooleanExtra(Constants.INTENT_SHOW_PLAYER, false)) {
|
if (intent.getBooleanExtra(Constants.INTENT_SHOW_PLAYER, false)) {
|
||||||
findNavController(R.id.nav_host_fragment).navigate(R.id.playerFragment)
|
findNavController(R.id.nav_host_fragment).navigate(R.id.playerFragment)
|
||||||
return
|
return
|
||||||
|
@ -7,12 +7,14 @@
|
|||||||
|
|
||||||
package org.moire.ultrasonic.fragment
|
package org.moire.ultrasonic.fragment
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
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 androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
@ -52,7 +54,7 @@ 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
|
||||||
*/
|
*/
|
||||||
class EditServerFragment : Fragment(), OnBackPressedHandler {
|
class EditServerFragment : Fragment() {
|
||||||
|
|
||||||
private val serverSettingsModel: ServerSettingsModel by viewModel()
|
private val serverSettingsModel: ServerSettingsModel by viewModel()
|
||||||
private val activeServerProvider: ActiveServerProvider by inject()
|
private val activeServerProvider: ActiveServerProvider by inject()
|
||||||
@ -82,6 +84,13 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onAttach(context: Context) {
|
||||||
|
requireActivity().onBackPressedDispatcher.addCallback(
|
||||||
|
this, confirmCloseCallback
|
||||||
|
)
|
||||||
|
super.onAttach(context)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
@ -189,11 +198,25 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val confirmCloseCallback = object : OnBackPressedCallback(
|
||||||
|
true // default to enabled
|
||||||
|
) {
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
finishActivity()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
Util.hideKeyboard(activity)
|
Util.hideKeyboard(activity)
|
||||||
|
confirmCloseCallback.isEnabled = false
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
confirmCloseCallback.isEnabled = true
|
||||||
|
super.onResume()
|
||||||
|
}
|
||||||
|
|
||||||
private fun correctServerAddress() {
|
private fun correctServerAddress() {
|
||||||
serverAddressEditText?.editText?.setText(
|
serverAddressEditText?.editText?.setText(
|
||||||
serverAddressEditText?.editText?.text?.trim(' ', '/')
|
serverAddressEditText?.editText?.text?.trim(' ', '/')
|
||||||
@ -206,11 +229,6 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||||||
image?.setTint(currentColor)
|
image?.setTint(currentColor)
|
||||||
serverColorImageView?.background = image
|
serverColorImageView?.background = image
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
|
||||||
finishActivity()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSaveInstanceState(savedInstanceState: Bundle) {
|
override fun onSaveInstanceState(savedInstanceState: Bundle) {
|
||||||
savedInstanceState.putString(
|
savedInstanceState.putString(
|
||||||
::serverNameEditText.name, serverNameEditText!!.editText?.text.toString()
|
::serverNameEditText.name, serverNameEditText!!.editText?.text.toString()
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
/*
|
|
||||||
* OnBackPressedHandler.kt
|
|
||||||
* Copyright (C) 2009-2022 Ultrasonic developers
|
|
||||||
*
|
|
||||||
* Distributed under terms of the GNU GPLv3 license.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.moire.ultrasonic.fragment
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for fragments handling their own Back button
|
|
||||||
*/
|
|
||||||
interface OnBackPressedHandler {
|
|
||||||
fun onBackPressed()
|
|
||||||
}
|
|
@ -25,6 +25,7 @@ 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"
|
||||||
const val INTENT_SHOW_PLAYER = "org.moire.ultrasonic.SHOW_PLAYER"
|
const val INTENT_SHOW_PLAYER = "org.moire.ultrasonic.SHOW_PLAYER"
|
||||||
|
const val INTENT_PLAY_RANDOM_SONGS = "org.moire.ultrasonic.CMD_RANDOM_SONGS"
|
||||||
|
|
||||||
// Legacy Preferences keys
|
// Legacy Preferences keys
|
||||||
// Warning: Don't add any new here!
|
// Warning: Don't add any new here!
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* ShortcutUtil.kt
|
||||||
|
* Copyright (C) 2009-2023 Ultrasonic developers
|
||||||
|
*
|
||||||
|
* Distributed under terms of the GNU GPLv3 license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.moire.ultrasonic.util
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.pm.ShortcutInfo
|
||||||
|
import android.content.pm.ShortcutManager
|
||||||
|
import android.graphics.drawable.Icon
|
||||||
|
import android.os.Build
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import org.moire.ultrasonic.R
|
||||||
|
import org.moire.ultrasonic.activity.NavigationActivity
|
||||||
|
|
||||||
|
object ShortcutUtil {
|
||||||
|
@RequiresApi(Build.VERSION_CODES.N_MR1)
|
||||||
|
fun registerShortcuts(activity: Activity) {
|
||||||
|
val shortcutIntent = Intent(activity, NavigationActivity::class.java).apply {
|
||||||
|
action = Constants.INTENT_PLAY_RANDOM_SONGS
|
||||||
|
}
|
||||||
|
|
||||||
|
val shortcut = ShortcutInfo.Builder(activity, "shortcut_play_random_songs")
|
||||||
|
.setShortLabel(activity.getString(R.string.shortcut_play_random_songs_short))
|
||||||
|
.setLongLabel(activity.getString(R.string.shortcut_play_random_songs_long))
|
||||||
|
.setIcon(Icon.createWithResource(activity, R.drawable.media_shuffle))
|
||||||
|
.setIntent(shortcutIntent)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val shortcutManager = activity.getSystemService(ShortcutManager::class.java)
|
||||||
|
shortcutManager?.dynamicShortcuts = listOf(shortcut)
|
||||||
|
}
|
||||||
|
}
|
5
ultrasonic/src/main/res/drawable/arrow_drop_down.xml
Normal file
5
ultrasonic/src/main/res/drawable/arrow_drop_down.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<vector android:autoMirrored="true" android:height="24dp"
|
||||||
|
android:tint="#000000" android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M7,10l5,5 5,-5z"/>
|
||||||
|
</vector>
|
@ -42,6 +42,7 @@
|
|||||||
<com.google.android.material.navigation.NavigationView
|
<com.google.android.material.navigation.NavigationView
|
||||||
a:id="@+id/nav_view"
|
a:id="@+id/nav_view"
|
||||||
a:layout_width="wrap_content"
|
a:layout_width="wrap_content"
|
||||||
|
a:maxWidth="300dp"
|
||||||
a:layout_height="match_parent"
|
a:layout_height="match_parent"
|
||||||
a:layout_gravity="start"
|
a:layout_gravity="start"
|
||||||
a:fitsSystemWindows="true"
|
a:fitsSystemWindows="true"
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:a="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:a="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
a:id="@+id/view_container"
|
a:id="@+id/view_container"
|
||||||
@ -13,19 +12,18 @@
|
|||||||
a:id="@+id/img_header_bg"
|
a:id="@+id/img_header_bg"
|
||||||
a:layout_width="match_parent"
|
a:layout_width="match_parent"
|
||||||
a:layout_height="0dp"
|
a:layout_height="0dp"
|
||||||
|
a:importantForAccessibility="no"
|
||||||
a:scaleType="fitXY"
|
a:scaleType="fitXY"
|
||||||
a:src="@drawable/ic_header_bg"
|
a:src="@drawable/ic_header_bg"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
a:importantForAccessibility="no" />
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
a:id="@+id/header_select_server"
|
a:id="@+id/header_select_server"
|
||||||
style="@style/Widget.Material3.Button.TextButton.Icon"
|
style="@style/Widget.Material3.Button.TextButton.Icon"
|
||||||
a:layout_width="match_parent"
|
a:layout_width="0dp"
|
||||||
a:layout_height="wrap_content"
|
a:layout_height="wrap_content"
|
||||||
a:layout_marginStart="3dp"
|
a:layout_marginTop="48dp"
|
||||||
a:layout_marginTop="24dp"
|
|
||||||
a:background="@drawable/default_ripple"
|
a:background="@drawable/default_ripple"
|
||||||
a:gravity="center_vertical"
|
a:gravity="center_vertical"
|
||||||
a:paddingHorizontal="22dp"
|
a:paddingHorizontal="22dp"
|
||||||
@ -39,9 +37,27 @@
|
|||||||
app:iconPadding="12dp"
|
app:iconPadding="12dp"
|
||||||
app:iconSize="24dp"
|
app:iconSize="24dp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/edit_server_button"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
tools:iconTint="@color/selected_menu_dark"
|
tools:iconTint="@color/selected_menu_dark"
|
||||||
tools:textColor="@color/selected_menu_dark" />
|
tools:textColor="@color/selected_menu_dark" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
a:id="@+id/edit_server_button"
|
||||||
|
style="@style/Widget.Material3.Button.TextButton.Icon"
|
||||||
|
a:layout_width="wrap_content"
|
||||||
|
a:layout_height="0dp"
|
||||||
|
a:layout_marginTop="6dp"
|
||||||
|
a:layout_marginBottom="6dp"
|
||||||
|
a:contentDescription="@string/server_menu.edit"
|
||||||
|
a:maxHeight="32dp"
|
||||||
|
a:src="@drawable/arrow_drop_down"
|
||||||
|
a:text="@null"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/header_select_server"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/header_select_server"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/header_select_server"
|
||||||
|
app:tint="@color/selected_menu_dark" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -392,7 +392,7 @@
|
|||||||
<!-- Subsonic features -->
|
<!-- Subsonic features -->
|
||||||
<string name="settings.five_star_rating_title">Utiliser les étoiles pour noter les morceaux</string>
|
<string name="settings.five_star_rating_title">Utiliser les étoiles pour noter les morceaux</string>
|
||||||
<string name="main.albums_by_year">Chronologique</string>
|
<string name="main.albums_by_year">Chronologique</string>
|
||||||
<string name="grid_view">Reprise</string>
|
<string name="grid_view">Couverture</string>
|
||||||
<string name="settings.preload_1000">1000 morceaux</string>
|
<string name="settings.preload_1000">1000 morceaux</string>
|
||||||
<string name="settings.preload_100">100 morceaux</string>
|
<string name="settings.preload_100">100 morceaux</string>
|
||||||
<string name="settings.preload_500">500 morceaux</string>
|
<string name="settings.preload_500">500 morceaux</string>
|
||||||
|
@ -446,4 +446,5 @@
|
|||||||
<string name="settings.use_hw_offload_title">ハードウェア再生を使用する (実験的)</string>
|
<string name="settings.use_hw_offload_title">ハードウェア再生を使用する (実験的)</string>
|
||||||
<string name="settings.use_hw_offload_description">端末のメディアデコーダーチップを使用してメディアを再生するよう試行します。これにより、バッテリー使用量を改善できます。このオプションを有効化することで、再生の不具合が起こる場合も報告されています!</string>
|
<string name="settings.use_hw_offload_description">端末のメディアデコーダーチップを使用してメディアを再生するよう試行します。これにより、バッテリー使用量を改善できます。このオプションを有効化することで、再生の不具合が起こる場合も報告されています!</string>
|
||||||
<string name="foreground_exception_text">メディア通知の再生ボタンがある場合はそれをタップします。ない場合はアプリを開いて再生を開始し、セッションをコントローラーに再接続します</string>
|
<string name="foreground_exception_text">メディア通知の再生ボタンがある場合はそれをタップします。ない場合はアプリを開いて再生を開始し、セッションをコントローラーに再接続します</string>
|
||||||
|
<string name="settings.max_bitrate_pinning">最高ビットレート - 永続的に固定された曲の場合</string>
|
||||||
</resources>
|
</resources>
|
@ -1,10 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<string name="background_task.loading">Ładowanie…</string>
|
<string name="background_task.loading">Ładowanie…</string>
|
||||||
<string name="background_task.network_error">Wystąpił błąd sieci. Proszę sprawdzić adres serwera i spróbować później.</string>
|
<string name="background_task.network_error">Wystąpił błąd sieci. Proszę sprawdzić adres serwera lub spróbować później.</string>
|
||||||
<string name="background_task.unsupported_api">Server api v%1$s does not support this function.</string>
|
<string name="background_task.unsupported_api">API serwera w wersji v%1$s nie wspiera tej funkcjonalności.</string>
|
||||||
<string name="background_task.no_network">Ta aplikacja wymaga dostępu do sieci. Proszę włączyć wi-fi lub dane komórkowe.</string>
|
<string name="background_task.no_network">Ta aplikacja wymaga dostępu do sieci. Proszę włączyć Wi-Fi lub dane komórkowe.</string>
|
||||||
<string name="background_task.not_found">Nie znaleziono zasobów. Proszę sprawdzić adres serwera.</string>
|
<string name="background_task.not_found">Nie udało się odnaleźć zasobu. Proszę sprawdzić adres serwera.</string>
|
||||||
<string name="background_task.parse_error">Brak prawidłowej odpowiedzi. Proszę sprawdzić adres serwera.</string>
|
<string name="background_task.parse_error">Brak prawidłowej odpowiedzi. Proszę sprawdzić adres serwera.</string>
|
||||||
<string name="background_task.ssl_cert_error">Błąd certyfikatu HTTPS: %1$s.</string>
|
<string name="background_task.ssl_cert_error">Błąd certyfikatu HTTPS: %1$s.</string>
|
||||||
<string name="background_task.ssl_error">Błąd połączenia SSL. Proszę sprawdzić certyfikat serwera.</string>
|
<string name="background_task.ssl_error">Błąd połączenia SSL. Proszę sprawdzić certyfikat serwera.</string>
|
||||||
@ -15,8 +15,8 @@
|
|||||||
<string name="button_bar.now_playing">Teraz gra</string>
|
<string name="button_bar.now_playing">Teraz gra</string>
|
||||||
<string name="buttons.shuffle">Wymieszaj</string>
|
<string name="buttons.shuffle">Wymieszaj</string>
|
||||||
<string name="podcasts.label">Podcasty</string>
|
<string name="podcasts.label">Podcasty</string>
|
||||||
<string name="podcasts_channels.empty">Brak kanałów</string>
|
<string name="podcasts_channels.empty">Nie zarejestrowano żadnych kanałów podcastowych</string>
|
||||||
<string name="button_bar.podcasts">Podcast</string>
|
<string name="button_bar.podcasts">Podcasty</string>
|
||||||
<string name="button_bar.search">Szukaj</string>
|
<string name="button_bar.search">Szukaj</string>
|
||||||
<string name="chat.send_a_message">Wyślij wiadomość</string>
|
<string name="chat.send_a_message">Wyślij wiadomość</string>
|
||||||
<string name="common.appname">Ultrasonic</string>
|
<string name="common.appname">Ultrasonic</string>
|
||||||
@ -34,10 +34,10 @@
|
|||||||
<string name="common.play_next">Odtwórz następne</string>
|
<string name="common.play_next">Odtwórz następne</string>
|
||||||
<string name="common.play_now">Odtwórz teraz</string>
|
<string name="common.play_now">Odtwórz teraz</string>
|
||||||
<string name="common.play_shuffled">Odtwórz losowo</string>
|
<string name="common.play_shuffled">Odtwórz losowo</string>
|
||||||
<string name="common.public">Publicznie</string>
|
<string name="common.public">Publiczna</string>
|
||||||
<string name="common.save">Zapisz</string>
|
<string name="common.save">Zapisz</string>
|
||||||
<string name="common.unpin">Odepnij</string>
|
<string name="common.unpin">Odepnij</string>
|
||||||
<string name="common.various_artists">Różni artyści</string>
|
<string name="common.various_artists">Różni wykonawcy</string>
|
||||||
<string name="delete_playlist">Czy chcesz usunąć %1$s</string>
|
<string name="delete_playlist">Czy chcesz usunąć %1$s</string>
|
||||||
<string name="download.bookmark_removed" formatted="false">Zakładka usunięta.</string>
|
<string name="download.bookmark_removed" formatted="false">Zakładka usunięta.</string>
|
||||||
<string name="download.bookmark_set_at_position" formatted="false">Zakładka ustawiona na %s.</string>
|
<string name="download.bookmark_set_at_position" formatted="false">Zakładka ustawiona na %s.</string>
|
||||||
@ -54,7 +54,7 @@
|
|||||||
<string name="download.menu_save">Zapisz playlistę</string>
|
<string name="download.menu_save">Zapisz playlistę</string>
|
||||||
<string name="download.menu_screen_off">Ekran wyłączony</string>
|
<string name="download.menu_screen_off">Ekran wyłączony</string>
|
||||||
<string name="download.menu_screen_on">Ekran włączony</string>
|
<string name="download.menu_screen_on">Ekran włączony</string>
|
||||||
<string name="download.menu_show_album">Wyświetl album</string>
|
<string name="download.menu_show_album">Przejdź do albumu</string>
|
||||||
<string name="download.menu_shuffle">Wymieszaj</string>
|
<string name="download.menu_shuffle">Wymieszaj</string>
|
||||||
<string name="download.playerstate_playing_shuffle">Odtwarzanie losowe</string>
|
<string name="download.playerstate_playing_shuffle">Odtwarzanie losowe</string>
|
||||||
<string name="download.playlist_done">Playlista została zapisana.</string>
|
<string name="download.playlist_done">Playlista została zapisana.</string>
|
||||||
@ -71,7 +71,7 @@
|
|||||||
<string name="error.label">Błąd</string>
|
<string name="error.label">Błąd</string>
|
||||||
<string name="jukebox.is_default">Jukebox domyślnie</string>
|
<string name="jukebox.is_default">Jukebox domyślnie</string>
|
||||||
<string name="lyrics.nomatch">Brak tekstu utworu</string>
|
<string name="lyrics.nomatch">Brak tekstu utworu</string>
|
||||||
<string name="main.albums_alphaByArtist">wg artystów</string>
|
<string name="main.albums_alphaByArtist">wg wykonawców</string>
|
||||||
<string name="main.albums_alphaByName">wg tytułu</string>
|
<string name="main.albums_alphaByName">wg tytułu</string>
|
||||||
<string name="main.albums_frequent">Najczęściej odtwarzane</string>
|
<string name="main.albums_frequent">Najczęściej odtwarzane</string>
|
||||||
<string name="main.albums_highest">Najlepiej oceniane</string>
|
<string name="main.albums_highest">Najlepiej oceniane</string>
|
||||||
@ -80,7 +80,7 @@
|
|||||||
<string name="main.albums_recent">Ostatnio odtwarzane</string>
|
<string name="main.albums_recent">Ostatnio odtwarzane</string>
|
||||||
<string name="main.albums_starred">Ulubione</string>
|
<string name="main.albums_starred">Ulubione</string>
|
||||||
<string name="main.albums_title">Albumy</string>
|
<string name="main.albums_title">Albumy</string>
|
||||||
<string name="main.artists_title">Artyści</string>
|
<string name="main.artists_title">Wykonawcy</string>
|
||||||
<string name="main.genres_title">Gatunki</string>
|
<string name="main.genres_title">Gatunki</string>
|
||||||
<string name="main.offline">Offline</string>
|
<string name="main.offline">Offline</string>
|
||||||
<string name="main.songs_random">Losowe</string>
|
<string name="main.songs_random">Losowe</string>
|
||||||
@ -98,11 +98,11 @@
|
|||||||
<string name="music_library.label">Biblioteka mediów</string>
|
<string name="music_library.label">Biblioteka mediów</string>
|
||||||
<string name="music_library.label_offline">Media offline</string>
|
<string name="music_library.label_offline">Media offline</string>
|
||||||
<string name="playlist.label">Playlisty</string>
|
<string name="playlist.label">Playlisty</string>
|
||||||
<string name="playlist.update_info">Aktualizacja informacji</string>
|
<string name="playlist.update_info">Zmień informacje</string>
|
||||||
<string name="playlist.updated_info">Zaktualizowano informacje dla playlisty %s</string>
|
<string name="playlist.updated_info">Zaktualizowano informacje dla playlisty %s</string>
|
||||||
<string name="playlist.updated_info_error">Błąc podczas aktualizacji playlisty %s</string>
|
<string name="playlist.updated_info_error">Błąd podczas aktualizacji playlisty %s</string>
|
||||||
<string name="search.albums">Albumy</string>
|
<string name="search.albums">Albumy</string>
|
||||||
<string name="search.artists">Artyści</string>
|
<string name="search.artists">Wykonawcy</string>
|
||||||
<string name="search.label">Wyszukaj</string>
|
<string name="search.label">Wyszukaj</string>
|
||||||
<string name="search.more">Wyświetl więcej</string>
|
<string name="search.more">Wyświetl więcej</string>
|
||||||
<string name="search.no_match">Brak wyników, proszę spróbować ponownie</string>
|
<string name="search.no_match">Brak wyników, proszę spróbować ponownie</string>
|
||||||
@ -150,12 +150,12 @@
|
|||||||
<string name="settings.cache_size_9000">9 GB</string>
|
<string name="settings.cache_size_9000">9 GB</string>
|
||||||
<string name="settings.cache_size_unlimited">Nieograniczona</string>
|
<string name="settings.cache_size_unlimited">Nieograniczona</string>
|
||||||
<string name="settings.cache_title">Pamięć podręczna muzyki</string>
|
<string name="settings.cache_title">Pamięć podręczna muzyki</string>
|
||||||
<string name="settings.chat_refresh">Okres odświeżania czatu</string>
|
<string name="settings.chat_refresh">Odświeżaj czat co</string>
|
||||||
<string name="settings.clear_bookmark">Czyszczenie zakładek</string>
|
<string name="settings.clear_bookmark">Usuwanie zakładek</string>
|
||||||
<string name="settings.clear_bookmark_summary">Czyść zakładkę po zakończeniu odtwarzania utworu</string>
|
<string name="settings.clear_bookmark_summary">Usuwaj zakładkę po zakończeniu odtwarzania utworu</string>
|
||||||
<string name="settings.clear_search_history">Wyczyść historię wyszukiwania</string>
|
<string name="settings.clear_search_history">Wyczyść historię wyszukiwania</string>
|
||||||
<string name="settings.default_albums">Domyślna ilość wyników - albumy</string>
|
<string name="settings.default_albums">Domyślna ilość wyników - albumy</string>
|
||||||
<string name="settings.default_artists">Domyślna ilość wyników - artyści</string>
|
<string name="settings.default_artists">Domyślna ilość wyników - wykonawcy</string>
|
||||||
<string name="settings.default_songs">Domyślna ilość wyników - utwory</string>
|
<string name="settings.default_songs">Domyślna ilość wyników - utwory</string>
|
||||||
<string name="settings.directory_cache_time">Okres przechowywania pamięci podręcznej katalogu</string>
|
<string name="settings.directory_cache_time">Okres przechowywania pamięci podręcznej katalogu</string>
|
||||||
<string name="settings.directory_cache_time_0">Wyłączone</string>
|
<string name="settings.directory_cache_time_0">Wyłączone</string>
|
||||||
@ -165,15 +165,15 @@
|
|||||||
<string name="settings.directory_cache_time_30">30 minut</string>
|
<string name="settings.directory_cache_time_30">30 minut</string>
|
||||||
<string name="settings.directory_cache_time_5">5 minut</string>
|
<string name="settings.directory_cache_time_5">5 minut</string>
|
||||||
<string name="settings.directory_cache_time_60">1 godzina</string>
|
<string name="settings.directory_cache_time_60">1 godzina</string>
|
||||||
<string name="settings.disc_sort">Sortuj utwory wg dysku</string>
|
<string name="settings.disc_sort">Sortuj utwory wg numeru płyty</string>
|
||||||
<string name="settings.disc_sort_summary">Sortuje listę utworów wg numeru dysku i numeru utworu</string>
|
<string name="settings.disc_sort_summary">Sortuj listę utworów wg numeru płyty i numeru utworu</string>
|
||||||
<string name="settings.display_bitrate_summary">Dołącza bitrate i typ pliku do nazwy artysty</string>
|
<string name="settings.display_bitrate_summary">Dołącz bitrate i rozszerzenie pliku obok nazwy wykonawcy</string>
|
||||||
<string name="settings.hide_media_summary">Ukrywa pliki muzyczne przed innymi aplikacjami.</string>
|
<string name="settings.hide_media_summary">Ukrywa pliki muzyczne przed innymi aplikacjami.</string>
|
||||||
<string name="settings.hide_media_title">Ukryj pliki</string>
|
<string name="settings.hide_media_title">Ukryj pliki</string>
|
||||||
<string name="settings.hide_media_toast">Efekt widoczny będzie po następnym skanowaniu muzyki przez system Android.</string>
|
<string name="settings.hide_media_toast">Efekt widoczny będzie po następnym skanowaniu muzyki przez system Android.</string>
|
||||||
<string name="settings.invalid_url">Proszę wprowadzić prawidłowy URL.</string>
|
<string name="settings.invalid_url">Proszę wprowadzić prawidłowy URL.</string>
|
||||||
<string name="settings.max_albums">Maksymalna ilość wyników - albumy</string>
|
<string name="settings.max_albums">Maksymalna ilość wyników - albumy</string>
|
||||||
<string name="settings.max_artists">Maksymalna ilość wyników - artyści</string>
|
<string name="settings.max_artists">Maksymalna ilość wyników - wykonawcy</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>
|
||||||
@ -186,9 +186,9 @@
|
|||||||
<string name="settings.max_bitrate_96">96 Kbps</string>
|
<string name="settings.max_bitrate_96">96 Kbps</string>
|
||||||
<string name="settings.max_bitrate_mobile">Maksymalny bitrate dla połączenia komórkowego</string>
|
<string name="settings.max_bitrate_mobile">Maksymalny bitrate dla połączenia komórkowego</string>
|
||||||
<string name="settings.max_bitrate_unlimited">Bez limitu</string>
|
<string name="settings.max_bitrate_unlimited">Bez limitu</string>
|
||||||
<string name="settings.max_bitrate_wifi">Maksymalny bitrate dla połączenia Wi-fi</string>
|
<string name="settings.max_bitrate_wifi">Maksymalny bitrate dla połączenia Wi-Fi</string>
|
||||||
<string name="settings.max_songs">Maksymalna ilość wyników - utwory</string>
|
<string name="settings.max_songs">Maksymalna ilość wyników - utwory</string>
|
||||||
<string name="settings.media_button_summary">Reaguje na przyciski telefonu, słuchawek i Bluetooth</string>
|
<string name="settings.media_button_summary">Reaguj na przyciski multimedialne telefonu, słuchawek i urządzeń Bluetooth</string>
|
||||||
<string name="settings.media_button_title">Przyciski</string>
|
<string name="settings.media_button_title">Przyciski</string>
|
||||||
<string name="settings.network_timeout">Przekroczenie limitu czasu sieci</string>
|
<string name="settings.network_timeout">Przekroczenie limitu czasu sieci</string>
|
||||||
<string name="settings.network_timeout_105000">105 sekund</string>
|
<string name="settings.network_timeout_105000">105 sekund</string>
|
||||||
@ -208,7 +208,7 @@
|
|||||||
<string name="settings.playback.bluetooth_all">Wszystkie urządzenia Bluetooth</string>
|
<string name="settings.playback.bluetooth_all">Wszystkie urządzenia Bluetooth</string>
|
||||||
<string name="settings.playback.bluetooth_a2dp">Tylko urządzenia audio (A2DP)</string>
|
<string name="settings.playback.bluetooth_a2dp">Tylko urządzenia audio (A2DP)</string>
|
||||||
<string name="settings.playback.bluetooth_disabled">Wyłączone</string>
|
<string name="settings.playback.bluetooth_disabled">Wyłączone</string>
|
||||||
<string name="settings.playback.resume_play_on_headphones_plug.title">Wznawiaj po podłączeniu słuchawek</string>
|
<string name="settings.playback.resume_play_on_headphones_plug.title">Wznów po podłączeniu słuchawek</string>
|
||||||
<string name="settings.playback.resume_play_on_headphones_plug.summary">Aplikacja wznowi zatrzymane odtwarzanie po podpięciu słuchawek.</string>
|
<string name="settings.playback.resume_play_on_headphones_plug.summary">Aplikacja wznowi zatrzymane odtwarzanie po podpięciu słuchawek.</string>
|
||||||
<string name="settings.preload">Ilość wstępnie ładowanych utworów</string>
|
<string name="settings.preload">Ilość wstępnie ładowanych utworów</string>
|
||||||
<string name="settings.preload_1">1 utwór</string>
|
<string name="settings.preload_1">1 utwór</string>
|
||||||
@ -249,8 +249,8 @@
|
|||||||
<string name="settings.theme_title">Motyw</string>
|
<string name="settings.theme_title">Motyw</string>
|
||||||
<string name="settings.title.allow_self_signed_certificate">Zezwalaj na własne certyfikaty HTTPS</string>
|
<string name="settings.title.allow_self_signed_certificate">Zezwalaj na własne certyfikaty HTTPS</string>
|
||||||
<string name="settings.title.force_plain_text_password">Wymuś uwierzytelnianie zwykłym hasłem</string>
|
<string name="settings.title.force_plain_text_password">Wymuś uwierzytelnianie zwykłym hasłem</string>
|
||||||
<string name="settings.use_folder_for_album_artist">Używaj folderów jako nazw artystów</string>
|
<string name="settings.use_folder_for_album_artist">Używaj folderów jako nazw wykonawców</string>
|
||||||
<string name="settings.use_folder_for_album_artist_summary">Zakłada, że folder najwyższego poziomu jest nazwą artysty albumu</string>
|
<string name="settings.use_folder_for_album_artist_summary">Zakłada, że folder najwyższego poziomu jest nazwą wykonawcy albumu</string>
|
||||||
<string name="settings.use_id3">Przeglądaj używając tagów ID3</string>
|
<string name="settings.use_id3">Przeglądaj używając tagów ID3</string>
|
||||||
<string name="settings.use_id3_summary">Używa metod z tagów ID3 zamiast metod opartych na systemie plików</string>
|
<string name="settings.use_id3_summary">Używa metod z tagów ID3 zamiast metod opartych na systemie plików</string>
|
||||||
<string name="main.video" tools:ignore="UnusedResources">Wideo</string>
|
<string name="main.video" tools:ignore="UnusedResources">Wideo</string>
|
||||||
@ -276,7 +276,7 @@
|
|||||||
<string name="download.bookmark_delete">Usuń zakładkę</string>
|
<string name="download.bookmark_delete">Usuń zakładkę</string>
|
||||||
<string name="download.menu_star">Ulubione</string>
|
<string name="download.menu_star">Ulubione</string>
|
||||||
<string name="download.menu_clear_playlist">Wyczyść playlistę</string>
|
<string name="download.menu_clear_playlist">Wyczyść playlistę</string>
|
||||||
<string name="button_bar.shares">Udostępnienia</string>
|
<string name="button_bar.shares">Udostępnione</string>
|
||||||
<string name="select_share.empty">Brak udostępnień na serwerze</string>
|
<string name="select_share.empty">Brak udostępnień na serwerze</string>
|
||||||
<string name="menu_deleted_share">Usunięto udostępnienie %s</string>
|
<string name="menu_deleted_share">Usunięto udostępnienie %s</string>
|
||||||
<string name="menu_deleted_share_error">Nieudane usunięcie udostępnienia %s</string>
|
<string name="menu_deleted_share_error">Nieudane usunięcie udostępnienia %s</string>
|
||||||
@ -294,7 +294,7 @@
|
|||||||
<string name="share_default_greeting">Sprawdź muzykę, którą udostępniam na %s</string>
|
<string name="share_default_greeting">Sprawdź muzykę, którą udostępniam na %s</string>
|
||||||
<string name="share_via">Udostępnij utwory za pomocą</string>
|
<string name="share_via">Udostępnij utwory za pomocą</string>
|
||||||
<string name="menu.share">Udostępnianie</string>
|
<string name="menu.share">Udostępnianie</string>
|
||||||
<string name="download.menu_show_artist">Wyświetlaj artystę</string>
|
<string name="download.menu_show_artist">Przejdź do wykonawcy</string>
|
||||||
<string name="common_multiple_years">Z różnych lat</string>
|
<string name="common_multiple_years">Z różnych lat</string>
|
||||||
<string name="server_selector.label">Skonfigurowane serwery</string>
|
<string name="server_selector.label">Skonfigurowane serwery</string>
|
||||||
<string name="server_selector.delete_confirmation">Czy na pewno chcesz usunąć ten serwer\?</string>
|
<string name="server_selector.delete_confirmation">Czy na pewno chcesz usunąć ten serwer\?</string>
|
||||||
@ -326,7 +326,7 @@
|
|||||||
<string name="api.subsonic.upgrade_client">Brak zgodności wersji. Uaktualnij aplikację Ultrasonic na Androida.</string>
|
<string name="api.subsonic.upgrade_client">Brak zgodności wersji. Uaktualnij aplikację Ultrasonic na Androida.</string>
|
||||||
<string name="api.subsonic.upgrade_server">Brak zgodności wersji. Uaktualnij serwer Subsonic.</string>
|
<string name="api.subsonic.upgrade_server">Brak zgodności wersji. Uaktualnij serwer Subsonic.</string>
|
||||||
<!-- Subsonic features -->
|
<!-- Subsonic features -->
|
||||||
<string name="settings.five_star_rating_title">Użyj pięciu gwiazdek dla utworów</string>
|
<string name="settings.five_star_rating_title">5-gwiazdkowy system ocen utworów</string>
|
||||||
<string name="settings.show_confirmation_dialog_summary">Pokaż okno potwierdzające usunięcie lub odpięcie utworów</string>
|
<string name="settings.show_confirmation_dialog_summary">Pokaż okno potwierdzające usunięcie lub odpięcie utworów</string>
|
||||||
<string name="language.en">Angielski</string>
|
<string name="language.en">Angielski</string>
|
||||||
<string name="settings.scrobble_summary">Pamiętaj o ustawieniu nazwy użytkownika i hasła do usługi Scrobble na serwerze</string>
|
<string name="settings.scrobble_summary">Pamiętaj o ustawieniu nazwy użytkownika i hasła do usługi Scrobble na serwerze</string>
|
||||||
@ -336,7 +336,7 @@
|
|||||||
<string name="buttons.stop">Zatrzymaj</string>
|
<string name="buttons.stop">Zatrzymaj</string>
|
||||||
<string name="language.fr">Francuski</string>
|
<string name="language.fr">Francuski</string>
|
||||||
<string name="common.unpin_selection_confirmation">Czy na pewno chcesz odpiąć zaznaczone pozycje\?</string>
|
<string name="common.unpin_selection_confirmation">Czy na pewno chcesz odpiąć zaznaczone pozycje\?</string>
|
||||||
<string name="settings.custom_cache_location">Użyj niestandardowej lokacji pamięci podręcznej</string>
|
<string name="settings.custom_cache_location">Niestandardowa lokalizacja pamięci podręcznej</string>
|
||||||
<string name="common.select_all">Wybierz wszystko</string>
|
<string name="common.select_all">Wybierz wszystko</string>
|
||||||
<string name="download.menu_shuffle_on">Włączony tryb losowy</string>
|
<string name="download.menu_shuffle_on">Włączony tryb losowy</string>
|
||||||
<string name="buttons.next">Następne</string>
|
<string name="buttons.next">Następne</string>
|
||||||
@ -352,7 +352,7 @@
|
|||||||
<string name="settings.preload_1000">1000 piosenek</string>
|
<string name="settings.preload_1000">1000 piosenek</string>
|
||||||
<string name="supported_server_features">Wspierane funkcje</string>
|
<string name="supported_server_features">Wspierane funkcje</string>
|
||||||
<string name="language.pl">Polski</string>
|
<string name="language.pl">Polski</string>
|
||||||
<string name="common.artist">Artysta</string>
|
<string name="common.artist">Wykonawca</string>
|
||||||
<string name="language.nl">Holenderski</string>
|
<string name="language.nl">Holenderski</string>
|
||||||
<string name="language.hu">Węgierski</string>
|
<string name="language.hu">Węgierski</string>
|
||||||
<string name="settings.debug.log_summary">Zapisanych jest %1$s plików z logami, które zajmują ~%2$s MB miejsca w katalogu %3$s. Czy chcesz je zachować\?</string>
|
<string name="settings.debug.log_summary">Zapisanych jest %1$s plików z logami, które zajmują ~%2$s MB miejsca w katalogu %3$s. Czy chcesz je zachować\?</string>
|
||||||
@ -366,7 +366,7 @@
|
|||||||
<string name="buttons.repeat">Powtarzaj</string>
|
<string name="buttons.repeat">Powtarzaj</string>
|
||||||
<string name="download.empty">Nic nie jest pobierane</string>
|
<string name="download.empty">Nic nie jest pobierane</string>
|
||||||
<string name="language.ru">Rosyjski</string>
|
<string name="language.ru">Rosyjski</string>
|
||||||
<string name="download.playerstate_loading">Byforowanie…</string>
|
<string name="download.playerstate_loading">Buforowanie…</string>
|
||||||
<string name="main.setup_server">%s - Ustaw serwer</string>
|
<string name="main.setup_server">%s - Ustaw serwer</string>
|
||||||
<string name="settings.preload_50">50 piosenek</string>
|
<string name="settings.preload_50">50 piosenek</string>
|
||||||
<string name="language.zh_CN">Chiński (Chiny)</string>
|
<string name="language.zh_CN">Chiński (Chiny)</string>
|
||||||
@ -383,13 +383,13 @@
|
|||||||
<string name="language.pt">Portugalski</string>
|
<string name="language.pt">Portugalski</string>
|
||||||
<string name="settings.server_color">Kolor serwera</string>
|
<string name="settings.server_color">Kolor serwera</string>
|
||||||
<string name="buttons.pause">Pauza</string>
|
<string name="buttons.pause">Pauza</string>
|
||||||
<string name="settings.show_artist_picture">Pokaż obraz wykonawcy na liście</string>
|
<string name="settings.show_artist_picture">Wyświetlaj obraz wykonawcy w liście</string>
|
||||||
<string name="common.title">Tytuł</string>
|
<string name="common.title">Tytuł</string>
|
||||||
<string name="common.delete_selection_confirmation">Czy na pewno chcesz usunąć zaznaczone pozycje\?</string>
|
<string name="common.delete_selection_confirmation">Czy na pewno chcesz usunąć zaznaczone pozycje\?</string>
|
||||||
<string name="albumArt">Okładka albumu</string>
|
<string name="albumArt">Okładka albumu</string>
|
||||||
<string name="common.album">Album</string>
|
<string name="common.album">Album</string>
|
||||||
<string name="settings.preload_500">500 piosenek</string>
|
<string name="settings.preload_500">500 piosenek</string>
|
||||||
<string name="settings.share_on_server_summary">Udostępnianie spowoduje utworzenie go na serwerze i udostępnienie jego adresu URL. Jeśli ta opcja jest wyłączona, udostępniane są tylko szczegóły utworu</string>
|
<string name="settings.share_on_server_summary">Udostępnianie umożliwi dostęp do utworu na serwerze i wygeneruje do niego adres URL. Jeśli ta opcja jest wyłączona, udostępniane będą tylko informacje o utworze</string>
|
||||||
<string name="settings.download_transition">Pokaż Obecnie odtwarzane po kliknięciu przycisku Odtwarzaj</string>
|
<string name="settings.download_transition">Pokaż Obecnie odtwarzane po kliknięciu przycisku Odtwarzaj</string>
|
||||||
<string name="language.es">Hiszpański</string>
|
<string name="language.es">Hiszpański</string>
|
||||||
<string name="settings.override_language_summary">Wymagane jest ponowne uruchomienie aplikacji po zmianie języka</string>
|
<string name="settings.override_language_summary">Wymagane jest ponowne uruchomienie aplikacji po zmianie języka</string>
|
||||||
@ -398,7 +398,7 @@
|
|||||||
<string name="language.zh_TW">Chiński (Tajwan)</string>
|
<string name="language.zh_TW">Chiński (Tajwan)</string>
|
||||||
<string name="settings.theme_day_night">Dzień i noc</string>
|
<string name="settings.theme_day_night">Dzień i noc</string>
|
||||||
<string name="settings.theme_black">Czarny</string>
|
<string name="settings.theme_black">Czarny</string>
|
||||||
<string name="settings.summary.force_plain_text_password">Zmusza to aplikację do wysyłania hasła w postaci niezaszyfrowanej. Przydatne, jeśli serwer Subsonic nie obsługuje nowego interfejsu API uwierzytelniania dla użytkowników.</string>
|
<string name="settings.summary.force_plain_text_password">Zmusza aplikację do przesyłania hasła w postaci niezaszyfrowanej. Przydaje się, gdy serwer Subsonic nie obsługuje nowego API uwierzytelniania użytkowników.</string>
|
||||||
<string name="settings.show_now_playing_details_summary">Pokaż więcej informacji o utworze w sekcji Obecnie odtwarzane (gatunek, rok, przepustowość)</string>
|
<string name="settings.show_now_playing_details_summary">Pokaż więcej informacji o utworze w sekcji Obecnie odtwarzane (gatunek, rok, przepustowość)</string>
|
||||||
<string name="settings.show_now_playing_details">Pokaż szczegóły w sekcji Obecnie odtwarzane</string>
|
<string name="settings.show_now_playing_details">Pokaż szczegóły w sekcji Obecnie odtwarzane</string>
|
||||||
<string name="settings.wifi_required_title">Pobieraj tylko przez Wi-Fi</string>
|
<string name="settings.wifi_required_title">Pobieraj tylko przez Wi-Fi</string>
|
||||||
@ -423,7 +423,7 @@
|
|||||||
<item quantity="many">Odpięto %d utworów</item>
|
<item quantity="many">Odpięto %d utworów</item>
|
||||||
<item quantity="other">Odpięto %d utworów</item>
|
<item quantity="other">Odpięto %d utworów</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="settings.use_hw_offload_title">Użyj odtwarzania sprzętowwego (eksperymentalne)</string>
|
<string name="settings.use_hw_offload_title">Użyj odtwarzania sprzętowego (eksperymentalne)</string>
|
||||||
<string name="jukebox">Jukebox</string>
|
<string name="jukebox">Jukebox</string>
|
||||||
<string name="select_album.no_network">Uwaga: Brak dostępnych sieci do użycia.
|
<string name="select_album.no_network">Uwaga: Brak dostępnych sieci do użycia.
|
||||||
\n Jeżeli używasz danych mobilnych, potrzebne może być włączenie płatnych połączeń w ustawieniach.</string>
|
\n Jeżeli używasz danych mobilnych, potrzebne może być włączenie płatnych połączeń w ustawieniach.</string>
|
||||||
@ -434,7 +434,7 @@
|
|||||||
<string name="settings.scrobble_title">Scrobbluj moje odtworzenia</string>
|
<string name="settings.scrobble_title">Scrobbluj moje odtworzenia</string>
|
||||||
<string name="settings.use_id3_offline_summary">Jeśli włączysz to ustawienie, będzie ono wyświetlać tylko muzykę pobraną za pomocą Ultrasonic w wersji 4.0 lub nowszej. Wcześniejsze pobrane pliki nie zawierają wymaganych metadanych. Możesz przełączać się między trybami Przypinania i Zapisywania, aby wyzwolić pobieranie brakujących metadanych.</string>
|
<string name="settings.use_id3_offline_summary">Jeśli włączysz to ustawienie, będzie ono wyświetlać tylko muzykę pobraną za pomocą Ultrasonic w wersji 4.0 lub nowszej. Wcześniejsze pobrane pliki nie zawierają wymaganych metadanych. Możesz przełączać się między trybami Przypinania i Zapisywania, aby wyzwolić pobieranie brakujących metadanych.</string>
|
||||||
<string name="settings.show_artist_picture_summary">Wyświetla obraz wykonawcy na liście wykonawców, jeśli jest dostępny</string>
|
<string name="settings.show_artist_picture_summary">Wyświetla obraz wykonawcy na liście wykonawców, jeśli jest dostępny</string>
|
||||||
<string name="settings.wifi_required_summary">Pobieraj tylko podczas połączeń niepłatnuch</string>
|
<string name="settings.wifi_required_summary">Pobieraj tylko podczas połączeń niepłatnych</string>
|
||||||
<string name="download.share_song">Udostępnij obecnie odtwarzaną piosenkę</string>
|
<string name="download.share_song">Udostępnij obecnie odtwarzaną piosenkę</string>
|
||||||
<string name="settings.show_confirmation_dialog">Pokaż okno potwierdzające</string>
|
<string name="settings.show_confirmation_dialog">Pokaż okno potwierdzające</string>
|
||||||
<string name="settings.debug.title">Opcje debugowania</string>
|
<string name="settings.debug.title">Opcje debugowania</string>
|
||||||
@ -443,7 +443,7 @@
|
|||||||
<string name="server_editor.disabled_feature">Jedna lub więcej funkcji zostało wyłączonych ponieważ serwer ich nie obsługiwał.
|
<string name="server_editor.disabled_feature">Jedna lub więcej funkcji zostało wyłączonych ponieważ serwer ich nie obsługiwał.
|
||||||
\nMożesz uruchomić ten test ponownie kiedykolwiek.</string>
|
\nMożesz uruchomić ten test ponownie kiedykolwiek.</string>
|
||||||
<string name="server_menu.demo">Serwer demonstracyjny</string>
|
<string name="server_menu.demo">Serwer demonstracyjny</string>
|
||||||
<string name="settings.five_star_rating_description">Użyj systemu pięciu gwiazdek do oceniania utworów zamiast po prostu dodawać lub usuwać utwory z ulubionych.</string>
|
<string name="settings.five_star_rating_description">Używaj 5-gwiazdkowego systemu ocen utworów zamiast zwykłego oznaczania/odznaczania utworów gwiazdką.</string>
|
||||||
<string name="list_view">Lista</string>
|
<string name="list_view">Lista</string>
|
||||||
<string name="grid_view">Okładka</string>
|
<string name="grid_view">Okładka</string>
|
||||||
<string name="settings.use_hw_offload_description">Spróbuj odtworzyć pliki multimedialne za pomocą układu dekodującego w telefonie. Może to zmniejszyć zużycie baterii!</string>
|
<string name="settings.use_hw_offload_description">Spróbuj odtworzyć pliki multimedialne za pomocą układu dekodującego w telefonie. Może to zmniejszyć zużycie baterii!</string>
|
||||||
@ -463,10 +463,11 @@
|
|||||||
\n
|
\n
|
||||||
\nDzięki <b>Ultrasonic</b> możesz łatwo przesyłać strumieniowo lub pobierać muzykę z komputera domowego na telefon za pomocą serwera multimediów kompatybilnego z Subsonic. Oprogramowanie serwera Subsonic wymaga oddzielnej konfiguracji od Ultrasonic.
|
\nDzięki <b>Ultrasonic</b> możesz łatwo przesyłać strumieniowo lub pobierać muzykę z komputera domowego na telefon za pomocą serwera multimediów kompatybilnego z Subsonic. Oprogramowanie serwera Subsonic wymaga oddzielnej konfiguracji od Ultrasonic.
|
||||||
\n
|
\n
|
||||||
\nDomyślnie Ultrasonic nie jest skonfigurowane. Po skonfigurowaniu własnego serwera zmień ustawienia serwera, aby połączyć się z komputerem.</string>
|
\nDomyślnie Ultrasonic jest nieskonfigurowany. Po skonfigurowaniu własnego serwera zmień ustawienia serwera, aby połączyć się z komputerem.</string>
|
||||||
<string name="main.welcome_text_demo">Aby używać Ultrasonic z własną muzyką, potrzebujesz <b>własnego serwera</b>.
|
<string name="main.welcome_text_demo">Aby używać Ultrasonic z własną muzyką, potrzebujesz <b>własnego serwera</b>.
|
||||||
\n
|
\n
|
||||||
\n➤ Jeśli chcesz najpierw wypróbować aplikację, możesz teraz dodać serwer demonstracyjny.
|
\n➤ Jeśli chcesz najpierw wypróbować aplikację, możesz teraz dodać serwer demonstracyjny.
|
||||||
\n
|
\n
|
||||||
\n➤ W przeciwnym razie możesz skonfigurować serwer w <b>ustawieniach</b>.</string>
|
\n➤ W przeciwnym razie możesz skonfigurować serwer w <b>ustawieniach</b>.</string>
|
||||||
|
<string name="settings.max_bitrate_pinning">Maksymalny bitrate - Przy trwałym przypięciu utworu</string>
|
||||||
</resources>
|
</resources>
|
@ -456,6 +456,8 @@
|
|||||||
<string name="foreground_exception_text">Press on the play button on the media notification if it
|
<string name="foreground_exception_text">Press on the play button on the media notification if it
|
||||||
is still present, otherwise please open the app to start the playback and re-connect the session
|
is still present, otherwise please open the app to start the playback and re-connect the session
|
||||||
to the controller</string>
|
to the controller</string>
|
||||||
|
<string name="shortcut_play_random_songs_short">Random songs</string>
|
||||||
|
<string name="shortcut_play_random_songs_long">Play random songs</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user