playback: move drag helper to list
Move most of QueueDragCallback to the list module. This is planned to be re-used with the playlist view, so it should be shared.
This commit is contained in:
parent
a153a41f8d
commit
33381f463a
29 changed files with 222 additions and 169 deletions
|
@ -158,6 +158,8 @@ constructor(
|
||||||
val playlistInstructions: Event<UpdateInstructions>
|
val playlistInstructions: Event<UpdateInstructions>
|
||||||
get() = _playlistInstructions
|
get() = _playlistInstructions
|
||||||
|
|
||||||
|
private var isEditingPlaylist = false
|
||||||
|
|
||||||
/** The current [Sort] used for [Song]s in [playlistList]. */
|
/** The current [Sort] used for [Song]s in [playlistList]. */
|
||||||
var playlistSongSort: Sort
|
var playlistSongSort: Sort
|
||||||
get() = musicSettings.playlistSongSort
|
get() = musicSettings.playlistSongSort
|
||||||
|
@ -412,7 +414,7 @@ constructor(
|
||||||
val list = mutableListOf<Item>()
|
val list = mutableListOf<Item>()
|
||||||
|
|
||||||
if (playlist.songs.isNotEmpty()) {
|
if (playlist.songs.isNotEmpty()) {
|
||||||
val header = SortHeader(R.string.lbl_songs)
|
val header = BasicHeader(R.string.lbl_songs)
|
||||||
list.add(Divider(header))
|
list.add(Divider(header))
|
||||||
list.add(header)
|
list.add(header)
|
||||||
if (replace) {
|
if (replace) {
|
||||||
|
|
|
@ -0,0 +1,150 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 Auxio Project
|
||||||
|
* ExtendedDragCallback.kt is part of Auxio.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.oxycblt.auxio.list.recycler
|
||||||
|
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
|
import android.view.View
|
||||||
|
import android.view.animation.AccelerateDecelerateInterpolator
|
||||||
|
import androidx.core.view.isInvisible
|
||||||
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import org.oxycblt.auxio.R
|
||||||
|
import org.oxycblt.auxio.util.getDimen
|
||||||
|
import org.oxycblt.auxio.util.getInteger
|
||||||
|
import org.oxycblt.auxio.util.logD
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A highly customized [ItemTouchHelper.Callback] that enables some extra eye candy in editable UIs,
|
||||||
|
* such as an animation when lifting items. Note that this requires a [ViewHolder] implementation in
|
||||||
|
* order to function.
|
||||||
|
*
|
||||||
|
* @author Alexander Capehart (OxygenCobalt)
|
||||||
|
*/
|
||||||
|
abstract class MaterialDragCallback : ItemTouchHelper.Callback() {
|
||||||
|
private var shouldLift = true
|
||||||
|
|
||||||
|
final override fun getMovementFlags(
|
||||||
|
recyclerView: RecyclerView,
|
||||||
|
viewHolder: RecyclerView.ViewHolder
|
||||||
|
) =
|
||||||
|
if (viewHolder is ViewHolder) {
|
||||||
|
makeFlag(
|
||||||
|
ItemTouchHelper.ACTION_STATE_DRAG, ItemTouchHelper.UP or ItemTouchHelper.DOWN) or
|
||||||
|
makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE, ItemTouchHelper.START)
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun onChildDraw(
|
||||||
|
c: Canvas,
|
||||||
|
recyclerView: RecyclerView,
|
||||||
|
viewHolder: RecyclerView.ViewHolder,
|
||||||
|
dX: Float,
|
||||||
|
dY: Float,
|
||||||
|
actionState: Int,
|
||||||
|
isCurrentlyActive: Boolean
|
||||||
|
) {
|
||||||
|
val holder = viewHolder as ViewHolder
|
||||||
|
|
||||||
|
// Hook drag events to "lifting" the item (i.e raising it's elevation). Make sure
|
||||||
|
// this is only done once when the item is initially picked up.
|
||||||
|
// TODO: I think this is possible to improve with a raw ValueAnimator.
|
||||||
|
if (shouldLift && isCurrentlyActive && actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
|
||||||
|
logD("Lifting item")
|
||||||
|
|
||||||
|
val bg = holder.background
|
||||||
|
val elevation = recyclerView.context.getDimen(R.dimen.elevation_normal)
|
||||||
|
holder.root
|
||||||
|
.animate()
|
||||||
|
.translationZ(elevation)
|
||||||
|
.setDuration(
|
||||||
|
recyclerView.context.getInteger(R.integer.anim_fade_exit_duration).toLong())
|
||||||
|
.setUpdateListener {
|
||||||
|
bg.alpha = ((holder.root.translationZ / elevation) * 255).toInt()
|
||||||
|
}
|
||||||
|
.setInterpolator(AccelerateDecelerateInterpolator())
|
||||||
|
.start()
|
||||||
|
|
||||||
|
shouldLift = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// We show a background with a delete icon behind the item each time one is swiped
|
||||||
|
// away. To avoid working with canvas, this is simply placed behind the body.
|
||||||
|
// That comes with a couple of problems, however. For one, the background view will always
|
||||||
|
// lag behind the body view, resulting in a noticeable pixel offset when dragging. To fix
|
||||||
|
// this, we make this a separate view and make this view invisible whenever the item is
|
||||||
|
// not being swiped. This issue is also the reason why the background is not merged with
|
||||||
|
// the FrameLayout within the item.
|
||||||
|
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
|
||||||
|
holder.delete.isInvisible = dX == 0f
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update other translations. We do not call the default implementation, so we must do
|
||||||
|
// this ourselves.
|
||||||
|
holder.body.translationX = dX
|
||||||
|
holder.root.translationY = dY
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
|
||||||
|
// When an elevated item is cleared, we reset the elevation using another animation.
|
||||||
|
val holder = viewHolder as ViewHolder
|
||||||
|
|
||||||
|
// This function can be called multiple times, so only start the animation when the view's
|
||||||
|
// translationZ is already non-zero.
|
||||||
|
if (holder.root.translationZ != 0f) {
|
||||||
|
logD("Dropping item")
|
||||||
|
|
||||||
|
val bg = holder.background
|
||||||
|
val elevation = recyclerView.context.getDimen(R.dimen.elevation_normal)
|
||||||
|
holder.root
|
||||||
|
.animate()
|
||||||
|
.translationZ(0f)
|
||||||
|
.setDuration(
|
||||||
|
recyclerView.context.getInteger(R.integer.anim_fade_exit_duration).toLong())
|
||||||
|
.setUpdateListener {
|
||||||
|
bg.alpha = ((holder.root.translationZ / elevation) * 255).toInt()
|
||||||
|
}
|
||||||
|
.setInterpolator(AccelerateDecelerateInterpolator())
|
||||||
|
.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
shouldLift = true
|
||||||
|
|
||||||
|
// Reset translations. We do not call the default implementation, so we must do
|
||||||
|
// this ourselves.
|
||||||
|
holder.body.translationX = 0f
|
||||||
|
holder.root.translationY = 0f
|
||||||
|
}
|
||||||
|
|
||||||
|
// Long-press events are too buggy, only allow dragging with the handle.
|
||||||
|
final override fun isLongPressDragEnabled() = false
|
||||||
|
|
||||||
|
/** Required [RecyclerView.ViewHolder] implementation that exposes the following. */
|
||||||
|
interface ViewHolder {
|
||||||
|
/** The root view containing the delete scrim and information. */
|
||||||
|
val root: View
|
||||||
|
/** The body view containing music information. */
|
||||||
|
val body: View
|
||||||
|
/** The scrim view showing the delete icon. Should be behind [body]. */
|
||||||
|
val delete: View
|
||||||
|
/** The drawable of the [body] background that can be elevated. */
|
||||||
|
val background: Drawable
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,9 +26,10 @@ import androidx.core.view.isInvisible
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.google.android.material.shape.MaterialShapeDrawable
|
import com.google.android.material.shape.MaterialShapeDrawable
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.databinding.ItemQueueSongBinding
|
import org.oxycblt.auxio.databinding.ItemEditableSongBinding
|
||||||
import org.oxycblt.auxio.list.EditableListListener
|
import org.oxycblt.auxio.list.EditableListListener
|
||||||
import org.oxycblt.auxio.list.adapter.*
|
import org.oxycblt.auxio.list.adapter.*
|
||||||
|
import org.oxycblt.auxio.list.recycler.MaterialDragCallback
|
||||||
import org.oxycblt.auxio.list.recycler.SongViewHolder
|
import org.oxycblt.auxio.list.recycler.SongViewHolder
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.resolveNames
|
import org.oxycblt.auxio.music.resolveNames
|
||||||
|
@ -96,34 +97,32 @@ class QueueAdapter(private val listener: EditableListListener<Song>) :
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [PlayingIndicatorAdapter.ViewHolder] that displays a queue [Song]. Use [from] to create an
|
* A [PlayingIndicatorAdapter.ViewHolder] that displays an editable [Song] which can be re-ordered
|
||||||
* instance.
|
* and removed. Use [from] to create an instance.
|
||||||
*
|
*
|
||||||
* @author Alexander Capehart (OxygenCobalt)
|
* @author Alexander Capehart (OxygenCobalt)
|
||||||
*/
|
*/
|
||||||
class QueueSongViewHolder private constructor(private val binding: ItemQueueSongBinding) :
|
class QueueSongViewHolder private constructor(private val binding: ItemEditableSongBinding) :
|
||||||
PlayingIndicatorAdapter.ViewHolder(binding.root) {
|
PlayingIndicatorAdapter.ViewHolder(binding.root), MaterialDragCallback.ViewHolder {
|
||||||
/** The "body" view of this [QueueSongViewHolder] that shows the [Song] information. */
|
override val root: View
|
||||||
val bodyView: View
|
get() = binding.root
|
||||||
|
|
||||||
|
override val body: View
|
||||||
get() = binding.body
|
get() = binding.body
|
||||||
|
|
||||||
/** The background view of this [QueueSongViewHolder] that shows the delete icon. */
|
override val delete: View
|
||||||
val backgroundView: View
|
|
||||||
get() = binding.background
|
get() = binding.background
|
||||||
|
|
||||||
/** The actual background drawable of this [QueueSongViewHolder] that can be manipulated. */
|
override val background =
|
||||||
val backgroundDrawable =
|
|
||||||
MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply {
|
MaterialShapeDrawable.createWithElevationOverlay(binding.root.context).apply {
|
||||||
fillColor = binding.context.getAttrColorCompat(R.attr.colorSurface)
|
fillColor = binding.context.getAttrColorCompat(R.attr.colorSurface)
|
||||||
elevation = binding.context.getDimen(R.dimen.elevation_normal) * 5
|
elevation = binding.context.getDimen(R.dimen.elevation_normal) * 5
|
||||||
alpha = 0
|
alpha = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/** If this queue item is considered "in the future" (i.e has not played yet). */
|
|
||||||
var isFuture: Boolean
|
var isFuture: Boolean
|
||||||
get() = binding.songAlbumCover.isEnabled
|
get() = binding.songAlbumCover.isEnabled
|
||||||
set(value) {
|
set(value) {
|
||||||
// Don't want to disable clicking, just indicate the body and handle is disabled
|
|
||||||
binding.songAlbumCover.isEnabled = value
|
binding.songAlbumCover.isEnabled = value
|
||||||
binding.songName.isEnabled = value
|
binding.songName.isEnabled = value
|
||||||
binding.songInfo.isEnabled = value
|
binding.songInfo.isEnabled = value
|
||||||
|
@ -137,7 +136,7 @@ class QueueSongViewHolder private constructor(private val binding: ItemQueueSong
|
||||||
fillColor = binding.context.getAttrColorCompat(R.attr.colorSurface)
|
fillColor = binding.context.getAttrColorCompat(R.attr.colorSurface)
|
||||||
elevation = binding.context.getDimen(R.dimen.elevation_normal)
|
elevation = binding.context.getDimen(R.dimen.elevation_normal)
|
||||||
},
|
},
|
||||||
backgroundDrawable))
|
background))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -148,7 +147,7 @@ class QueueSongViewHolder private constructor(private val binding: ItemQueueSong
|
||||||
*/
|
*/
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
fun bind(song: Song, listener: EditableListListener<Song>) {
|
fun bind(song: Song, listener: EditableListListener<Song>) {
|
||||||
listener.bind(song, this, bodyView, binding.songDragHandle)
|
listener.bind(song, this, body, binding.songDragHandle)
|
||||||
binding.songAlbumCover.bind(song)
|
binding.songAlbumCover.bind(song)
|
||||||
binding.songName.text = song.name.resolve(binding.context)
|
binding.songName.text = song.name.resolve(binding.context)
|
||||||
binding.songInfo.text = song.artists.resolveNames(binding.context)
|
binding.songInfo.text = song.artists.resolveNames(binding.context)
|
||||||
|
@ -170,7 +169,7 @@ class QueueSongViewHolder private constructor(private val binding: ItemQueueSong
|
||||||
* @return A new instance.
|
* @return A new instance.
|
||||||
*/
|
*/
|
||||||
fun from(parent: View) =
|
fun from(parent: View) =
|
||||||
QueueSongViewHolder(ItemQueueSongBinding.inflate(parent.context.inflater))
|
QueueSongViewHolder(ItemEditableSongBinding.inflate(parent.context.inflater))
|
||||||
|
|
||||||
/** A comparator that can be used with DiffUtil. */
|
/** A comparator that can be used with DiffUtil. */
|
||||||
val DIFF_CALLBACK = SongViewHolder.DIFF_CALLBACK
|
val DIFF_CALLBACK = SongViewHolder.DIFF_CALLBACK
|
||||||
|
|
|
@ -18,15 +18,9 @@
|
||||||
|
|
||||||
package org.oxycblt.auxio.playback.queue
|
package org.oxycblt.auxio.playback.queue
|
||||||
|
|
||||||
import android.graphics.Canvas
|
|
||||||
import android.view.animation.AccelerateDecelerateInterpolator
|
|
||||||
import androidx.core.view.isInvisible
|
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.list.recycler.MaterialDragCallback
|
||||||
import org.oxycblt.auxio.util.getDimen
|
|
||||||
import org.oxycblt.auxio.util.getInteger
|
|
||||||
import org.oxycblt.auxio.util.logD
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A highly customized [ItemTouchHelper.Callback] that enables some extra eye candy in the queue UI,
|
* A highly customized [ItemTouchHelper.Callback] that enables some extra eye candy in the queue UI,
|
||||||
|
@ -34,108 +28,16 @@ import org.oxycblt.auxio.util.logD
|
||||||
*
|
*
|
||||||
* @author Alexander Capehart (OxygenCobalt)
|
* @author Alexander Capehart (OxygenCobalt)
|
||||||
*/
|
*/
|
||||||
class QueueDragCallback(private val playbackModel: QueueViewModel) : ItemTouchHelper.Callback() {
|
class QueueDragCallback(private val queueModel: QueueViewModel) : MaterialDragCallback() {
|
||||||
private var shouldLift = true
|
|
||||||
|
|
||||||
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) =
|
|
||||||
makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, ItemTouchHelper.UP or ItemTouchHelper.DOWN) or
|
|
||||||
makeFlag(ItemTouchHelper.ACTION_STATE_SWIPE, ItemTouchHelper.START)
|
|
||||||
|
|
||||||
override fun onChildDraw(
|
|
||||||
c: Canvas,
|
|
||||||
recyclerView: RecyclerView,
|
|
||||||
viewHolder: RecyclerView.ViewHolder,
|
|
||||||
dX: Float,
|
|
||||||
dY: Float,
|
|
||||||
actionState: Int,
|
|
||||||
isCurrentlyActive: Boolean
|
|
||||||
) {
|
|
||||||
val holder = viewHolder as QueueSongViewHolder
|
|
||||||
|
|
||||||
// Hook drag events to "lifting" the queue item (i.e raising it's elevation). Make sure
|
|
||||||
// this is only done once when the item is initially picked up.
|
|
||||||
// TODO: I think this is possible to improve with a raw ValueAnimator.
|
|
||||||
if (shouldLift && isCurrentlyActive && actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
|
|
||||||
logD("Lifting queue item")
|
|
||||||
|
|
||||||
val bg = holder.backgroundDrawable
|
|
||||||
val elevation = recyclerView.context.getDimen(R.dimen.elevation_normal)
|
|
||||||
holder.itemView
|
|
||||||
.animate()
|
|
||||||
.translationZ(elevation)
|
|
||||||
.setDuration(
|
|
||||||
recyclerView.context.getInteger(R.integer.anim_fade_exit_duration).toLong())
|
|
||||||
.setUpdateListener {
|
|
||||||
bg.alpha = ((holder.itemView.translationZ / elevation) * 255).toInt()
|
|
||||||
}
|
|
||||||
.setInterpolator(AccelerateDecelerateInterpolator())
|
|
||||||
.start()
|
|
||||||
|
|
||||||
shouldLift = false
|
|
||||||
}
|
|
||||||
|
|
||||||
// We show a background with a delete icon behind the queue song each time one is swiped
|
|
||||||
// away. To avoid working with canvas, this is simply placed behind the queue body.
|
|
||||||
// That comes with a couple of problems, however. For one, the background view will always
|
|
||||||
// lag behind the body view, resulting in a noticeable pixel offset when dragging. To fix
|
|
||||||
// this, we make this a separate view and make this view invisible whenever the item is
|
|
||||||
// not being swiped. This issue is also the reason why the background is not merged with
|
|
||||||
// the FrameLayout within the queue item.
|
|
||||||
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
|
|
||||||
holder.backgroundView.isInvisible = dX == 0f
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update other translations. We do not call the default implementation, so we must do
|
|
||||||
// this ourselves.
|
|
||||||
holder.bodyView.translationX = dX
|
|
||||||
holder.itemView.translationY = dY
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
|
|
||||||
// When an elevated item is cleared, we reset the elevation using another animation.
|
|
||||||
val holder = viewHolder as QueueSongViewHolder
|
|
||||||
|
|
||||||
// This function can be called multiple times, so only start the animation when the view's
|
|
||||||
// translationZ is already non-zero.
|
|
||||||
if (holder.itemView.translationZ != 0f) {
|
|
||||||
logD("Dropping queue item")
|
|
||||||
|
|
||||||
val bg = holder.backgroundDrawable
|
|
||||||
val elevation = recyclerView.context.getDimen(R.dimen.elevation_normal)
|
|
||||||
holder.itemView
|
|
||||||
.animate()
|
|
||||||
.translationZ(0f)
|
|
||||||
.setDuration(
|
|
||||||
recyclerView.context.getInteger(R.integer.anim_fade_exit_duration).toLong())
|
|
||||||
.setUpdateListener {
|
|
||||||
bg.alpha = ((holder.itemView.translationZ / elevation) * 255).toInt()
|
|
||||||
}
|
|
||||||
.setInterpolator(AccelerateDecelerateInterpolator())
|
|
||||||
.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
shouldLift = true
|
|
||||||
|
|
||||||
// Reset translations. We do not call the default implementation, so we must do
|
|
||||||
// this ourselves.
|
|
||||||
holder.bodyView.translationX = 0f
|
|
||||||
holder.itemView.translationY = 0f
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onMove(
|
override fun onMove(
|
||||||
recyclerView: RecyclerView,
|
recyclerView: RecyclerView,
|
||||||
viewHolder: RecyclerView.ViewHolder,
|
viewHolder: RecyclerView.ViewHolder,
|
||||||
target: RecyclerView.ViewHolder
|
target: RecyclerView.ViewHolder
|
||||||
): Boolean {
|
) =
|
||||||
logD("${viewHolder.bindingAdapterPosition} ${target.bindingAdapterPosition}")
|
queueModel.moveQueueDataItems(
|
||||||
return playbackModel.moveQueueDataItems(
|
|
||||||
viewHolder.bindingAdapterPosition, target.bindingAdapterPosition)
|
viewHolder.bindingAdapterPosition, target.bindingAdapterPosition)
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
||||||
playbackModel.removeQueueDataItem(viewHolder.bindingAdapterPosition)
|
queueModel.removeQueueDataItem(viewHolder.bindingAdapterPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Long-press events are too buggy, only allow dragging with the handle.
|
|
||||||
override fun isLongPressDragEnabled() = false
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
style="@style/Widget.Auxio.RecyclerView.Linear"
|
style="@style/Widget.Auxio.RecyclerView.Linear"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:listitem="@layout/item_queue_song" />
|
tools:listitem="@layout/item_editable_song" />
|
||||||
|
|
||||||
<com.google.android.material.divider.MaterialDivider
|
<com.google.android.material.divider.MaterialDivider
|
||||||
android:id="@+id/queue_divider"
|
android:id="@+id/queue_divider"
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="end|center_vertical"
|
android:layout_gravity="end|center_vertical"
|
||||||
android:layout_marginEnd="@dimen/spacing_small"
|
android:layout_marginEnd="@dimen/spacing_small"
|
||||||
android:contentDescription="@string/desc_clear_queue_item"
|
android:contentDescription="@string/desc_remove_song"
|
||||||
android:padding="@dimen/spacing_medium"
|
android:padding="@dimen/spacing_medium"
|
||||||
android:src="@drawable/ic_delete_24"
|
android:src="@drawable/ic_delete_24"
|
||||||
app:tint="?attr/colorOnError" />
|
app:tint="?attr/colorOnError" />
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="@dimen/spacing_mid_medium"
|
android:layout_marginEnd="@dimen/spacing_mid_medium"
|
||||||
android:contentDescription="@string/desc_queue_handle"
|
android:contentDescription="@string/desc_song_handle"
|
||||||
app:icon="@drawable/ic_handle_24"
|
app:icon="@drawable/ic_handle_24"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/song_album_cover"
|
app:layout_constraintBottom_toBottomOf="@+id/song_album_cover"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
|
@ -89,8 +89,8 @@
|
||||||
<string name="desc_change_repeat">تغيير وضع التكرار</string>
|
<string name="desc_change_repeat">تغيير وضع التكرار</string>
|
||||||
<string name="desc_shuffle">تشغيل او اطفاء الخلط</string>
|
<string name="desc_shuffle">تشغيل او اطفاء الخلط</string>
|
||||||
<string name="desc_shuffle_all">خلط جميع الاغاني</string>
|
<string name="desc_shuffle_all">خلط جميع الاغاني</string>
|
||||||
<string name="desc_clear_queue_item">إزالة اغنية من الطابور</string>
|
<string name="desc_remove_song">إزالة اغنية من الطابور</string>
|
||||||
<string name="desc_queue_handle">نقل اغنية من الطابور</string>
|
<string name="desc_song_handle">نقل اغنية من الطابور</string>
|
||||||
<string name="desc_tab_handle">تحريك التبويت</string>
|
<string name="desc_tab_handle">تحريك التبويت</string>
|
||||||
<string name="desc_clear_search">إزالة كلمة البحث</string>
|
<string name="desc_clear_search">إزالة كلمة البحث</string>
|
||||||
<string name="desc_music_dir_delete">إزالة المجلد المستبعد</string>
|
<string name="desc_music_dir_delete">إزالة المجلد المستبعد</string>
|
||||||
|
|
|
@ -144,7 +144,7 @@
|
||||||
<string name="err_bad_dir">Гэтая папка не падтрымліваецца</string>
|
<string name="err_bad_dir">Гэтая папка не падтрымліваецца</string>
|
||||||
<string name="err_did_not_restore">Немагчыма аднавіць стан</string>
|
<string name="err_did_not_restore">Немагчыма аднавіць стан</string>
|
||||||
<string name="desc_track_number">Кампазіцыя %d</string>
|
<string name="desc_track_number">Кампазіцыя %d</string>
|
||||||
<string name="desc_queue_handle">Перамясціць песню ў чаргу</string>
|
<string name="desc_song_handle">Перамясціць песню ў чаргу</string>
|
||||||
<string name="err_no_app">Не знойдзена прыкладання, якое можа справіцца з гэтай задачай</string>
|
<string name="err_no_app">Не знойдзена прыкладання, якое можа справіцца з гэтай задачай</string>
|
||||||
<string name="desc_play_pause">Прайграванне або прыпыненне</string>
|
<string name="desc_play_pause">Прайграванне або прыпыненне</string>
|
||||||
<string name="err_did_not_save">Немагчыма захаваць стан</string>
|
<string name="err_did_not_save">Немагчыма захаваць стан</string>
|
||||||
|
@ -153,7 +153,7 @@
|
||||||
<string name="desc_change_repeat">Змяніць рэжым паўтору</string>
|
<string name="desc_change_repeat">Змяніць рэжым паўтору</string>
|
||||||
<string name="desc_auxio_icon">Значок Auxio</string>
|
<string name="desc_auxio_icon">Значок Auxio</string>
|
||||||
<string name="desc_shuffle">Уключыце або выключыце перамешванне</string>
|
<string name="desc_shuffle">Уключыце або выключыце перамешванне</string>
|
||||||
<string name="desc_clear_queue_item">Выдаліць гэтую песню з чаргі</string>
|
<string name="desc_remove_song">Выдаліць гэтую песню з чаргі</string>
|
||||||
<string name="desc_shuffle_all">Перамяшаць усе песні</string>
|
<string name="desc_shuffle_all">Перамяшаць усе песні</string>
|
||||||
<string name="desc_exit">Спыніць прайграванне</string>
|
<string name="desc_exit">Спыніць прайграванне</string>
|
||||||
<string name="desc_queue_bar">Адкрыйце чаргу</string>
|
<string name="desc_queue_bar">Адкрыйце чаргу</string>
|
||||||
|
|
|
@ -109,8 +109,8 @@
|
||||||
<string name="desc_change_repeat">Změnit režim opakování</string>
|
<string name="desc_change_repeat">Změnit režim opakování</string>
|
||||||
<string name="desc_shuffle">Vypnout nebo zapnout náhodné přehrávání</string>
|
<string name="desc_shuffle">Vypnout nebo zapnout náhodné přehrávání</string>
|
||||||
<string name="desc_shuffle_all">Náhodně přehrávat vše</string>
|
<string name="desc_shuffle_all">Náhodně přehrávat vše</string>
|
||||||
<string name="desc_clear_queue_item">Odebrat tuto skladbu z fronty</string>
|
<string name="desc_remove_song">Odebrat tuto skladbu z fronty</string>
|
||||||
<string name="desc_queue_handle">Přesunout tuto skladbu ve frontě</string>
|
<string name="desc_song_handle">Přesunout tuto skladbu ve frontě</string>
|
||||||
<string name="desc_tab_handle">Přesunout tuto kartu</string>
|
<string name="desc_tab_handle">Přesunout tuto kartu</string>
|
||||||
<string name="desc_clear_search">Vymazat hledání</string>
|
<string name="desc_clear_search">Vymazat hledání</string>
|
||||||
<string name="desc_music_dir_delete">Odebrat složku</string>
|
<string name="desc_music_dir_delete">Odebrat složku</string>
|
||||||
|
|
|
@ -125,7 +125,7 @@
|
||||||
<string name="set_repeat_pause">Pause bei Wiederholung</string>
|
<string name="set_repeat_pause">Pause bei Wiederholung</string>
|
||||||
<string name="set_repeat_pause_desc">Pausieren, wenn ein Song wiederholt wird</string>
|
<string name="set_repeat_pause_desc">Pausieren, wenn ein Song wiederholt wird</string>
|
||||||
<string name="desc_shuffle">Zufällig an- oder ausschalten</string>
|
<string name="desc_shuffle">Zufällig an- oder ausschalten</string>
|
||||||
<string name="desc_queue_handle">Lied in der Warteschlange verschieben</string>
|
<string name="desc_song_handle">Lied in der Warteschlange verschieben</string>
|
||||||
<string name="desc_music_dir_delete">Verzechnis entfernen</string>
|
<string name="desc_music_dir_delete">Verzechnis entfernen</string>
|
||||||
<string name="desc_no_cover">Albumcover</string>
|
<string name="desc_no_cover">Albumcover</string>
|
||||||
<string name="def_playback">Keine Musik wird gespielt</string>
|
<string name="def_playback">Keine Musik wird gespielt</string>
|
||||||
|
@ -133,7 +133,7 @@
|
||||||
<string name="set_lib_tabs_desc">Sichtbarkeit und Ordnung der Bibliotheksregisterkarten ändern</string>
|
<string name="set_lib_tabs_desc">Sichtbarkeit und Ordnung der Bibliotheksregisterkarten ändern</string>
|
||||||
<string name="lbl_name">Name</string>
|
<string name="lbl_name">Name</string>
|
||||||
<string name="desc_shuffle_all">Alle Lieder zufällig</string>
|
<string name="desc_shuffle_all">Alle Lieder zufällig</string>
|
||||||
<string name="desc_clear_queue_item">Lied in der Warteschlange löschen</string>
|
<string name="desc_remove_song">Lied in der Warteschlange löschen</string>
|
||||||
<string name="desc_tab_handle">Tab versetzen</string>
|
<string name="desc_tab_handle">Tab versetzen</string>
|
||||||
<string name="def_artist">Unbekannter Künstler</string>
|
<string name="def_artist">Unbekannter Künstler</string>
|
||||||
<string name="lbl_duration">Dauer</string>
|
<string name="lbl_duration">Dauer</string>
|
||||||
|
|
|
@ -91,8 +91,8 @@
|
||||||
<string name="desc_change_repeat">Cambiar modo de repetición</string>
|
<string name="desc_change_repeat">Cambiar modo de repetición</string>
|
||||||
<string name="desc_shuffle">Act/des mezcla</string>
|
<string name="desc_shuffle">Act/des mezcla</string>
|
||||||
<string name="desc_shuffle_all">Mezclar todo</string>
|
<string name="desc_shuffle_all">Mezclar todo</string>
|
||||||
<string name="desc_clear_queue_item">Quitar canción de la cola</string>
|
<string name="desc_remove_song">Quitar canción de la cola</string>
|
||||||
<string name="desc_queue_handle">Mover canción en la cola</string>
|
<string name="desc_song_handle">Mover canción en la cola</string>
|
||||||
<string name="desc_tab_handle">Mover pestaña</string>
|
<string name="desc_tab_handle">Mover pestaña</string>
|
||||||
<string name="desc_clear_search">Borrar historial de búsqueda</string>
|
<string name="desc_clear_search">Borrar historial de búsqueda</string>
|
||||||
<string name="desc_music_dir_delete">Quitar carpeta</string>
|
<string name="desc_music_dir_delete">Quitar carpeta</string>
|
||||||
|
|
|
@ -203,8 +203,8 @@
|
||||||
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
|
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
|
||||||
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
|
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
|
||||||
<string name="clr_red">Vermello</string>
|
<string name="clr_red">Vermello</string>
|
||||||
<string name="desc_clear_queue_item">Quitar esta canción da cola</string>
|
<string name="desc_remove_song">Quitar esta canción da cola</string>
|
||||||
<string name="desc_queue_handle">Mover está canción na cola</string>
|
<string name="desc_song_handle">Mover está canción na cola</string>
|
||||||
<string name="desc_tab_handle">Mover esta pestana</string>
|
<string name="desc_tab_handle">Mover esta pestana</string>
|
||||||
<string name="clr_pink">Rosa</string>
|
<string name="clr_pink">Rosa</string>
|
||||||
<string name="clr_purple">Morado</string>
|
<string name="clr_purple">Morado</string>
|
||||||
|
|
|
@ -107,8 +107,8 @@
|
||||||
<string name="desc_track_number">Zvučni zapis %d</string>
|
<string name="desc_track_number">Zvučni zapis %d</string>
|
||||||
<string name="desc_shuffle">Omogućite ili onemogućite miješanje</string>
|
<string name="desc_shuffle">Omogućite ili onemogućite miješanje</string>
|
||||||
<string name="desc_shuffle_all">Izmiješaj sve pjesme</string>
|
<string name="desc_shuffle_all">Izmiješaj sve pjesme</string>
|
||||||
<string name="desc_clear_queue_item">Ukoni ovu pjesmu iz popisa pjesama</string>
|
<string name="desc_remove_song">Ukoni ovu pjesmu iz popisa pjesama</string>
|
||||||
<string name="desc_queue_handle">Premjesti ovu pjesmu u popisu pjesama</string>
|
<string name="desc_song_handle">Premjesti ovu pjesmu u popisu pjesama</string>
|
||||||
<string name="desc_tab_handle">Pomakni ovu pločicu</string>
|
<string name="desc_tab_handle">Pomakni ovu pločicu</string>
|
||||||
<string name="desc_clear_search">Izbriši pretražene pojmove</string>
|
<string name="desc_clear_search">Izbriši pretražene pojmove</string>
|
||||||
<string name="desc_music_dir_delete">Ukloni mapu</string>
|
<string name="desc_music_dir_delete">Ukloni mapu</string>
|
||||||
|
|
|
@ -139,7 +139,7 @@
|
||||||
<string name="desc_artist_image">Gambar Artis untuk %s</string>
|
<string name="desc_artist_image">Gambar Artis untuk %s</string>
|
||||||
<string name="set_detail_song_playback_mode">Saat diputar dari keterangan item</string>
|
<string name="set_detail_song_playback_mode">Saat diputar dari keterangan item</string>
|
||||||
<string name="set_dirs_mode_exclude_desc">Musik <b>tidak</b> akan dimuat dari folder yang Anda tambahkan.</string>
|
<string name="set_dirs_mode_exclude_desc">Musik <b>tidak</b> akan dimuat dari folder yang Anda tambahkan.</string>
|
||||||
<string name="desc_clear_queue_item">Hapus lagu antrian ini</string>
|
<string name="desc_remove_song">Hapus lagu antrian ini</string>
|
||||||
<string name="desc_clear_search">Hapus kueri pencarian</string>
|
<string name="desc_clear_search">Hapus kueri pencarian</string>
|
||||||
<string name="set_pre_amp_without">Penyesuaian tanpa tag</string>
|
<string name="set_pre_amp_without">Penyesuaian tanpa tag</string>
|
||||||
<string name="set_dirs">Folder musik</string>
|
<string name="set_dirs">Folder musik</string>
|
||||||
|
@ -159,7 +159,7 @@
|
||||||
<string name="desc_auxio_icon">Ikon Auxio</string>
|
<string name="desc_auxio_icon">Ikon Auxio</string>
|
||||||
<string name="desc_no_cover">Sampul album</string>
|
<string name="desc_no_cover">Sampul album</string>
|
||||||
<string name="desc_shuffle">Aktifkan atau nonaktifkan acak</string>
|
<string name="desc_shuffle">Aktifkan atau nonaktifkan acak</string>
|
||||||
<string name="desc_queue_handle">Pindahkan lagu antrian ini</string>
|
<string name="desc_song_handle">Pindahkan lagu antrian ini</string>
|
||||||
<string name="def_playback">Tidak ada musik yang diputar</string>
|
<string name="def_playback">Tidak ada musik yang diputar</string>
|
||||||
<string name="cdc_ogg">Audio Ogg</string>
|
<string name="cdc_ogg">Audio Ogg</string>
|
||||||
<string name="clr_brown">Cokelat</string>
|
<string name="clr_brown">Cokelat</string>
|
||||||
|
|
|
@ -94,8 +94,8 @@
|
||||||
<string name="desc_change_repeat">Cambia modalità ripetizione</string>
|
<string name="desc_change_repeat">Cambia modalità ripetizione</string>
|
||||||
<string name="desc_shuffle">Attiva o disattiva mescolamento</string>
|
<string name="desc_shuffle">Attiva o disattiva mescolamento</string>
|
||||||
<string name="desc_shuffle_all">Mescola tutte le canzoni</string>
|
<string name="desc_shuffle_all">Mescola tutte le canzoni</string>
|
||||||
<string name="desc_clear_queue_item">Rimuove questa canzone della coda</string>
|
<string name="desc_remove_song">Rimuove questa canzone della coda</string>
|
||||||
<string name="desc_queue_handle">Muove questa canzone della coda</string>
|
<string name="desc_song_handle">Muove questa canzone della coda</string>
|
||||||
<string name="desc_tab_handle">Muove questa scheda</string>
|
<string name="desc_tab_handle">Muove questa scheda</string>
|
||||||
<string name="desc_clear_search">Cancella la query di ricerca</string>
|
<string name="desc_clear_search">Cancella la query di ricerca</string>
|
||||||
<string name="desc_music_dir_delete">Rimuovi cartella</string>
|
<string name="desc_music_dir_delete">Rimuovi cartella</string>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<string name="lbl_duration">曲の長さ</string>
|
<string name="lbl_duration">曲の長さ</string>
|
||||||
<string name="set_save_desc">現在の再生状態を保存</string>
|
<string name="set_save_desc">現在の再生状態を保存</string>
|
||||||
<string name="desc_tab_handle">このタブを移動</string>
|
<string name="desc_tab_handle">このタブを移動</string>
|
||||||
<string name="desc_queue_handle">この再生待ちの曲を移動</string>
|
<string name="desc_song_handle">この再生待ちの曲を移動</string>
|
||||||
<string name="def_date">日付けがありません</string>
|
<string name="def_date">日付けがありません</string>
|
||||||
<string name="lbl_songs">曲</string>
|
<string name="lbl_songs">曲</string>
|
||||||
<string name="lbl_all_songs">すべての曲</string>
|
<string name="lbl_all_songs">すべての曲</string>
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
<string name="err_did_not_restore">再生状態を復元できません</string>
|
<string name="err_did_not_restore">再生状態を復元できません</string>
|
||||||
<string name="desc_track_number">トラック %d</string>
|
<string name="desc_track_number">トラック %d</string>
|
||||||
<string name="desc_play_pause">再生またはポーズ</string>
|
<string name="desc_play_pause">再生またはポーズ</string>
|
||||||
<string name="desc_clear_queue_item">再生待ちの曲を除去</string>
|
<string name="desc_remove_song">再生待ちの曲を除去</string>
|
||||||
<string name="desc_music_dir_delete">フォルダを除去</string>
|
<string name="desc_music_dir_delete">フォルダを除去</string>
|
||||||
<string name="desc_auxio_icon">Auxio アイコン</string>
|
<string name="desc_auxio_icon">Auxio アイコン</string>
|
||||||
<string name="desc_no_cover">アルバムカバー</string>
|
<string name="desc_no_cover">アルバムカバー</string>
|
||||||
|
|
|
@ -107,8 +107,8 @@
|
||||||
<string name="desc_change_repeat">반복 방식 변경</string>
|
<string name="desc_change_repeat">반복 방식 변경</string>
|
||||||
<string name="desc_shuffle">무작위 재생 켜기 또는 끄기</string>
|
<string name="desc_shuffle">무작위 재생 켜기 또는 끄기</string>
|
||||||
<string name="desc_shuffle_all">모든 곡 무작위 재생</string>
|
<string name="desc_shuffle_all">모든 곡 무작위 재생</string>
|
||||||
<string name="desc_clear_queue_item">이 대기열의 곡 제거</string>
|
<string name="desc_remove_song">이 대기열의 곡 제거</string>
|
||||||
<string name="desc_queue_handle">이 대기열의 곡 이동</string>
|
<string name="desc_song_handle">이 대기열의 곡 이동</string>
|
||||||
<string name="desc_tab_handle">이 탭 이동</string>
|
<string name="desc_tab_handle">이 탭 이동</string>
|
||||||
<string name="desc_clear_search">검색 기록 삭제</string>
|
<string name="desc_clear_search">검색 기록 삭제</string>
|
||||||
<string name="desc_music_dir_delete">폴더 제거</string>
|
<string name="desc_music_dir_delete">폴더 제거</string>
|
||||||
|
|
|
@ -138,7 +138,7 @@
|
||||||
<string name="set_replay_gain_mode_dynamic">Pageidaujamas albumui, jei vienas groja</string>
|
<string name="set_replay_gain_mode_dynamic">Pageidaujamas albumui, jei vienas groja</string>
|
||||||
<string name="err_no_app">Jokių programų nerasta, kurios galėtų atlikti šią užduotį</string>
|
<string name="err_no_app">Jokių programų nerasta, kurios galėtų atlikti šią užduotį</string>
|
||||||
<string name="desc_auxio_icon">„Auxio“ piktograma</string>
|
<string name="desc_auxio_icon">„Auxio“ piktograma</string>
|
||||||
<string name="desc_queue_handle">Perkelti šią eilės dainą</string>
|
<string name="desc_song_handle">Perkelti šią eilės dainą</string>
|
||||||
<string name="desc_tab_handle">Perkelti šį skirtuką</string>
|
<string name="desc_tab_handle">Perkelti šį skirtuką</string>
|
||||||
<string name="err_index_failed">Muzikos krovimas nepavyko</string>
|
<string name="err_index_failed">Muzikos krovimas nepavyko</string>
|
||||||
<string name="err_no_perms">„Auxio“ reikia leidimo skaityti jūsų muzikos biblioteką</string>
|
<string name="err_no_perms">„Auxio“ reikia leidimo skaityti jūsų muzikos biblioteką</string>
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
<string name="desc_clear_search">Išvalyti paieškos užklausą</string>
|
<string name="desc_clear_search">Išvalyti paieškos užklausą</string>
|
||||||
<string name="set_dirs_mode_exclude_desc">Muzika <b>nebus</b> įkeliama iš pridėtų aplankų jūs pridėsite.</string>
|
<string name="set_dirs_mode_exclude_desc">Muzika <b>nebus</b> įkeliama iš pridėtų aplankų jūs pridėsite.</string>
|
||||||
<string name="set_dirs_mode_include">Įtraukti</string>
|
<string name="set_dirs_mode_include">Įtraukti</string>
|
||||||
<string name="desc_clear_queue_item">Pašalinti šią eilės dainą</string>
|
<string name="desc_remove_song">Pašalinti šią eilės dainą</string>
|
||||||
<string name="set_playback_mode_songs">Groti iš visų dainų</string>
|
<string name="set_playback_mode_songs">Groti iš visų dainų</string>
|
||||||
<string name="set_playback_mode_none">Groti iš parodyto elemento</string>
|
<string name="set_playback_mode_none">Groti iš parodyto elemento</string>
|
||||||
<string name="set_playback_mode_album">Groti iš albumo</string>
|
<string name="set_playback_mode_album">Groti iš albumo</string>
|
||||||
|
|
|
@ -65,8 +65,8 @@
|
||||||
<string name="def_playback">സംഗീതം കളിക്കുന്നില്ല</string>
|
<string name="def_playback">സംഗീതം കളിക്കുന്നില്ല</string>
|
||||||
<string name="clr_yellow">മഞ്ഞ</string>
|
<string name="clr_yellow">മഞ്ഞ</string>
|
||||||
<string name="fmt_selected">%d തിരഞ്ഞെടുത്തു</string>
|
<string name="fmt_selected">%d തിരഞ്ഞെടുത്തു</string>
|
||||||
<string name="desc_clear_queue_item">വരിയിലെ ഈ ഗാനം നീക്കം ചെയ്യുക</string>
|
<string name="desc_remove_song">വരിയിലെ ഈ ഗാനം നീക്കം ചെയ്യുക</string>
|
||||||
<string name="desc_queue_handle">വരിയിലെ ഈ ഗാനം നീക്കുക</string>
|
<string name="desc_song_handle">വരിയിലെ ഈ ഗാനം നീക്കുക</string>
|
||||||
<string name="lbl_reset">പുനഃസജ്ജമാക്കുക</string>
|
<string name="lbl_reset">പുനഃസജ്ജമാക്കുക</string>
|
||||||
<string name="clr_brown">തവിട്ട്</string>
|
<string name="clr_brown">തവിട്ട്</string>
|
||||||
<string name="fmt_list">%1$s, %2$s</string>
|
<string name="fmt_list">%1$s, %2$s</string>
|
||||||
|
|
|
@ -162,8 +162,8 @@
|
||||||
<string name="set_restore_state">Afspeelstatus herstellen</string>
|
<string name="set_restore_state">Afspeelstatus herstellen</string>
|
||||||
<string name="set_restore_desc">Herstel de eerder opgeslagen afspeelstatus (indien aanwezig)</string>
|
<string name="set_restore_desc">Herstel de eerder opgeslagen afspeelstatus (indien aanwezig)</string>
|
||||||
<string name="err_did_not_restore">Geen staat kan hersteld worden</string>
|
<string name="err_did_not_restore">Geen staat kan hersteld worden</string>
|
||||||
<string name="desc_clear_queue_item">Verwijder dit wachtrij liedje</string>
|
<string name="desc_remove_song">Verwijder dit wachtrij liedje</string>
|
||||||
<string name="desc_queue_handle">Verplaats dit wachtrij liedje</string>
|
<string name="desc_song_handle">Verplaats dit wachtrij liedje</string>
|
||||||
<string name="desc_tab_handle">Verplaats deze tab</string>
|
<string name="desc_tab_handle">Verplaats deze tab</string>
|
||||||
<string name="desc_no_cover">Album cover</string>
|
<string name="desc_no_cover">Album cover</string>
|
||||||
<string name="def_track">Geen tracknummer</string>
|
<string name="def_track">Geen tracknummer</string>
|
||||||
|
|
|
@ -196,8 +196,8 @@
|
||||||
<string name="set_library">ਲਾਇਬ੍ਰੇਰੀ</string>
|
<string name="set_library">ਲਾਇਬ੍ਰੇਰੀ</string>
|
||||||
<string name="set_dirs">ਸੰਗੀਤ ਫੋਲਡਰ</string>
|
<string name="set_dirs">ਸੰਗੀਤ ਫੋਲਡਰ</string>
|
||||||
<string name="desc_queue_bar">ਕਤਾਰ ਖੋਲ੍ਹੋ</string>
|
<string name="desc_queue_bar">ਕਤਾਰ ਖੋਲ੍ਹੋ</string>
|
||||||
<string name="desc_clear_queue_item">ਇਸ ਕਤਾਰ ਗੀਤ ਨੂੰ ਹਟਾਓ</string>
|
<string name="desc_remove_song">ਇਸ ਕਤਾਰ ਗੀਤ ਨੂੰ ਹਟਾਓ</string>
|
||||||
<string name="desc_queue_handle">ਇਸ ਕਤਾਰ ਗੀਤ ਨੂੰ ਮੂਵ ਕਰੋ</string>
|
<string name="desc_song_handle">ਇਸ ਕਤਾਰ ਗੀਤ ਨੂੰ ਮੂਵ ਕਰੋ</string>
|
||||||
<string name="desc_change_repeat">ਦੁਹਰਾਓ ਮੋਡ ਬਦਲੋ</string>
|
<string name="desc_change_repeat">ਦੁਹਰਾਓ ਮੋਡ ਬਦਲੋ</string>
|
||||||
<string name="desc_shuffle">ਸ਼ਫਲ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ</string>
|
<string name="desc_shuffle">ਸ਼ਫਲ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ</string>
|
||||||
<string name="desc_shuffle_all">ਸਾਰੇ ਗੀਤਾਂ ਨੂੰ ਸ਼ਫਲ ਕਰੋ</string>
|
<string name="desc_shuffle_all">ਸਾਰੇ ਗੀਤਾਂ ਨੂੰ ਸ਼ਫਲ ਕਰੋ</string>
|
||||||
|
|
|
@ -137,7 +137,7 @@
|
||||||
<string name="set_headset_autoplay_desc">Automatycznie odtwórz muzykę po podłączeniu słuchawek (może nie działać na wszystkich urządzeniach)</string>
|
<string name="set_headset_autoplay_desc">Automatycznie odtwórz muzykę po podłączeniu słuchawek (może nie działać na wszystkich urządzeniach)</string>
|
||||||
<string name="set_reindex">Odśwież muzykę</string>
|
<string name="set_reindex">Odśwież muzykę</string>
|
||||||
<string name="set_reindex_desc">Odśwież bibliotekę muzyczną używając tagów z pamięci cache, jeśli są dostępne</string>
|
<string name="set_reindex_desc">Odśwież bibliotekę muzyczną używając tagów z pamięci cache, jeśli są dostępne</string>
|
||||||
<string name="desc_clear_queue_item">Usuń utwór z kolejki</string>
|
<string name="desc_remove_song">Usuń utwór z kolejki</string>
|
||||||
<string name="set_replay_gain_mode_album">Preferuj album</string>
|
<string name="set_replay_gain_mode_album">Preferuj album</string>
|
||||||
<string name="set_observing">Automatycznie odśwież</string>
|
<string name="set_observing">Automatycznie odśwież</string>
|
||||||
<string name="cdc_flac">FLAC</string>
|
<string name="cdc_flac">FLAC</string>
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
<string name="set_observing_desc">Automatycznie odśwież bibliotekę po wykryciu zmian (wymaga stałego powiadomienia)</string>
|
<string name="set_observing_desc">Automatycznie odśwież bibliotekę po wykryciu zmian (wymaga stałego powiadomienia)</string>
|
||||||
<string name="set_dirs_mode_exclude">Wyklucz</string>
|
<string name="set_dirs_mode_exclude">Wyklucz</string>
|
||||||
<string name="set_dirs_mode_include">Zawrzyj</string>
|
<string name="set_dirs_mode_include">Zawrzyj</string>
|
||||||
<string name="desc_queue_handle">Zmień pozycję utworu w kolejce</string>
|
<string name="desc_song_handle">Zmień pozycję utworu w kolejce</string>
|
||||||
<string name="desc_tab_handle">Przesuń kartę</string>
|
<string name="desc_tab_handle">Przesuń kartę</string>
|
||||||
<string name="desc_artist_image">Wizerunek wykonawcy dla %s</string>
|
<string name="desc_artist_image">Wizerunek wykonawcy dla %s</string>
|
||||||
<string name="lng_indexing">Ładuję bibliotekę muzyczną…</string>
|
<string name="lng_indexing">Ładuję bibliotekę muzyczną…</string>
|
||||||
|
|
|
@ -123,7 +123,7 @@
|
||||||
<string name="desc_skip_prev">Pular para a música anterior</string>
|
<string name="desc_skip_prev">Pular para a música anterior</string>
|
||||||
<string name="desc_change_repeat">Alterar o modo de repetição</string>
|
<string name="desc_change_repeat">Alterar o modo de repetição</string>
|
||||||
<string name="desc_shuffle_all">Aleatorizar todas das músicas</string>
|
<string name="desc_shuffle_all">Aleatorizar todas das músicas</string>
|
||||||
<string name="desc_clear_queue_item">Remover esta música da fila</string>
|
<string name="desc_remove_song">Remover esta música da fila</string>
|
||||||
<string name="desc_clear_search">Limpar histórico de pesquisa</string>
|
<string name="desc_clear_search">Limpar histórico de pesquisa</string>
|
||||||
<string name="desc_album_cover">Capa do álbum para %s</string>
|
<string name="desc_album_cover">Capa do álbum para %s</string>
|
||||||
<string name="desc_tab_handle">Mover esta aba</string>
|
<string name="desc_tab_handle">Mover esta aba</string>
|
||||||
|
@ -147,7 +147,7 @@
|
||||||
<string name="cdc_mka">Áudio Matroska</string>
|
<string name="cdc_mka">Áudio Matroska</string>
|
||||||
<string name="cdc_aac">Codificação de Audio Avançada (AAC)</string>
|
<string name="cdc_aac">Codificação de Audio Avançada (AAC)</string>
|
||||||
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
|
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
|
||||||
<string name="desc_queue_handle">Mover esta música da fila</string>
|
<string name="desc_song_handle">Mover esta música da fila</string>
|
||||||
<string name="clr_dynamic">Dinâmico</string>
|
<string name="clr_dynamic">Dinâmico</string>
|
||||||
<string name="fmt_lib_total_duration">Duração total: %s</string>
|
<string name="fmt_lib_total_duration">Duração total: %s</string>
|
||||||
<string name="fmt_indexing">Carregando sua biblioteca de músicas… (%1$d/%2$d)</string>
|
<string name="fmt_indexing">Carregando sua biblioteca de músicas… (%1$d/%2$d)</string>
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
<string name="err_no_perms">O Auxio precisa de permissão para ler a sua biblioteca de músicas</string>
|
<string name="err_no_perms">O Auxio precisa de permissão para ler a sua biblioteca de músicas</string>
|
||||||
<string name="err_no_dirs">Sem pastas</string>
|
<string name="err_no_dirs">Sem pastas</string>
|
||||||
<string name="err_bad_dir">Esta pasta não é compatível</string>
|
<string name="err_bad_dir">Esta pasta não é compatível</string>
|
||||||
<string name="desc_queue_handle">Mover esta música da fila</string>
|
<string name="desc_song_handle">Mover esta música da fila</string>
|
||||||
<string name="desc_music_dir_delete">Remover pasta</string>
|
<string name="desc_music_dir_delete">Remover pasta</string>
|
||||||
<string name="lbl_compilation_remix">Compilações de remix</string>
|
<string name="lbl_compilation_remix">Compilações de remix</string>
|
||||||
<string name="lbl_compilation_live">Compilação ao vivo</string>
|
<string name="lbl_compilation_live">Compilação ao vivo</string>
|
||||||
|
@ -195,7 +195,7 @@
|
||||||
<string name="set_restore_desc">Restaurar o estado de reprodução salvo anteriormente (se houver)</string>
|
<string name="set_restore_desc">Restaurar o estado de reprodução salvo anteriormente (se houver)</string>
|
||||||
<string name="desc_shuffle">Ativar ou desativar a reprodução aleatória</string>
|
<string name="desc_shuffle">Ativar ou desativar a reprodução aleatória</string>
|
||||||
<string name="desc_shuffle_all">Embaralhar todas as músicas</string>
|
<string name="desc_shuffle_all">Embaralhar todas as músicas</string>
|
||||||
<string name="desc_clear_queue_item">Remover esta música de fila</string>
|
<string name="desc_remove_song">Remover esta música de fila</string>
|
||||||
<string name="cdc_mka">Áudio Matroska</string>
|
<string name="cdc_mka">Áudio Matroska</string>
|
||||||
<string name="cdc_aac">Codificação de Audio Avançada (AAC)</string>
|
<string name="cdc_aac">Codificação de Audio Avançada (AAC)</string>
|
||||||
<string name="lbl_album">Álbum</string>
|
<string name="lbl_album">Álbum</string>
|
||||||
|
|
|
@ -93,8 +93,8 @@
|
||||||
<string name="desc_change_repeat">Режим повтора</string>
|
<string name="desc_change_repeat">Режим повтора</string>
|
||||||
<string name="desc_shuffle">Перемешивание</string>
|
<string name="desc_shuffle">Перемешивание</string>
|
||||||
<string name="desc_shuffle_all">Перемешать все треки</string>
|
<string name="desc_shuffle_all">Перемешать все треки</string>
|
||||||
<string name="desc_clear_queue_item">Удалить трек из очереди</string>
|
<string name="desc_remove_song">Удалить трек из очереди</string>
|
||||||
<string name="desc_queue_handle">Переместить трек в очереди</string>
|
<string name="desc_song_handle">Переместить трек в очереди</string>
|
||||||
<string name="desc_tab_handle">Переместить вкладку</string>
|
<string name="desc_tab_handle">Переместить вкладку</string>
|
||||||
<string name="desc_clear_search">Очистить поисковый запрос</string>
|
<string name="desc_clear_search">Очистить поисковый запрос</string>
|
||||||
<string name="desc_music_dir_delete">Удалить папку</string>
|
<string name="desc_music_dir_delete">Удалить папку</string>
|
||||||
|
|
|
@ -192,7 +192,7 @@
|
||||||
<string name="lbl_date_added">Eklendiği tarih</string>
|
<string name="lbl_date_added">Eklendiği tarih</string>
|
||||||
<string name="lbl_album_remix">Remix albüm</string>
|
<string name="lbl_album_remix">Remix albüm</string>
|
||||||
<string name="lbl_album_live">Canlı albüm</string>
|
<string name="lbl_album_live">Canlı albüm</string>
|
||||||
<string name="desc_clear_queue_item">Bu şarkıyı kuyruktan kaldır</string>
|
<string name="desc_remove_song">Bu şarkıyı kuyruktan kaldır</string>
|
||||||
<string name="lbl_singles">Tekliler</string>
|
<string name="lbl_singles">Tekliler</string>
|
||||||
<string name="lbl_single">Tekli</string>
|
<string name="lbl_single">Tekli</string>
|
||||||
<string name="lbl_mixtape">Karışık kaset</string>
|
<string name="lbl_mixtape">Karışık kaset</string>
|
||||||
|
@ -254,7 +254,7 @@
|
||||||
<string name="set_exclude_non_music">Müzik olmayanları hariç tut</string>
|
<string name="set_exclude_non_music">Müzik olmayanları hariç tut</string>
|
||||||
<string name="err_did_not_wipe">Durum temizlenemedi</string>
|
<string name="err_did_not_wipe">Durum temizlenemedi</string>
|
||||||
<string name="set_replay_gain_mode">ReplayGain stratejisi</string>
|
<string name="set_replay_gain_mode">ReplayGain stratejisi</string>
|
||||||
<string name="desc_queue_handle">Bu şarkıyı kuyrukta taşı</string>
|
<string name="desc_song_handle">Bu şarkıyı kuyrukta taşı</string>
|
||||||
<string name="fmt_list">%1$s, %2$s</string>
|
<string name="fmt_list">%1$s, %2$s</string>
|
||||||
<string name="set_content_desc">Müzik ve görüntülerin nasıl yükleneceğini denetleyin</string>
|
<string name="set_content_desc">Müzik ve görüntülerin nasıl yükleneceğini denetleyin</string>
|
||||||
<string name="set_music">Müzik</string>
|
<string name="set_music">Müzik</string>
|
||||||
|
|
|
@ -218,8 +218,8 @@
|
||||||
<string name="def_genre">Невідомий жанр</string>
|
<string name="def_genre">Невідомий жанр</string>
|
||||||
<string name="desc_queue_bar">Відкрити чергу</string>
|
<string name="desc_queue_bar">Відкрити чергу</string>
|
||||||
<string name="clr_yellow">Жовтий</string>
|
<string name="clr_yellow">Жовтий</string>
|
||||||
<string name="desc_queue_handle">Перемістити пісню в черзі</string>
|
<string name="desc_song_handle">Перемістити пісню в черзі</string>
|
||||||
<string name="desc_clear_queue_item">Видалити пісню з черги</string>
|
<string name="desc_remove_song">Видалити пісню з черги</string>
|
||||||
<string name="clr_cyan">Блакитний</string>
|
<string name="clr_cyan">Блакитний</string>
|
||||||
<string name="clr_teal">Зеленувато-блакитний</string>
|
<string name="clr_teal">Зеленувато-блакитний</string>
|
||||||
<string name="clr_purple">Фіолетовий</string>
|
<string name="clr_purple">Фіолетовий</string>
|
||||||
|
|
|
@ -93,8 +93,8 @@
|
||||||
<string name="desc_change_repeat">更改重复播放模式</string>
|
<string name="desc_change_repeat">更改重复播放模式</string>
|
||||||
<string name="desc_shuffle">开启或关闭随机播放模式</string>
|
<string name="desc_shuffle">开启或关闭随机播放模式</string>
|
||||||
<string name="desc_shuffle_all">随机播放所有曲目</string>
|
<string name="desc_shuffle_all">随机播放所有曲目</string>
|
||||||
<string name="desc_clear_queue_item">移除队列曲目</string>
|
<string name="desc_remove_song">移除队列曲目</string>
|
||||||
<string name="desc_queue_handle">移动队列曲目</string>
|
<string name="desc_song_handle">移动队列曲目</string>
|
||||||
<string name="desc_tab_handle">移动该标签</string>
|
<string name="desc_tab_handle">移动该标签</string>
|
||||||
<string name="desc_clear_search">清除搜索队列</string>
|
<string name="desc_clear_search">清除搜索队列</string>
|
||||||
<string name="desc_music_dir_delete">移除文件夹</string>
|
<string name="desc_music_dir_delete">移除文件夹</string>
|
||||||
|
|
|
@ -311,8 +311,8 @@
|
||||||
<string name="desc_new_playlist">Create a new playlist</string>
|
<string name="desc_new_playlist">Create a new playlist</string>
|
||||||
<string name="desc_exit">Stop playback</string>
|
<string name="desc_exit">Stop playback</string>
|
||||||
|
|
||||||
<string name="desc_clear_queue_item">Remove this queue song</string>
|
<string name="desc_remove_song">Remove this song</string>
|
||||||
<string name="desc_queue_handle">Move this queue song</string>
|
<string name="desc_song_handle">Move this song</string>
|
||||||
<string name="desc_queue_bar">Open the queue</string>
|
<string name="desc_queue_bar">Open the queue</string>
|
||||||
<string name="desc_tab_handle">Move this tab</string>
|
<string name="desc_tab_handle">Move this tab</string>
|
||||||
<string name="desc_clear_search">Clear search query</string>
|
<string name="desc_clear_search">Clear search query</string>
|
||||||
|
|
Loading…
Reference in a new issue