Merge pull request #1094 from fidoriel/disable-widget-ios-scrubing

Disable ios/android scrubbing in MPRemoteCommandCenter/MediaBrowserServiceCompat
This commit is contained in:
advplyr
2024-02-25 15:29:52 -06:00
committed by GitHub
28 changed files with 77 additions and 17 deletions
@@ -103,6 +103,9 @@ class MainActivity : BridgeActivity() {
} }
} }
fun isPlayerNotificationServiceInitialized():Boolean {
return ::foregroundService.isInitialized
}
fun stopMyService() { fun stopMyService() {
if (mBounded) { if (mBounded) {
@@ -107,6 +107,7 @@ data class PlayItemRequestPayload(
data class DeviceSettings( data class DeviceSettings(
var disableAutoRewind:Boolean, var disableAutoRewind:Boolean,
var enableAltView:Boolean, var enableAltView:Boolean,
var allowSeekingOnMediaControls:Boolean,
var jumpBackwardsTime:Int, var jumpBackwardsTime:Int,
var jumpForwardTime:Int, var jumpForwardTime:Int,
var enableMp3IndexSeeking:Boolean, var enableMp3IndexSeeking:Boolean,
@@ -130,6 +131,7 @@ data class DeviceSettings(
return DeviceSettings( return DeviceSettings(
disableAutoRewind = false, disableAutoRewind = false,
enableAltView = true, enableAltView = true,
allowSeekingOnMediaControls = false,
jumpBackwardsTime = 10, jumpBackwardsTime = 10,
jumpForwardTime = 10, jumpForwardTime = 10,
enableMp3IndexSeeking = false, enableMp3IndexSeeking = false,
@@ -329,15 +329,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
} }
} }
mediaSessionConnector.setEnabledPlaybackActions( setMediaSessionConnectorPlaybackActions()
PlaybackStateCompat.ACTION_PLAY_PAUSE
or PlaybackStateCompat.ACTION_PLAY
or PlaybackStateCompat.ACTION_PAUSE
or PlaybackStateCompat.ACTION_SEEK_TO
or PlaybackStateCompat.ACTION_FAST_FORWARD
or PlaybackStateCompat.ACTION_REWIND
or PlaybackStateCompat.ACTION_STOP
)
mediaSessionConnector.setQueueNavigator(queueNavigator) mediaSessionConnector.setQueueNavigator(queueNavigator)
mediaSessionConnector.setPlaybackPreparer(MediaSessionPlaybackPreparer(this)) mediaSessionConnector.setPlaybackPreparer(MediaSessionPlaybackPreparer(this))
@@ -512,6 +504,20 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
mediaSessionConnector.setCustomActionProviders(*customActionProviders.toTypedArray()) mediaSessionConnector.setCustomActionProviders(*customActionProviders.toTypedArray())
} }
fun setMediaSessionConnectorPlaybackActions() {
var playbackActions = PlaybackStateCompat.ACTION_PLAY_PAUSE or
PlaybackStateCompat.ACTION_PLAY or
PlaybackStateCompat.ACTION_PAUSE or
PlaybackStateCompat.ACTION_FAST_FORWARD or
PlaybackStateCompat.ACTION_REWIND or
PlaybackStateCompat.ACTION_STOP
if (deviceSettings.allowSeekingOnMediaControls) {
playbackActions = playbackActions or PlaybackStateCompat.ACTION_SEEK_TO
}
mediaSessionConnector.setEnabledPlaybackActions(playbackActions)
}
fun handlePlayerPlaybackError(errorMessage:String) { fun handlePlayerPlaybackError(errorMessage:String) {
// On error and was attempting to direct play - fallback to transcode // On error and was attempting to direct play - fallback to transcode
currentPlaybackSession?.let { playbackSession -> currentPlaybackSession?.let { playbackSession ->
@@ -1,5 +1,7 @@
package com.audiobookshelf.app.plugins package com.audiobookshelf.app.plugins
import android.os.Handler
import android.os.Looper
import android.util.Log import android.util.Log
import com.audiobookshelf.app.MainActivity import com.audiobookshelf.app.MainActivity
import com.audiobookshelf.app.data.* import com.audiobookshelf.app.data.*
@@ -493,9 +495,16 @@ class AbsDatabase : Plugin() {
fun updateDeviceSettings(call:PluginCall) { // Returns device data fun updateDeviceSettings(call:PluginCall) { // Returns device data
Log.d(tag, "updateDeviceSettings ${call.data}") Log.d(tag, "updateDeviceSettings ${call.data}")
val newDeviceSettings = jacksonMapper.readValue<DeviceSettings>(call.data.toString()) val newDeviceSettings = jacksonMapper.readValue<DeviceSettings>(call.data.toString())
GlobalScope.launch(Dispatchers.IO) {
Handler(Looper.getMainLooper()).post {
DeviceManager.deviceData.deviceSettings = newDeviceSettings DeviceManager.deviceData.deviceSettings = newDeviceSettings
DeviceManager.dbManager.saveDeviceData(DeviceManager.deviceData) DeviceManager.dbManager.saveDeviceData(DeviceManager.deviceData)
// Updates playback actions for media notification (handles media control seek locking setting)
if (mainActivity.isPlayerNotificationServiceInitialized()) {
mainActivity.foregroundService.setMediaSessionConnectorPlaybackActions()
}
call.resolve(JSObject(jacksonMapper.writeValueAsString(DeviceManager.deviceData))) call.resolve(JSObject(jacksonMapper.writeValueAsString(DeviceManager.deviceData)))
} }
} }
+1 -1
View File
@@ -14,7 +14,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// Override point for customization after application launch. // Override point for customization after application launch.
let configuration = Realm.Configuration( let configuration = Realm.Configuration(
schemaVersion: 16, schemaVersion: 17,
migrationBlock: { [weak self] migration, oldSchemaVersion in migrationBlock: { [weak self] migration, oldSchemaVersion in
if (oldSchemaVersion < 1) { if (oldSchemaVersion < 1) {
self?.logger.log("Realm schema version was \(oldSchemaVersion)") self?.logger.log("Realm schema version was \(oldSchemaVersion)")
+5 -1
View File
@@ -238,6 +238,7 @@ public class AbsDatabase: CAPPlugin {
@objc func updateDeviceSettings(_ call: CAPPluginCall) { @objc func updateDeviceSettings(_ call: CAPPluginCall) {
let disableAutoRewind = call.getBool("disableAutoRewind") ?? false let disableAutoRewind = call.getBool("disableAutoRewind") ?? false
let enableAltView = call.getBool("enableAltView") ?? false let enableAltView = call.getBool("enableAltView") ?? false
let allowSeekingOnMediaControls = call.getBool("allowSeekingOnMediaControls") ?? false
let jumpBackwardsTime = call.getInt("jumpBackwardsTime") ?? 10 let jumpBackwardsTime = call.getInt("jumpBackwardsTime") ?? 10
let jumpForwardTime = call.getInt("jumpForwardTime") ?? 10 let jumpForwardTime = call.getInt("jumpForwardTime") ?? 10
let lockOrientation = call.getString("lockOrientation") ?? "NONE" let lockOrientation = call.getString("lockOrientation") ?? "NONE"
@@ -246,6 +247,7 @@ public class AbsDatabase: CAPPlugin {
let settings = DeviceSettings() let settings = DeviceSettings()
settings.disableAutoRewind = disableAutoRewind settings.disableAutoRewind = disableAutoRewind
settings.enableAltView = enableAltView settings.enableAltView = enableAltView
settings.allowSeekingOnMediaControls = allowSeekingOnMediaControls
settings.jumpBackwardsTime = jumpBackwardsTime settings.jumpBackwardsTime = jumpBackwardsTime
settings.jumpForwardTime = jumpForwardTime settings.jumpForwardTime = jumpForwardTime
settings.lockOrientation = lockOrientation settings.lockOrientation = lockOrientation
@@ -254,7 +256,9 @@ public class AbsDatabase: CAPPlugin {
Database.shared.setDeviceSettings(deviceSettings: settings) Database.shared.setDeviceSettings(deviceSettings: settings)
// call.resolve([ "value": [] ]) // Updates the media notification controls (for allowSeekingOnMediaControls setting)
PlayerHandler.updateRemoteTransportControls()
getDeviceData(call) getDeviceData(call)
} }
@@ -11,6 +11,7 @@ import RealmSwift
class DeviceSettings: Object { class DeviceSettings: Object {
@Persisted var disableAutoRewind: Bool = false @Persisted var disableAutoRewind: Bool = false
@Persisted var enableAltView: Bool = true @Persisted var enableAltView: Bool = true
@Persisted var allowSeekingOnMediaControls: Bool = false
@Persisted var jumpBackwardsTime: Int = 10 @Persisted var jumpBackwardsTime: Int = 10
@Persisted var jumpForwardTime: Int = 10 @Persisted var jumpForwardTime: Int = 10
@Persisted var lockOrientation: String = "NONE" @Persisted var lockOrientation: String = "NONE"
@@ -26,6 +27,7 @@ func deviceSettingsToJSON(settings: DeviceSettings) -> Dictionary<String, Any> {
return [ return [
"disableAutoRewind": settings.disableAutoRewind, "disableAutoRewind": settings.disableAutoRewind,
"enableAltView": settings.enableAltView, "enableAltView": settings.enableAltView,
"allowSeekingOnMediaControls": settings.allowSeekingOnMediaControls,
"jumpBackwardsTime": settings.jumpBackwardsTime, "jumpBackwardsTime": settings.jumpBackwardsTime,
"jumpForwardTime": settings.jumpForwardTime, "jumpForwardTime": settings.jumpForwardTime,
"lockOrientation": settings.lockOrientation, "lockOrientation": settings.lockOrientation,
+2 -2
View File
@@ -588,7 +588,7 @@ class AudioPlayer: NSObject {
} }
// MARK: - Now playing // MARK: - Now playing
private func setupRemoteTransportControls() { func setupRemoteTransportControls() {
DispatchQueue.runOnMainQueue { DispatchQueue.runOnMainQueue {
UIApplication.shared.beginReceivingRemoteControlEvents() UIApplication.shared.beginReceivingRemoteControlEvents()
} }
@@ -672,7 +672,7 @@ class AudioPlayer: NSObject {
return .success return .success
} }
commandCenter.changePlaybackPositionCommand.isEnabled = true commandCenter.changePlaybackPositionCommand.isEnabled = deviceSettings.allowSeekingOnMediaControls
commandCenter.changePlaybackPositionCommand.addTarget { [weak self] event in commandCenter.changePlaybackPositionCommand.addTarget { [weak self] event in
guard let event = event as? MPChangePlaybackPositionCommandEvent else { guard let event = event as? MPChangePlaybackPositionCommandEvent else {
return .noSuchContent return .noSuchContent
@@ -135,6 +135,10 @@ class PlayerHandler {
) )
} }
public static func updateRemoteTransportControls() {
self.player?.setupRemoteTransportControls()
}
// MARK: - Helper logic // MARK: - Helper logic
private static func cleanupOldSessions(currentSessionId: String?) { private static func cleanupOldSessions(currentSessionId: String?) {
+12
View File
@@ -61,6 +61,12 @@
<p class="pl-4">{{ $strings.LabelEnableMp3IndexSeeking }}</p> <p class="pl-4">{{ $strings.LabelEnableMp3IndexSeeking }}</p>
<span class="material-icons-outlined ml-2" @click.stop="showConfirmMp3IndexSeeking">info</span> <span class="material-icons-outlined ml-2" @click.stop="showConfirmMp3IndexSeeking">info</span>
</div> </div>
<div class="flex items-center py-3">
<div class="w-10 flex justify-center" @click="toggleAllowSeekingOnMediaControls">
<ui-toggle-switch v-model="settings.allowSeekingOnMediaControls" @input="saveSettings" />
</div>
<p class="pl-4">{{ $strings.LabelAllowSeekingOnMediaControls }}</p>
</div>
<!-- Sleep timer settings --> <!-- Sleep timer settings -->
<template v-if="!isiOS"> <template v-if="!isiOS">
@@ -154,6 +160,7 @@ export default {
settings: { settings: {
disableAutoRewind: false, disableAutoRewind: false,
enableAltView: true, enableAltView: true,
allowSeekingOnMediaControls: false,
jumpForwardTime: 10, jumpForwardTime: 10,
jumpBackwardsTime: 10, jumpBackwardsTime: 10,
enableMp3IndexSeeking: false, enableMp3IndexSeeking: false,
@@ -429,6 +436,10 @@ export default {
this.settings.enableAltView = !this.settings.enableAltView this.settings.enableAltView = !this.settings.enableAltView
this.saveSettings() this.saveSettings()
}, },
toggleAllowSeekingOnMediaControls() {
this.settings.allowSeekingOnMediaControls = !this.settings.allowSeekingOnMediaControls
this.saveSettings()
},
getCurrentOrientation() { getCurrentOrientation() {
const orientation = window.screen?.orientation || {} const orientation = window.screen?.orientation || {}
const type = orientation.type || '' const type = orientation.type || ''
@@ -471,6 +482,7 @@ export default {
const deviceSettings = this.deviceData.deviceSettings || {} const deviceSettings = this.deviceData.deviceSettings || {}
this.settings.disableAutoRewind = !!deviceSettings.disableAutoRewind this.settings.disableAutoRewind = !!deviceSettings.disableAutoRewind
this.settings.enableAltView = !!deviceSettings.enableAltView this.settings.enableAltView = !!deviceSettings.enableAltView
this.settings.allowSeekingOnMediaControls = !!deviceSettings.allowSeekingOnMediaControls
this.settings.jumpForwardTime = deviceSettings.jumpForwardTime || 10 this.settings.jumpForwardTime = deviceSettings.jumpForwardTime || 10
this.settings.jumpBackwardsTime = deviceSettings.jumpBackwardsTime || 10 this.settings.jumpBackwardsTime = deviceSettings.jumpBackwardsTime || 10
this.settings.enableMp3IndexSeeking = !!deviceSettings.enableMp3IndexSeeking this.settings.enableMp3IndexSeeking = !!deviceSettings.enableMp3IndexSeeking
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Přidáno v", "LabelAddedAt": "Přidáno v",
"LabelAddToPlaylist": "Přidat do seznamu skladeb", "LabelAddToPlaylist": "Přidat do seznamu skladeb",
"LabelAll": "Vše", "LabelAll": "Vše",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (jméno a příjmení)", "LabelAuthorFirstLast": "Autor (jméno a příjmení)",
"LabelAuthorLastFirst": "Autor (příjmení a jméno)", "LabelAuthorLastFirst": "Autor (příjmení a jméno)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Tilføjet Kl.", "LabelAddedAt": "Tilføjet Kl.",
"LabelAddToPlaylist": "Tilføj til Afspilningsliste", "LabelAddToPlaylist": "Tilføj til Afspilningsliste",
"LabelAll": "Alle", "LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Forfatter", "LabelAuthor": "Forfatter",
"LabelAuthorFirstLast": "Forfatter (Fornavn Efternavn)", "LabelAuthorFirstLast": "Forfatter (Fornavn Efternavn)",
"LabelAuthorLastFirst": "Forfatter (Efternavn, Fornavn)", "LabelAuthorLastFirst": "Forfatter (Efternavn, Fornavn)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Hinzugefügt am", "LabelAddedAt": "Hinzugefügt am",
"LabelAddToPlaylist": "Zur Wiedergabeliste hinzufügen", "LabelAddToPlaylist": "Zur Wiedergabeliste hinzufügen",
"LabelAll": "Alle", "LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Erlaube Vor- und Zurückspulen auf dem Medienkontrollelement bei den Benachrichtigungen",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Vorname Nachname)", "LabelAuthorFirstLast": "Autor (Vorname Nachname)",
"LabelAuthorLastFirst": "Autor (Nachname, Vorname)", "LabelAuthorLastFirst": "Autor (Nachname, Vorname)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Added At", "LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist", "LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All", "LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Author", "LabelAuthor": "Author",
"LabelAuthorFirstLast": "Author (First Last)", "LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)", "LabelAuthorLastFirst": "Author (Last, First)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Añadido", "LabelAddedAt": "Añadido",
"LabelAddToPlaylist": "Añadido a la Lista de Reproducción", "LabelAddToPlaylist": "Añadido a la Lista de Reproducción",
"LabelAll": "Todos", "LabelAll": "Todos",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Nombre Apellido)", "LabelAuthorFirstLast": "Autor (Nombre Apellido)",
"LabelAuthorLastFirst": "Autor (Apellido, Nombre)", "LabelAuthorLastFirst": "Autor (Apellido, Nombre)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Date dajout", "LabelAddedAt": "Date dajout",
"LabelAddToPlaylist": "Ajouter à la liste de lecture", "LabelAddToPlaylist": "Ajouter à la liste de lecture",
"LabelAll": "Tout", "LabelAll": "Tout",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Auteur", "LabelAuthor": "Auteur",
"LabelAuthorFirstLast": "Auteur (Prénom Nom)", "LabelAuthorFirstLast": "Auteur (Prénom Nom)",
"LabelAuthorLastFirst": "Auteur (Nom, Prénom)", "LabelAuthorLastFirst": "Auteur (Nom, Prénom)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Added At", "LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist", "LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All", "LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Author", "LabelAuthor": "Author",
"LabelAuthorFirstLast": "Author (First Last)", "LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)", "LabelAuthorLastFirst": "Author (Last, First)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Added At", "LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist", "LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All", "LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Author", "LabelAuthor": "Author",
"LabelAuthorFirstLast": "Author (First Last)", "LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)", "LabelAuthorLastFirst": "Author (Last, First)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Added At", "LabelAddedAt": "Added At",
"LabelAddToPlaylist": "Add to Playlist", "LabelAddToPlaylist": "Add to Playlist",
"LabelAll": "All", "LabelAll": "All",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Author (First Last)", "LabelAuthorFirstLast": "Author (First Last)",
"LabelAuthorLastFirst": "Author (Last, First)", "LabelAuthorLastFirst": "Author (Last, First)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Aggiunto il", "LabelAddedAt": "Aggiunto il",
"LabelAddToPlaylist": "aggiungi alla Playlist", "LabelAddToPlaylist": "aggiungi alla Playlist",
"LabelAll": "Tutti", "LabelAll": "Tutti",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autore", "LabelAuthor": "Autore",
"LabelAuthorFirstLast": "Autore (Per Nome)", "LabelAuthorFirstLast": "Autore (Per Nome)",
"LabelAuthorLastFirst": "Autori (Per Cognome)", "LabelAuthorLastFirst": "Autori (Per Cognome)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Pridėta {0}", "LabelAddedAt": "Pridėta {0}",
"LabelAddToPlaylist": "Pridėti į grojaraštį", "LabelAddToPlaylist": "Pridėti į grojaraštį",
"LabelAll": "Visi", "LabelAll": "Visi",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autorius", "LabelAuthor": "Autorius",
"LabelAuthorFirstLast": "Autorius (Vardas Pavardė)", "LabelAuthorFirstLast": "Autorius (Vardas Pavardė)",
"LabelAuthorLastFirst": "Autorius (Pavardė, Vardas)", "LabelAuthorLastFirst": "Autorius (Pavardė, Vardas)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Toegevoegd op", "LabelAddedAt": "Toegevoegd op",
"LabelAddToPlaylist": "Toevoegen aan afspeellijst", "LabelAddToPlaylist": "Toevoegen aan afspeellijst",
"LabelAll": "Alle", "LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Auteur", "LabelAuthor": "Auteur",
"LabelAuthorFirstLast": "Auteur (Voornaam Achternaam)", "LabelAuthorFirstLast": "Auteur (Voornaam Achternaam)",
"LabelAuthorLastFirst": "Auteur (Achternaam, Voornaam)", "LabelAuthorLastFirst": "Auteur (Achternaam, Voornaam)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Dato lagt til ", "LabelAddedAt": "Dato lagt til ",
"LabelAddToPlaylist": "Legg til i spilleliste", "LabelAddToPlaylist": "Legg til i spilleliste",
"LabelAll": "Alle", "LabelAll": "Alle",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Forfatter", "LabelAuthor": "Forfatter",
"LabelAuthorFirstLast": "Forfatter (Fornavn Etternavn)", "LabelAuthorFirstLast": "Forfatter (Fornavn Etternavn)",
"LabelAuthorLastFirst": "Forfatter (Etternavn Fornavn)", "LabelAuthorLastFirst": "Forfatter (Etternavn Fornavn)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Dodano w", "LabelAddedAt": "Dodano w",
"LabelAddToPlaylist": "Dodaj do playlisty", "LabelAddToPlaylist": "Dodaj do playlisty",
"LabelAll": "Wszystkie", "LabelAll": "Wszystkie",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Rosnąco)", "LabelAuthorFirstLast": "Autor (Rosnąco)",
"LabelAuthorLastFirst": "Author (Malejąco)", "LabelAuthorLastFirst": "Author (Malejąco)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Acrescentado Em", "LabelAddedAt": "Acrescentado Em",
"LabelAddToPlaylist": "Adicionar à Lista de Reprodução", "LabelAddToPlaylist": "Adicionar à Lista de Reprodução",
"LabelAll": "Todos", "LabelAll": "Todos",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Autor", "LabelAuthor": "Autor",
"LabelAuthorFirstLast": "Autor (Nome Sobrenome)", "LabelAuthorFirstLast": "Autor (Nome Sobrenome)",
"LabelAuthorLastFirst": "Autor (Sobrenome, Nome)", "LabelAuthorLastFirst": "Autor (Sobrenome, Nome)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Дата добавления", "LabelAddedAt": "Дата добавления",
"LabelAddToPlaylist": "Добавить в плейлист", "LabelAddToPlaylist": "Добавить в плейлист",
"LabelAll": "Все", "LabelAll": "Все",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Автор", "LabelAuthor": "Автор",
"LabelAuthorFirstLast": "Автор (Имя Фамилия)", "LabelAuthorFirstLast": "Автор (Имя Фамилия)",
"LabelAuthorLastFirst": "Автор (Фамилия, Имя)", "LabelAuthorLastFirst": "Автор (Фамилия, Имя)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "Tillagd vid", "LabelAddedAt": "Tillagd vid",
"LabelAddToPlaylist": "Lägg till i Spellista", "LabelAddToPlaylist": "Lägg till i Spellista",
"LabelAll": "Alla", "LabelAll": "Alla",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "Författare", "LabelAuthor": "Författare",
"LabelAuthorFirstLast": "Författare (Förnamn Efternamn)", "LabelAuthorFirstLast": "Författare (Förnamn Efternamn)",
"LabelAuthorLastFirst": "Författare (Efternamn, Förnamn)", "LabelAuthorLastFirst": "Författare (Efternamn, Förnamn)",
+1
View File
@@ -85,6 +85,7 @@
"LabelAddedAt": "添加于", "LabelAddedAt": "添加于",
"LabelAddToPlaylist": "添加到播放列表", "LabelAddToPlaylist": "添加到播放列表",
"LabelAll": "全部", "LabelAll": "全部",
"LabelAllowSeekingOnMediaControls": "Allow position seeking on media notification controls",
"LabelAuthor": "作者", "LabelAuthor": "作者",
"LabelAuthorFirstLast": "作者 (姓 名)", "LabelAuthorFirstLast": "作者 (姓 名)",
"LabelAuthorLastFirst": "作者 (名, 姓)", "LabelAuthorLastFirst": "作者 (名, 姓)",