[Backup & Restore] Better Backup & Restore
Removed Playing Queue, Most Played, History, etc. from Backup. Better Backup & Restore for Playlists & Custom Artist Images.
This commit is contained in:
parent
076fc1d9c5
commit
1d77b3155a
40 changed files with 96 additions and 114 deletions
|
@ -62,7 +62,7 @@ class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener {
|
||||||
if (!hasPermissions()) {
|
if (!hasPermissions()) {
|
||||||
findNavController(R.id.fragment_container).navigate(R.id.permissionFragment)
|
findNavController(R.id.fragment_container).navigate(R.id.permissionFragment)
|
||||||
}
|
}
|
||||||
if (BuildConfig.VERSION_CODE > PreferenceUtil.lastVersion){
|
if (BuildConfig.VERSION_CODE > PreferenceUtil.lastVersion && !BuildConfig.DEBUG){
|
||||||
NavigationUtil.gotoWhatNews(this)
|
NavigationUtil.gotoWhatNews(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,8 @@ class BackupViewModel : ViewModel() {
|
||||||
|
|
||||||
suspend fun restoreBackup(activity: Activity, inputStream: InputStream?, contents: List<BackupContent>) {
|
suspend fun restoreBackup(activity: Activity, inputStream: InputStream?, contents: List<BackupContent>) {
|
||||||
BackupHelper.restoreBackup(activity, inputStream, contents)
|
BackupHelper.restoreBackup(activity, inputStream, contents)
|
||||||
if (contents.contains(BackupContent.SETTINGS)) {
|
if (contents.contains(BackupContent.SETTINGS) or contents.contains(BackupContent.CUSTOM_ARTIST_IMAGES)) {
|
||||||
|
// We have to restart App when Preferences i.e. Settings or Artist Images are to be restored
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
val intent = Intent(
|
val intent = Intent(
|
||||||
activity,
|
activity,
|
||||||
|
|
|
@ -3,9 +3,11 @@ package code.name.monkey.retromusic.fragments.backup
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import code.name.monkey.retromusic.databinding.ActivityRestoreBinding
|
import code.name.monkey.retromusic.databinding.ActivityRestoreBinding
|
||||||
import code.name.monkey.retromusic.helper.BackupContent
|
import code.name.monkey.retromusic.helper.BackupContent
|
||||||
|
@ -27,6 +29,7 @@ class RestoreActivity : AppCompatActivity() {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = ActivityRestoreBinding.inflate(layoutInflater)
|
binding = ActivityRestoreBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
setWidth()
|
||||||
val backupUri = intent?.data
|
val backupUri = intent?.data
|
||||||
binding.backupName.setText(getFileName(backupUri))
|
binding.backupName.setText(getFileName(backupUri))
|
||||||
binding.cancelButton.setOnClickListener {
|
binding.cancelButton.setOnClickListener {
|
||||||
|
@ -35,7 +38,6 @@ class RestoreActivity : AppCompatActivity() {
|
||||||
binding.restoreButton.setOnClickListener {
|
binding.restoreButton.setOnClickListener {
|
||||||
val backupContents = mutableListOf<BackupContent>()
|
val backupContents = mutableListOf<BackupContent>()
|
||||||
if (binding.checkSettings.isChecked) backupContents.add(SETTINGS)
|
if (binding.checkSettings.isChecked) backupContents.add(SETTINGS)
|
||||||
if (binding.checkQueue.isChecked) backupContents.add(QUEUE)
|
|
||||||
if (binding.checkDatabases.isChecked) backupContents.add(PLAYLISTS)
|
if (binding.checkDatabases.isChecked) backupContents.add(PLAYLISTS)
|
||||||
if (binding.checkArtistImages.isChecked) backupContents.add(CUSTOM_ARTIST_IMAGES)
|
if (binding.checkArtistImages.isChecked) backupContents.add(CUSTOM_ARTIST_IMAGES)
|
||||||
if (binding.checkUserImages.isChecked) backupContents.add(USER_IMAGES)
|
if (binding.checkUserImages.isChecked) backupContents.add(USER_IMAGES)
|
||||||
|
@ -82,4 +84,9 @@ class RestoreActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
return "Backup"
|
return "Backup"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setWidth() {
|
||||||
|
val width = resources.displayMetrics.widthPixels * 0.8
|
||||||
|
binding.root.updateLayoutParams<ViewGroup.LayoutParams> { this.width = width.toInt() }
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -29,6 +29,7 @@ import android.widget.Toast
|
||||||
import androidx.core.view.doOnPreDraw
|
import androidx.core.view.doOnPreDraw
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import code.name.monkey.retromusic.Constants.USER_BANNER
|
import code.name.monkey.retromusic.Constants.USER_BANNER
|
||||||
import code.name.monkey.retromusic.Constants.USER_PROFILE
|
import code.name.monkey.retromusic.Constants.USER_PROFILE
|
||||||
|
@ -50,7 +51,6 @@ import com.bumptech.glide.request.target.Target
|
||||||
import com.github.dhaval2404.imagepicker.ImagePicker
|
import com.github.dhaval2404.imagepicker.ImagePicker
|
||||||
import com.github.dhaval2404.imagepicker.constant.ImageProvider
|
import com.github.dhaval2404.imagepicker.constant.ImageProvider
|
||||||
import com.google.android.material.transition.MaterialContainerTransform
|
import com.google.android.material.transition.MaterialContainerTransform
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
@ -202,15 +202,15 @@ class UserInfoFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun saveImage(bitmap: Bitmap, fileName: String) {
|
private fun saveImage(bitmap: Bitmap, fileName: String) {
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
val appDir = requireContext().filesDir
|
val appDir = requireContext().filesDir
|
||||||
val file = File(appDir, fileName)
|
val file = File(appDir, fileName)
|
||||||
var successful = false
|
var successful = false
|
||||||
runCatching {
|
runCatching {
|
||||||
val os = BufferedOutputStream(FileOutputStream(file))
|
BufferedOutputStream(FileOutputStream(file)).use {
|
||||||
successful = ImageUtil.resizeBitmap(bitmap, 2048)
|
successful = ImageUtil.resizeBitmap(bitmap, 2048)
|
||||||
.compress(Bitmap.CompressFormat.WEBP, 100, os)
|
.compress(Bitmap.CompressFormat.WEBP, 100, it)
|
||||||
withContext(Dispatchers.IO) { os.close() }
|
}
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
it.printStackTrace()
|
it.printStackTrace()
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,21 +2,28 @@ package code.name.monkey.retromusic.helper
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.util.Log
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.content.edit
|
|
||||||
import androidx.preference.PreferenceManager
|
|
||||||
import code.name.monkey.retromusic.App
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.BuildConfig
|
import code.name.monkey.retromusic.BuildConfig
|
||||||
|
import code.name.monkey.retromusic.db.PlaylistEntity
|
||||||
|
import code.name.monkey.retromusic.db.toSongEntity
|
||||||
import code.name.monkey.retromusic.helper.BackupContent.*
|
import code.name.monkey.retromusic.helper.BackupContent.*
|
||||||
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
import code.name.monkey.retromusic.repository.Repository
|
||||||
|
import code.name.monkey.retromusic.repository.SongRepository
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import org.koin.core.component.KoinComponent
|
||||||
|
import org.koin.core.component.inject
|
||||||
import java.io.*
|
import java.io.*
|
||||||
import java.util.zip.ZipEntry
|
import java.util.zip.ZipEntry
|
||||||
import java.util.zip.ZipInputStream
|
import java.util.zip.ZipInputStream
|
||||||
import java.util.zip.ZipOutputStream
|
import java.util.zip.ZipOutputStream
|
||||||
|
|
||||||
object BackupHelper {
|
object BackupHelper : KoinComponent {
|
||||||
|
private val repository by inject<Repository>()
|
||||||
|
private val songRepository by inject<SongRepository>()
|
||||||
|
|
||||||
suspend fun createBackup(context: Context, name: String) {
|
suspend fun createBackup(context: Context, name: String) {
|
||||||
val backupFile =
|
val backupFile =
|
||||||
File(backupRootPath + File.separator + name + APPEND_EXTENSION)
|
File(backupRootPath + File.separator + name + APPEND_EXTENSION)
|
||||||
|
@ -24,17 +31,18 @@ object BackupHelper {
|
||||||
backupFile.parentFile?.mkdirs()
|
backupFile.parentFile?.mkdirs()
|
||||||
}
|
}
|
||||||
val zipItems = mutableListOf<ZipItem>()
|
val zipItems = mutableListOf<ZipItem>()
|
||||||
zipItems.addAll(getDatabaseZipItems(context))
|
zipItems.addAll(getPlaylistZipItems(context))
|
||||||
zipItems.addAll(getSettingsZipItems(context))
|
zipItems.addAll(getSettingsZipItems(context))
|
||||||
getUserImageZipItems(context)?.let { zipItems.addAll(it) }
|
getUserImageZipItems(context)?.let { zipItems.addAll(it) }
|
||||||
zipItems.addAll(getCustomArtistZipItems(context))
|
zipItems.addAll(getCustomArtistZipItems(context))
|
||||||
zipItems.addAll(getQueueZipItems(context))
|
|
||||||
zipAll(zipItems, backupFile)
|
zipAll(zipItems, backupFile)
|
||||||
|
// Clean Cache Playlist Directory
|
||||||
|
File(context.filesDir, PLAYLISTS_PATH).deleteRecursively()
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun zipAll(zipItems: List<ZipItem>, backupFile: File) =
|
private suspend fun zipAll(zipItems: List<ZipItem>, backupFile: File) =
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
kotlin.runCatching {
|
runCatching {
|
||||||
ZipOutputStream(BufferedOutputStream(FileOutputStream(backupFile))).use { out ->
|
ZipOutputStream(BufferedOutputStream(FileOutputStream(backupFile))).use { out ->
|
||||||
for (zipItem in zipItems) {
|
for (zipItem in zipItems) {
|
||||||
FileInputStream(zipItem.filePath).use { fi ->
|
FileInputStream(zipItem.filePath).use { fi ->
|
||||||
|
@ -51,7 +59,6 @@ object BackupHelper {
|
||||||
Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT)
|
Toast.makeText(App.getContext(), "Couldn't create backup", Toast.LENGTH_SHORT)
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
throw Exception(it)
|
|
||||||
}.onSuccess {
|
}.onSuccess {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
|
@ -62,26 +69,31 @@ object BackupHelper {
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getDatabaseZipItems(context: Context): List<ZipItem> {
|
private suspend fun getPlaylistZipItems(context: Context): List<ZipItem> {
|
||||||
return context.databaseList().filter {
|
val playlistZipItems = mutableListOf<ZipItem>()
|
||||||
it.endsWith(".db") && it != queueDatabase
|
// Cache Playlist files in App storage
|
||||||
}.map {
|
val playlistFolder = File(context.filesDir, PLAYLISTS_PATH)
|
||||||
ZipItem(context.getDatabasePath(it).absolutePath, "$DATABASES_PATH${File.separator}$it")
|
if (!playlistFolder.exists()) {
|
||||||
|
playlistFolder.mkdirs()
|
||||||
}
|
}
|
||||||
}
|
for (playlist in repository.fetchPlaylistWithSongs()) {
|
||||||
|
runCatching {
|
||||||
private fun getQueueZipItems(context: Context): List<ZipItem> {
|
M3UWriter.writeIO(playlistFolder, playlist)
|
||||||
Log.d("RetroMusic", context.getDatabasePath(queueDatabase).absolutePath)
|
}.onSuccess { playlistFile ->
|
||||||
return listOf(
|
if (playlistFile.exists()) {
|
||||||
|
playlistZipItems.add(
|
||||||
ZipItem(
|
ZipItem(
|
||||||
context.getDatabasePath(queueDatabase).absolutePath,
|
playlistFile.absolutePath,
|
||||||
"$QUEUE_PATH${File.separator}$queueDatabase"
|
PLAYLISTS_PATH + File.separator + playlistFile.name
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return playlistZipItems
|
||||||
|
}
|
||||||
|
|
||||||
private fun getSettingsZipItems(context: Context): List<ZipItem> {
|
private fun getSettingsZipItems(context: Context): List<ZipItem> {
|
||||||
val sharedPrefPath = context.filesDir.parentFile?.absolutePath + "/shared_prefs/"
|
val sharedPrefPath = context.filesDir.parentFile?.absolutePath + "/shared_prefs/"
|
||||||
|
@ -124,8 +136,6 @@ object BackupHelper {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return zipItemList
|
return zipItemList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,22 +148,19 @@ object BackupHelper {
|
||||||
ZipInputStream(inputStream).use {
|
ZipInputStream(inputStream).use {
|
||||||
var entry = it.nextEntry
|
var entry = it.nextEntry
|
||||||
while (entry != null) {
|
while (entry != null) {
|
||||||
if (entry.isDatabaseEntry() && contents.contains(PLAYLISTS)) {
|
if (entry.isPlaylistEntry() && contents.contains(PLAYLISTS)) {
|
||||||
restoreDatabase(context, it, entry)
|
restorePlaylists(it, entry)
|
||||||
} else if (entry.isPreferenceEntry() && contents.contains(SETTINGS)) {
|
} else if (entry.isPreferenceEntry() && contents.contains(SETTINGS)) {
|
||||||
restorePreferences(context, it, entry)
|
restorePreferences(context, it, entry)
|
||||||
} else if (entry.isImageEntry() && contents.contains(USER_IMAGES)) {
|
} else if (entry.isImageEntry() && contents.contains(USER_IMAGES)) {
|
||||||
restoreImages(context, it, entry)
|
restoreImages(context, it, entry)
|
||||||
} else if (entry.isCustomArtistImageEntry() && contents.contains(
|
} else if (entry.isCustomArtistEntry() && contents.contains(CUSTOM_ARTIST_IMAGES)) {
|
||||||
CUSTOM_ARTIST_IMAGES
|
if (entry.isCustomArtistPrefEntry()) {
|
||||||
)
|
|
||||||
) {
|
|
||||||
restoreCustomArtistImages(context, it, entry)
|
|
||||||
restoreCustomArtistPrefs(context, it, entry)
|
restoreCustomArtistPrefs(context, it, entry)
|
||||||
} else if (entry.isQueueEntry() && contents.contains(QUEUE)) {
|
} else if (entry.isCustomArtistImageEntry()) {
|
||||||
restoreQueueDatabase(context, it, entry)
|
restoreCustomArtistImages(context, it, entry)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = it.nextEntry
|
entry = it.nextEntry
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -183,22 +190,33 @@ object BackupHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun restoreDatabase(context: Context, zipIn: ZipInputStream, zipEntry: ZipEntry) {
|
private suspend fun restorePlaylists(
|
||||||
val filePath =
|
zipIn: ZipInputStream,
|
||||||
context.filesDir.parent!! + File.separator + DATABASES_PATH + File.separator + zipEntry.getFileName()
|
zipEntry: ZipEntry
|
||||||
BufferedOutputStream(FileOutputStream(filePath)).use { bos ->
|
) {
|
||||||
zipIn.copyTo(bos)
|
val playlistName = zipEntry.getFileName().substringBeforeLast(".")
|
||||||
}
|
val songs = mutableListOf<Song>()
|
||||||
}
|
|
||||||
|
|
||||||
private fun restoreQueueDatabase(context: Context, zipIn: ZipInputStream, zipEntry: ZipEntry) {
|
// Get songs from m3u playlist files
|
||||||
PreferenceManager.getDefaultSharedPreferences(context).edit(commit = true) {
|
zipIn.bufferedReader().lineSequence().forEach { line ->
|
||||||
putInt("POSITION", 0)
|
if (line.startsWith(File.separator)) {
|
||||||
|
if (File(line).exists()) {
|
||||||
|
songs.addAll(songRepository.songsByFilePath(line))
|
||||||
}
|
}
|
||||||
val filePath =
|
}
|
||||||
context.filesDir.parent!! + File.separator + DATABASES_PATH + File.separator + zipEntry.getFileName()
|
}
|
||||||
BufferedOutputStream(FileOutputStream(filePath)).use { bos ->
|
val playlistEntity = repository.checkPlaylistExists(playlistName).firstOrNull()
|
||||||
zipIn.copyTo(bos)
|
if (playlistEntity != null) {
|
||||||
|
val songEntities = songs.map {
|
||||||
|
it.toSongEntity(playlistEntity.playListId)
|
||||||
|
}
|
||||||
|
repository.insertSongs(songEntities)
|
||||||
|
} else {
|
||||||
|
val playListId = repository.createPlaylist(PlaylistEntity(playlistName = playlistName))
|
||||||
|
val songEntities = songs.map {
|
||||||
|
it.toSongEntity(playListId)
|
||||||
|
}
|
||||||
|
repository.insertSongs(songEntities)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,16 +259,14 @@ object BackupHelper {
|
||||||
.toString() + "/RetroMusic/Backups/"
|
.toString() + "/RetroMusic/Backups/"
|
||||||
const val BACKUP_EXTENSION = "rmbak"
|
const val BACKUP_EXTENSION = "rmbak"
|
||||||
const val APPEND_EXTENSION = ".$BACKUP_EXTENSION"
|
const val APPEND_EXTENSION = ".$BACKUP_EXTENSION"
|
||||||
private const val DATABASES_PATH = "databases"
|
private const val PLAYLISTS_PATH = "Playlists"
|
||||||
private const val QUEUE_PATH = "queue"
|
|
||||||
private const val SETTINGS_PATH = "prefs"
|
private const val SETTINGS_PATH = "prefs"
|
||||||
private const val IMAGES_PATH = "userImages"
|
private const val IMAGES_PATH = "userImages"
|
||||||
private const val CUSTOM_ARTISTS_PATH = "artistImages"
|
private const val CUSTOM_ARTISTS_PATH = "artistImages"
|
||||||
private const val THEME_PREFS_KEY_DEFAULT = "[[kabouzeid_app-theme-helper]]"
|
private const val THEME_PREFS_KEY_DEFAULT = "[[kabouzeid_app-theme-helper]]"
|
||||||
private const val queueDatabase = "music_playback_state.db"
|
|
||||||
|
|
||||||
private fun ZipEntry.isDatabaseEntry(): Boolean {
|
private fun ZipEntry.isPlaylistEntry(): Boolean {
|
||||||
return name.startsWith(DATABASES_PATH)
|
return name.startsWith(PLAYLISTS_PATH)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ZipEntry.isPreferenceEntry(): Boolean {
|
private fun ZipEntry.isPreferenceEntry(): Boolean {
|
||||||
|
@ -261,6 +277,10 @@ object BackupHelper {
|
||||||
return name.startsWith(IMAGES_PATH)
|
return name.startsWith(IMAGES_PATH)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun ZipEntry.isCustomArtistEntry(): Boolean {
|
||||||
|
return name.startsWith(CUSTOM_ARTISTS_PATH)
|
||||||
|
}
|
||||||
|
|
||||||
private fun ZipEntry.isCustomArtistImageEntry(): Boolean {
|
private fun ZipEntry.isCustomArtistImageEntry(): Boolean {
|
||||||
return name.startsWith(CUSTOM_ARTISTS_PATH) && name.contains("custom_artist_images")
|
return name.startsWith(CUSTOM_ARTISTS_PATH) && name.contains("custom_artist_images")
|
||||||
}
|
}
|
||||||
|
@ -269,12 +289,8 @@ object BackupHelper {
|
||||||
return name.startsWith(CUSTOM_ARTISTS_PATH) && name.contains("prefs")
|
return name.startsWith(CUSTOM_ARTISTS_PATH) && name.contains("prefs")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ZipEntry.isQueueEntry(): Boolean {
|
|
||||||
return name.startsWith(QUEUE_PATH)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun ZipEntry.getFileName(): String {
|
private fun ZipEntry.getFileName(): String {
|
||||||
return name.substring(name.lastIndexOf(File.separator))
|
return name.substring(name.lastIndexOf(File.separator) + 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,6 +313,5 @@ enum class BackupContent {
|
||||||
SETTINGS,
|
SETTINGS,
|
||||||
USER_IMAGES,
|
USER_IMAGES,
|
||||||
CUSTOM_ARTIST_IMAGES,
|
CUSTOM_ARTIST_IMAGES,
|
||||||
PLAYLISTS,
|
PLAYLISTS
|
||||||
QUEUE
|
|
||||||
}
|
}
|
|
@ -38,14 +38,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:minHeight="48dp"
|
android:minHeight="48dp"
|
||||||
android:text="@string/databases_description" />
|
android:text="@string/playlists" />
|
||||||
|
|
||||||
<com.google.android.material.checkbox.MaterialCheckBox
|
|
||||||
android:id="@+id/check_queue"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="48dp"
|
|
||||||
android:text="@string/now_playing_queue" />
|
|
||||||
|
|
||||||
<com.google.android.material.checkbox.MaterialCheckBox
|
<com.google.android.material.checkbox.MaterialCheckBox
|
||||||
android:id="@+id/check_user_images"
|
android:id="@+id/check_user_images"
|
||||||
|
|
|
@ -146,7 +146,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">يستمع حالياً إلى %1$s لـ %2$s</string>
|
<string name="currently_listening_to_x_by_x">يستمع حالياً إلى %1$s لـ %2$s</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">أسود قليلاً</string>
|
<string name="dark_theme_name">أسود قليلاً</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">حذف قائمة التشغيل</string>
|
<string name="delete_playlist_title">حذف قائمة التشغيل</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[حذف قائمة التشغيل <b>%1$s</b>؟]]></string>
|
<string name="delete_playlist_x"><![CDATA[حذف قائمة التشغيل <b>%1$s</b>؟]]></string>
|
||||||
<string name="delete_playlists_title">حذف قوائم التشغيل</string>
|
<string name="delete_playlists_title">حذف قوائم التشغيل</string>
|
||||||
|
|
|
@ -140,7 +140,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Aktuálně posloucháš %1$s od %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Aktuálně posloucháš %1$s od %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Tmavá</string>
|
<string name="dark_theme_name">Tmavá</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Smazat seznam skladeb</string>
|
<string name="delete_playlist_title">Smazat seznam skladeb</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Smazat seznam skladeb <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Smazat seznam skladeb <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Smazat seznamy skladeb</string>
|
<string name="delete_playlists_title">Smazat seznamy skladeb</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Spielt zur Zeit %1$s von %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Spielt zur Zeit %1$s von %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Dunkel</string>
|
<string name="dark_theme_name">Dunkel</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Playlist löschen</string>
|
<string name="delete_playlist_title">Playlist löschen</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Playlist <b>%1$s</b> löschen?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Playlist <b>%1$s</b> löschen?]]></string>
|
||||||
<string name="delete_playlists_title">Playlisten löschen</string>
|
<string name="delete_playlists_title">Playlisten löschen</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Παίζει το %1$s από τους %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Παίζει το %1$s από τους %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Κάπως Σκούρο</string>
|
<string name="dark_theme_name">Κάπως Σκούρο</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Διαγραφή playlist</string>
|
<string name="delete_playlist_title">Διαγραφή playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Διαγραφή της λίστα αναπαραγωγής <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Διαγραφή της λίστα αναπαραγωγής <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Διαγραφή αυτών των λιστών αναπαραγωγής</string>
|
<string name="delete_playlists_title">Διαγραφή αυτών των λιστών αναπαραγωγής</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Actualmente estás escuchando %1$s de %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Actualmente estás escuchando %1$s de %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Un poco Oscuro</string>
|
<string name="dark_theme_name">Un poco Oscuro</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Eliminar lista de reproducción</string>
|
<string name="delete_playlist_title">Eliminar lista de reproducción</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[¿Eliminar la lista de reproducción <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[¿Eliminar la lista de reproducción <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Eliminar listas de reproducción</string>
|
<string name="delete_playlists_title">Eliminar listas de reproducción</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">در حال حاضر شما به s$1% از s$2% گوش میدهید.</string>
|
<string name="currently_listening_to_x_by_x">در حال حاضر شما به s$1% از s$2% گوش میدهید.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">تقریبا مشکی</string>
|
<string name="dark_theme_name">تقریبا مشکی</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">حذف کردن پلی لیست</string>
|
<string name="delete_playlist_title">حذف کردن پلی لیست</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[حذف پلی لیست <b>%1$s</b>?<b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[حذف پلی لیست <b>%1$s</b>?<b>?]]></string>
|
||||||
<string name="delete_playlists_title">حذف کردن پلی لیست ها</string>
|
<string name="delete_playlists_title">حذف کردن پلی لیست ها</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Kasalukuyang nakikinig sa %1$s ni %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Kasalukuyang nakikinig sa %1$s ni %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Medyo Madilim</string>
|
<string name="dark_theme_name">Medyo Madilim</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Tanggalin ang playlist</string>
|
<string name="delete_playlist_title">Tanggalin ang playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Tanggalin ang playlist na <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Tanggalin ang playlist na <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Tanggalin ang mga playlist</string>
|
<string name="delete_playlists_title">Tanggalin ang mga playlist</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Vous écoutez actuellement %1$s par %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Vous écoutez actuellement %1$s par %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Plutôt Sombre</string>
|
<string name="dark_theme_name">Plutôt Sombre</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Supprimer la liste de lecture</string>
|
<string name="delete_playlist_title">Supprimer la liste de lecture</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Supprimer la liste <b>%1$s</b> ?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Supprimer la liste <b>%1$s</b> ?]]></string>
|
||||||
<string name="delete_playlists_title">Supprimer les listes de lecture</string>
|
<string name="delete_playlists_title">Supprimer les listes de lecture</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Delete playlist</string>
|
<string name="delete_playlist_title">Delete playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Delete playlists</string>
|
<string name="delete_playlists_title">Delete playlists</string>
|
||||||
|
|
|
@ -138,7 +138,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Delete playlist</string>
|
<string name="delete_playlist_title">Delete playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Delete playlists</string>
|
<string name="delete_playlists_title">Delete playlists</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Jelenleg %1$s hallgatása %2$s által.</string>
|
<string name="currently_listening_to_x_by_x">Jelenleg %1$s hallgatása %2$s által.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kissé sötét</string>
|
<string name="dark_theme_name">Kissé sötét</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Lejátszási lista törlése</string>
|
<string name="delete_playlist_title">Lejátszási lista törlése</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Törli a <b>%1$s</b> lejátszási listát?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Törli a <b>%1$s</b> lejátszási listát?]]></string>
|
||||||
<string name="delete_playlists_title">Lejátszási listák törlése</string>
|
<string name="delete_playlists_title">Lejátszási listák törlése</string>
|
||||||
|
|
|
@ -137,7 +137,6 @@ https://play.google.com/store/apps/details?id=%s</string>
|
||||||
<string name="currently_listening_to_x_by_x">Ascoltando attualmente %1$s di %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Ascoltando attualmente %1$s di %2$s.</string>
|
||||||
<string name="custom_artist_images">Immagini dell\'Artista Personalizzate</string>
|
<string name="custom_artist_images">Immagini dell\'Artista Personalizzate</string>
|
||||||
<string name="dark_theme_name">Scuro</string>
|
<string name="dark_theme_name">Scuro</string>
|
||||||
<string name="databases_description">Database (Playlist, Cronologia, Più riprodotti, ecc.)</string>
|
|
||||||
<string name="delete_playlist_title">Elimina playlist</string>
|
<string name="delete_playlist_title">Elimina playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Elimina la playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Elimina la playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Elimina playlist</string>
|
<string name="delete_playlists_title">Elimina playlist</string>
|
||||||
|
|
|
@ -135,7 +135,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">現在、 %1$s によって %2$s で聴いています。</string>
|
<string name="currently_listening_to_x_by_x">現在、 %1$s によって %2$s で聴いています。</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">ダーク</string>
|
<string name="dark_theme_name">ダーク</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">プレイリストを削除</string>
|
<string name="delete_playlist_title">プレイリストを削除</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[プレイリスト <b>%1$s</b> を削除しますか?]]></string>
|
<string name="delete_playlist_x"><![CDATA[プレイリスト <b>%1$s</b> を削除しますか?]]></string>
|
||||||
<string name="delete_playlists_title">プレイリストを削除</string>
|
<string name="delete_playlists_title">プレイリストを削除</string>
|
||||||
|
|
|
@ -134,7 +134,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">현재 %2$s의 %1$s를 듣는 중입니다.</string>
|
<string name="currently_listening_to_x_by_x">현재 %2$s의 %1$s를 듣는 중입니다.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">카인다 다크</string>
|
<string name="dark_theme_name">카인다 다크</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">재생목록 삭제</string>
|
<string name="delete_playlist_title">재생목록 삭제</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[<b>%1$s</b> 재생목록을 삭제하시겠습니까?]]></string>
|
<string name="delete_playlist_x"><![CDATA[<b>%1$s</b> 재생목록을 삭제하시겠습니까?]]></string>
|
||||||
<string name="delete_playlists_title">재생목록 삭제</string>
|
<string name="delete_playlists_title">재생목록 삭제</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Delete playlist</string>
|
<string name="delete_playlist_title">Delete playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Delete playlists</string>
|
<string name="delete_playlists_title">Delete playlists</string>
|
||||||
|
|
|
@ -134,7 +134,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">%2$s သီဆိုထားသော %1$s ကိုယခုနားထောင်နေသည်</string>
|
<string name="currently_listening_to_x_by_x">%2$s သီဆိုထားသော %1$s ကိုယခုနားထောင်နေသည်</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">အနက်ရောင်ဆန်ဆန်</string>
|
<string name="dark_theme_name">အနက်ရောင်ဆန်ဆန်</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Playlist ဖျက်ခြင်း</string>
|
<string name="delete_playlist_title">Playlist ဖျက်ခြင်း</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[<b>%1$s</b> Playlist ကိုဖျက်မှာလား]]></string>
|
<string name="delete_playlist_x"><![CDATA[<b>%1$s</b> Playlist ကိုဖျက်မှာလား]]></string>
|
||||||
<string name="delete_playlists_title">Playlist များဖျက်ခြင်း</string>
|
<string name="delete_playlists_title">Playlist များဖျက်ခြင်း</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Nu luisterend naar %1$s van %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Nu luisterend naar %1$s van %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Soort van donker</string>
|
<string name="dark_theme_name">Soort van donker</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Afspeellijst verwijderen</string>
|
<string name="delete_playlist_title">Afspeellijst verwijderen</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Afspellijst <b>%1$s</b> verwijderen?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Afspellijst <b>%1$s</b> verwijderen?]]></string>
|
||||||
<string name="delete_playlists_title">Afspeellijsten verwijderen</string>
|
<string name="delete_playlists_title">Afspeellijsten verwijderen</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Delete playlist</string>
|
<string name="delete_playlist_title">Delete playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Delete playlists</string>
|
<string name="delete_playlists_title">Delete playlists</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Delete playlist</string>
|
<string name="delete_playlist_title">Delete playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Delete playlists</string>
|
<string name="delete_playlists_title">Delete playlists</string>
|
||||||
|
|
|
@ -140,7 +140,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Aktualnie odtwarzane %1$s wykonawcy %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Aktualnie odtwarzane %1$s wykonawcy %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Dość ciemny</string>
|
<string name="dark_theme_name">Dość ciemny</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Usuń playlistę</string>
|
<string name="delete_playlist_title">Usuń playlistę</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Usunąć playlistę <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Usunąć playlistę <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Usuń playlisty</string>
|
<string name="delete_playlists_title">Usuń playlisty</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Atualmente ouvindo %1$s por %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Atualmente ouvindo %1$s por %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Meio escuro</string>
|
<string name="dark_theme_name">Meio escuro</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Excluir playlist</string>
|
<string name="delete_playlist_title">Excluir playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Excluir a playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Excluir a playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Excluir playlists</string>
|
<string name="delete_playlists_title">Excluir playlists</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">A ouvir %1$s de %2$s.</string>
|
<string name="currently_listening_to_x_by_x">A ouvir %1$s de %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Meio escuro</string>
|
<string name="dark_theme_name">Meio escuro</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Eliminar lista</string>
|
<string name="delete_playlist_title">Eliminar lista</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Eliminar a lista <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Eliminar a lista <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Eliminar listas</string>
|
<string name="delete_playlists_title">Eliminar listas</string>
|
||||||
|
|
|
@ -138,7 +138,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Acum ascultați %1$s de %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Acum ascultați %1$s de %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Suriu</string>
|
<string name="dark_theme_name">Suriu</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Șterge playlist</string>
|
<string name="delete_playlist_title">Șterge playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Doriți să ștergeți playlist-ul <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Doriți să ștergeți playlist-ul <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Șterge playlist-uri</string>
|
<string name="delete_playlists_title">Șterge playlist-uri</string>
|
||||||
|
|
|
@ -140,7 +140,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Сейчас играет %1$s от %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Сейчас играет %1$s от %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Тёмная</string>
|
<string name="dark_theme_name">Тёмная</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Удалить плейлист</string>
|
<string name="delete_playlist_title">Удалить плейлист</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Удалить плейлист <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Удалить плейлист <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Удалить плейлисты</string>
|
<string name="delete_playlists_title">Удалить плейлисты</string>
|
||||||
|
|
|
@ -138,7 +138,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Trenutno se reprodukuje %1$s izvodjaca %2$s</string>
|
<string name="currently_listening_to_x_by_x">Trenutno se reprodukuje %1$s izvodjaca %2$s</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kao tamno</string>
|
<string name="dark_theme_name">Kao tamno</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Izbrisi plejlistu</string>
|
<string name="delete_playlist_title">Izbrisi plejlistu</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Izbrisi <b>%1$s</b> plejlistu?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Izbrisi <b>%1$s</b> plejlistu?]]></string>
|
||||||
<string name="delete_playlists_title">Izbrisi plejlistu</string>
|
<string name="delete_playlists_title">Izbrisi plejlistu</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Lyssnar just nu på %1$s av %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Lyssnar just nu på %1$s av %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Ganska mörkt</string>
|
<string name="dark_theme_name">Ganska mörkt</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Radera spellista</string>
|
<string name="delete_playlist_title">Radera spellista</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Radera spellistan <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Radera spellistan <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Radera spellistor</string>
|
<string name="delete_playlists_title">Radera spellistor</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Delete playlist</string>
|
<string name="delete_playlist_title">Delete playlist</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Delete the playlist <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Delete playlists</string>
|
<string name="delete_playlists_title">Delete playlists</string>
|
||||||
|
|
|
@ -134,7 +134,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">กำลังฟัง %1$s ของ %2$s</string>
|
<string name="currently_listening_to_x_by_x">กำลังฟัง %1$s ของ %2$s</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">ลบเพลย์ลิสต์</string>
|
<string name="delete_playlist_title">ลบเพลย์ลิสต์</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[ลบเพลย์ลิสต์ <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[ลบเพลย์ลิสต์ <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">ลบเพลย์ลิสต์</string>
|
<string name="delete_playlists_title">ลบเพลย์ลิสต์</string>
|
||||||
|
|
|
@ -136,7 +136,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Şu anda %2$s şarkıcısından %1$s dinleniyor.</string>
|
<string name="currently_listening_to_x_by_x">Şu anda %2$s şarkıcısından %1$s dinleniyor.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Koyu</string>
|
<string name="dark_theme_name">Koyu</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Çalma listesini sil</string>
|
<string name="delete_playlist_title">Çalma listesini sil</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Oynatma listesi <b>%1$s</b> silinsin mi?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Oynatma listesi <b>%1$s</b> silinsin mi?]]></string>
|
||||||
<string name="delete_playlists_title">Çalma listelerini sil</string>
|
<string name="delete_playlists_title">Çalma listelerini sil</string>
|
||||||
|
|
|
@ -140,7 +140,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Зараз грає %1$s від %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Зараз грає %1$s від %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Майже темна</string>
|
<string name="dark_theme_name">Майже темна</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Видалити список відтворення</string>
|
<string name="delete_playlist_title">Видалити список відтворення</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Видалити список відтворення <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Видалити список відтворення <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Видалити списки відтворення</string>
|
<string name="delete_playlists_title">Видалити списки відтворення</string>
|
||||||
|
|
|
@ -135,7 +135,6 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\"</string>
|
||||||
<string name="currently_listening_to_x_by_x">Đang nghe %1$s bởi %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Đang nghe %1$s bởi %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Xám đen</string>
|
<string name="dark_theme_name">Xám đen</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Xoá danh sách phát</string>
|
<string name="delete_playlist_title">Xoá danh sách phát</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[Xoá danh sách phát <b>%1$s</b>?]]></string>
|
<string name="delete_playlist_x"><![CDATA[Xoá danh sách phát <b>%1$s</b>?]]></string>
|
||||||
<string name="delete_playlists_title">Xoá danh sách phát</string>
|
<string name="delete_playlists_title">Xoá danh sách phát</string>
|
||||||
|
|
|
@ -134,7 +134,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">正在收听 %2$s 的 %1$s。</string>
|
<string name="currently_listening_to_x_by_x">正在收听 %2$s 的 %1$s。</string>
|
||||||
<string name="custom_artist_images">自定义艺术家图像</string>
|
<string name="custom_artist_images">自定义艺术家图像</string>
|
||||||
<string name="dark_theme_name">深色</string>
|
<string name="dark_theme_name">深色</string>
|
||||||
<string name="databases_description">数据库(播放列表、播放历史、最多播放等)</string>
|
|
||||||
<string name="delete_playlist_title">删除播放列表</string>
|
<string name="delete_playlist_title">删除播放列表</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[确定删除播放列表 <b>%1$s</b> 吗?]]></string>
|
<string name="delete_playlist_x"><![CDATA[确定删除播放列表 <b>%1$s</b> 吗?]]></string>
|
||||||
<string name="delete_playlists_title">删除播放列表</string>
|
<string name="delete_playlists_title">删除播放列表</string>
|
||||||
|
|
|
@ -134,7 +134,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">我正在聽 %2$s 的 %1$s</string>
|
<string name="currently_listening_to_x_by_x">我正在聽 %2$s 的 %1$s</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">暗沉</string>
|
<string name="dark_theme_name">暗沉</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">刪除播放清單</string>
|
<string name="delete_playlist_title">刪除播放清單</string>
|
||||||
<string name="delete_playlist_x"><![CDATA[確定要刪除播放清單 <b>%1$s</b> 嗎?]]></string>
|
<string name="delete_playlist_x"><![CDATA[確定要刪除播放清單 <b>%1$s</b> 嗎?]]></string>
|
||||||
<string name="delete_playlists_title">刪除多個播放清單</string>
|
<string name="delete_playlists_title">刪除多個播放清單</string>
|
||||||
|
|
|
@ -138,7 +138,6 @@
|
||||||
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
<string name="currently_listening_to_x_by_x">Currently listening to %1$s by %2$s.</string>
|
||||||
<string name="custom_artist_images">Custom Artist Images</string>
|
<string name="custom_artist_images">Custom Artist Images</string>
|
||||||
<string name="dark_theme_name">Kinda Dark</string>
|
<string name="dark_theme_name">Kinda Dark</string>
|
||||||
<string name="databases_description">Databases (Playlists, History, Most Played, etc.)</string>
|
|
||||||
<string name="delete_playlist_title">Delete playlist</string>
|
<string name="delete_playlist_title">Delete playlist</string>
|
||||||
<string name="delete_playlist_x">
|
<string name="delete_playlist_x">
|
||||||
<![CDATA[Delete the playlist <b>%1$s</b>?]]>
|
<![CDATA[Delete the playlist <b>%1$s</b>?]]>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue