Change notification layout.

This commit is contained in:
stonegate 2020-08-29 00:50:40 +08:00
parent a24e7d6758
commit 83303b873e
35 changed files with 757 additions and 401 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

View File

@ -110,6 +110,8 @@ class MessageLookup extends MessageLookupByLibrary {
"editGroupName" : MessageLookupByLibrary.simpleMessage("Edit group name"), "editGroupName" : MessageLookupByLibrary.simpleMessage("Edit group name"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("End of Episode"), "endOfEpisode" : MessageLookupByLibrary.simpleMessage("End of Episode"),
"episode" : m4, "episode" : m4,
"fastForward" : MessageLookupByLibrary.simpleMessage("Fast forward"),
"fastRewind" : MessageLookupByLibrary.simpleMessage("Fast rewind"),
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Tap to edit group"), "featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Tap to edit group"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("You can change group name or delete it here, but the home group can not be edited or deleted"), "featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("You can change group name or delete it here, but the home group can not be edited or deleted"),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Episode view"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Episode view"),
@ -140,6 +142,7 @@ class MessageLookup extends MessageLookupByLibrary {
"groupFilter" : MessageLookupByLibrary.simpleMessage("Group filter"), "groupFilter" : MessageLookupByLibrary.simpleMessage("Group filter"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Are you sure you want to delete this group? Podcasts will be moved to the Home group."), "groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Are you sure you want to delete this group? Podcasts will be moved to the Home group."),
"groups" : m6, "groups" : m6,
"hideListenedSetting" : MessageLookupByLibrary.simpleMessage("Hide listened"),
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("See All"), "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("See All"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Sort by"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Sort by"),
@ -186,12 +189,14 @@ class MessageLookup extends MessageLookupByLibrary {
"noShownote" : MessageLookupByLibrary.simpleMessage("No show notes available for this episode."), "noShownote" : MessageLookupByLibrary.simpleMessage("No show notes available for this episode."),
"notificaitonFatch" : m12, "notificaitonFatch" : m12,
"notificationNetworkError" : m13, "notificationNetworkError" : m13,
"notificationSetting" : MessageLookupByLibrary.simpleMessage("Notification panel"),
"notificationSubscribe" : m14, "notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15, "notificationSubscribeExisted" : m15,
"notificationSuccess" : m16, "notificationSuccess" : m16,
"notificationUpdate" : m17, "notificationUpdate" : m17,
"notificationUpdateError" : m18, "notificationUpdateError" : m18,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"), "oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"),
"pause" : MessageLookupByLibrary.simpleMessage("Pause"),
"play" : MessageLookupByLibrary.simpleMessage("Play"), "play" : MessageLookupByLibrary.simpleMessage("Play"),
"playback" : MessageLookupByLibrary.simpleMessage("Playback control"), "playback" : MessageLookupByLibrary.simpleMessage("Playback control"),
"player" : MessageLookupByLibrary.simpleMessage("Player"), "player" : MessageLookupByLibrary.simpleMessage("Player"),
@ -300,7 +305,9 @@ class MessageLookup extends MessageLookupByLibrary {
"size" : MessageLookupByLibrary.simpleMessage("Size"), "size" : MessageLookupByLibrary.simpleMessage("Size"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Skip seconds at start"), "skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Skip seconds at start"),
"skipSilence" : MessageLookupByLibrary.simpleMessage("Skip silence"), "skipSilence" : MessageLookupByLibrary.simpleMessage("Skip silence"),
"skipToNext" : MessageLookupByLibrary.simpleMessage("Skip to next"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Sleep timer"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("Sleep timer"),
"stop" : MessageLookupByLibrary.simpleMessage("Stop"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"), "subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"), "subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("System default"), "systemDefault" : MessageLookupByLibrary.simpleMessage("System default"),

View File

@ -110,6 +110,8 @@ class MessageLookup extends MessageLookupByLibrary {
"editGroupName" : MessageLookupByLibrary.simpleMessage("Editar nombre del grupo"), "editGroupName" : MessageLookupByLibrary.simpleMessage("Editar nombre del grupo"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin del episodio"), "endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin del episodio"),
"episode" : m4, "episode" : m4,
"fastForward" : MessageLookupByLibrary.simpleMessage("Fast forward"),
"fastRewind" : MessageLookupByLibrary.simpleMessage("Fast rewind"),
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Toca para editar grupo"), "featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Toca para editar grupo"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("Puedes cambiar el nombre del grupo o eliminar el grupo aquí, el grupo Home no puede ser editado ni borrado"), "featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("Puedes cambiar el nombre del grupo o eliminar el grupo aquí, el grupo Home no puede ser editado ni borrado"),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Vista de episodios"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Vista de episodios"),
@ -140,6 +142,7 @@ class MessageLookup extends MessageLookupByLibrary {
"groupFilter" : MessageLookupByLibrary.simpleMessage("Filtro de grupo"), "groupFilter" : MessageLookupByLibrary.simpleMessage("Filtro de grupo"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("¿Estas seguro de que quieres remover este grupo? Los podcasts serán movidos al grupo Home"), "groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("¿Estas seguro de que quieres remover este grupo? Los podcasts serán movidos al grupo Home"),
"groups" : m6, "groups" : m6,
"hideListenedSetting" : MessageLookupByLibrary.simpleMessage("Hide listened"),
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("Ver todo"), "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("Ver todo"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Lista de reproducción"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Lista de reproducción"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Ordenar por"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Ordenar por"),
@ -186,12 +189,14 @@ class MessageLookup extends MessageLookupByLibrary {
"noShownote" : MessageLookupByLibrary.simpleMessage("Aun no hay notas disponibles para este episodio"), "noShownote" : MessageLookupByLibrary.simpleMessage("Aun no hay notas disponibles para este episodio"),
"notificaitonFatch" : m12, "notificaitonFatch" : m12,
"notificationNetworkError" : m13, "notificationNetworkError" : m13,
"notificationSetting" : MessageLookupByLibrary.simpleMessage("Notification panel"),
"notificationSubscribe" : m14, "notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15, "notificationSubscribeExisted" : m15,
"notificationSuccess" : m16, "notificationSuccess" : m16,
"notificationUpdate" : m17, "notificationUpdate" : m17,
"notificationUpdateError" : m18, "notificationUpdateError" : m18,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Mas antiguos primero"), "oldestFirst" : MessageLookupByLibrary.simpleMessage("Mas antiguos primero"),
"pause" : MessageLookupByLibrary.simpleMessage("Pause"),
"play" : MessageLookupByLibrary.simpleMessage("Reproducir"), "play" : MessageLookupByLibrary.simpleMessage("Reproducir"),
"playback" : MessageLookupByLibrary.simpleMessage("Control de reproducción"), "playback" : MessageLookupByLibrary.simpleMessage("Control de reproducción"),
"player" : MessageLookupByLibrary.simpleMessage("Reproductor"), "player" : MessageLookupByLibrary.simpleMessage("Reproductor"),
@ -300,7 +305,9 @@ class MessageLookup extends MessageLookupByLibrary {
"size" : MessageLookupByLibrary.simpleMessage("Tamaño"), "size" : MessageLookupByLibrary.simpleMessage("Tamaño"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Saltar segundos al inicio"), "skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Saltar segundos al inicio"),
"skipSilence" : MessageLookupByLibrary.simpleMessage("Saltar silencios"), "skipSilence" : MessageLookupByLibrary.simpleMessage("Saltar silencios"),
"skipToNext" : MessageLookupByLibrary.simpleMessage("Skip to next"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Temporizador de sueño"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("Temporizador de sueño"),
"stop" : MessageLookupByLibrary.simpleMessage("Stop"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Suscribir"), "subscribe" : MessageLookupByLibrary.simpleMessage("Suscribir"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exportar OPML de todos los podcasts"), "subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exportar OPML de todos los podcasts"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("Acorde al sistema"), "systemDefault" : MessageLookupByLibrary.simpleMessage("Acorde al sistema"),

View File

@ -47,7 +47,7 @@ class MessageLookup extends MessageLookupByLibrary {
static m13(title) => "Échec de labonnement, erreur réseau ${title} "; static m13(title) => "Échec de labonnement, erreur réseau ${title} ";
static m14(title) => "S\'abonner"; static m14(title) => "Abonnement en cours";
static m15(title) => "Échec de labonnement, le podcast existe déjà ${title}"; static m15(title) => "Échec de labonnement, le podcast existe déjà ${title}";
@ -85,9 +85,9 @@ class MessageLookup extends MessageLookupByLibrary {
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Ajouter de nouveaux épisodes à la playlist."), "addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Ajouter de nouveaux épisodes à la playlist."),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("Ajouter des groupes"), "addSomeGroups" : MessageLookupByLibrary.simpleMessage("Ajouter des groupes"),
"all" : MessageLookupByLibrary.simpleMessage("Tout"), "all" : MessageLookupByLibrary.simpleMessage("Tout"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("Téléchargements auto"), "autoDownload" : MessageLookupByLibrary.simpleMessage("Automatisation"),
"back" : MessageLookupByLibrary.simpleMessage("Retour"), "back" : MessageLookupByLibrary.simpleMessage("Retour"),
"boostVolume" : MessageLookupByLibrary.simpleMessage("Boost volume"), "boostVolume" : MessageLookupByLibrary.simpleMessage("Booster le volume"),
"buffering" : MessageLookupByLibrary.simpleMessage("Buffering"), "buffering" : MessageLookupByLibrary.simpleMessage("Buffering"),
"cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"), "cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("Avertissement utilisation des données mobiles"), "cellularConfirm" : MessageLookupByLibrary.simpleMessage("Avertissement utilisation des données mobiles"),
@ -103,31 +103,33 @@ class MessageLookup extends MessageLookupByLibrary {
"daysCount" : m3, "daysCount" : m3,
"delete" : MessageLookupByLibrary.simpleMessage("Effacer"), "delete" : MessageLookupByLibrary.simpleMessage("Effacer"),
"developer" : MessageLookupByLibrary.simpleMessage("Développeur"), "developer" : MessageLookupByLibrary.simpleMessage("Développeur"),
"dismiss" : MessageLookupByLibrary.simpleMessage("Rejeter"), "dismiss" : MessageLookupByLibrary.simpleMessage("Passer"),
"done" : MessageLookupByLibrary.simpleMessage("Fait"), "done" : MessageLookupByLibrary.simpleMessage("Fait"),
"download" : MessageLookupByLibrary.simpleMessage("Téléchargés"), "download" : MessageLookupByLibrary.simpleMessage("Téléchargés"),
"downloaded" : MessageLookupByLibrary.simpleMessage("Téléchargés"), "downloaded" : MessageLookupByLibrary.simpleMessage("Téléchargés"),
"editGroupName" : MessageLookupByLibrary.simpleMessage("Modifier le nom du groupe"), "editGroupName" : MessageLookupByLibrary.simpleMessage("Modifier le nom du groupe"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin de l\'épisode"), "endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin de l\'épisode"),
"episode" : m4, "episode" : m4,
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Appuyez pour éditer le groupe"), "fastForward" : MessageLookupByLibrary.simpleMessage("Fast forward"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez supprimer ou modifier le nom du groupe, le groupe Home ne peut être modifié ni supprimé."), "fastRewind" : MessageLookupByLibrary.simpleMessage("Fast rewind"),
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Gestion des groupes"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("Ici vous pouvez supprimer ou modifier le nom des groupes, seul le groupe Home ne peut être édité."),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Vue épisode"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Vue épisode"),
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer un appui long pour jouer un épisode ou l\'ajouter à la playlist."), "featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer un appui long pour jouer un épisode ou l\'ajouter à la playlist."),
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un appui long pour jouer un épisode immédiatement"), "featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un appui long pour lancer un épisode"),
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("Appuyez pour ajouter un groupe."), "featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("Appuyez ici pour créer un groupe"),
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("Pour les nouveaux podcasts le groupe par défaut est Home. Vous pouvez créer de nouveaux groupes et y déplacer vos podcasts. Un podcast peut être associé à plusieurs groupes."), "featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("Pour les nouveaux podcasts le groupe par défaut est Home. Vous pouvez créer de nouveaux groupes et y déplacer vos podcasts. Un podcast peut être associé à plusieurs groupes."),
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("Un appui long pour classer les podcasts"), "featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("Classement des podcasts"),
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("Appuyez pour accéder à plus d\'options, un appui long permet de classer les podcasts du groupe."), "featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("Appuyez ici pour accéder à plus d\'options, un appui long permet de classer les podcasts d\'un groupe."),
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("Appuyez pour importer un fichier OPML"), "featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("Appuyez ici pour importer un fichier OPML"),
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez importer un fichier OPML, accéder aux paramètres ou actualiser tous les podcasts."), "featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez importer un fichier OPML, accéder aux paramètres ou actualiser tous les podcasts."),
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("Appuyez pour ouvrir la playlist"), "featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("Appuyez ici pour ouvrir la playlist"),
"featureDiscoveryPlaylistDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez ajouter des épisodes dans la playlist. Ils seront automatiquement retirés l\'écoute finie."), "featureDiscoveryPlaylistDes" : MessageLookupByLibrary.simpleMessage("Ajoutez des épisodes dans la playlist. Ils seront automatiquement retirés une fois écoutés."),
"featureDiscoveryPodcast" : MessageLookupByLibrary.simpleMessage("Vue podcasts"), "featureDiscoveryPodcast" : MessageLookupByLibrary.simpleMessage("Vue podcasts"),
"featureDiscoveryPodcastDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez appuyer sur Tout Voir pour ajouter des groupes ou gérer les podcasts."), "featureDiscoveryPodcastDes" : MessageLookupByLibrary.simpleMessage("Appuyez sur Tout Voir pour ajouter des groupes et gérer les podcasts."),
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un défilement vertical pour changer de groupe."), "featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un défilement vertical pour changer de groupe."),
"featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("Appuyez pour chercher un podcast"), "featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("Appuyez ici pour rechercher un podcast"),
"featureDiscoverySearchDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast."), "featureDiscoverySearchDes" : MessageLookupByLibrary.simpleMessage("Pour trouver vos podcasts vous pouvez effectuer une recherche par titres, mots clés ou liens RSS."),
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("Contact"), "feedbackEmail" : MessageLookupByLibrary.simpleMessage("Contact"),
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("GitHub"), "feedbackGithub" : MessageLookupByLibrary.simpleMessage("GitHub"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("PlayStore"), "feedbackPlay" : MessageLookupByLibrary.simpleMessage("PlayStore"),
@ -140,21 +142,22 @@ class MessageLookup extends MessageLookupByLibrary {
"groupFilter" : MessageLookupByLibrary.simpleMessage("Filtrer par groupe"), "groupFilter" : MessageLookupByLibrary.simpleMessage("Filtrer par groupe"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir supprimer ce groupe ? Les podcasts seront déplacés vers le groupe Home."), "groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir supprimer ce groupe ? Les podcasts seront déplacés vers le groupe Home."),
"groups" : m6, "groups" : m6,
"hideListenedSetting" : MessageLookupByLibrary.simpleMessage("Hide listened"),
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("Tout Voir"), "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("Tout Voir"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Classé par"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Classé par"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favoris"), "homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favoris"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Récents"), "homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Récents"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("À propos"), "homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("À propos"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Importer le fichier OPML"), "homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Importer un fichier OPML"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Tout actualiser"), "homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Tout actualiser"),
"hostedOn" : m7, "hostedOn" : m7,
"hoursAgo" : m8, "hoursAgo" : m8,
"hoursCount" : m9, "hoursCount" : m9,
"import" : MessageLookupByLibrary.simpleMessage("Importer"), "import" : MessageLookupByLibrary.simpleMessage("Importer"),
"introFourthPage" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer un appui long sur un épisode pour accéder aux actions rapides."), "introFourthPage" : MessageLookupByLibrary.simpleMessage("Un appui long sur un épisode lance les actions rapides."),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("Souscrivez aux podcasts via la section recherche ou importez un fichier OPML."), "introSecondPage" : MessageLookupByLibrary.simpleMessage("S\'abonner aux podcasts via la section recherche ou un fichier OPML."),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("Vous pouvez créer un nouveau groupe de podcasts."), "introThirdPage" : MessageLookupByLibrary.simpleMessage("Vous pouvez créer des groupes de podcasts."),
"later" : MessageLookupByLibrary.simpleMessage("Plus tard"), "later" : MessageLookupByLibrary.simpleMessage("Plus tard"),
"lightMode" : MessageLookupByLibrary.simpleMessage("Mode clair"), "lightMode" : MessageLookupByLibrary.simpleMessage("Mode clair"),
"like" : MessageLookupByLibrary.simpleMessage("Like"), "like" : MessageLookupByLibrary.simpleMessage("Like"),
@ -166,7 +169,7 @@ class MessageLookup extends MessageLookupByLibrary {
"mark" : MessageLookupByLibrary.simpleMessage(""), "mark" : MessageLookupByLibrary.simpleMessage(""),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Marquage effectué"), "markConfirm" : MessageLookupByLibrary.simpleMessage("Marquage effectué"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Marquer tous les épisodes comme lus ?"), "markConfirmContent" : MessageLookupByLibrary.simpleMessage("Marquer tous les épisodes comme lus ?"),
"markListened" : MessageLookupByLibrary.simpleMessage("Marquer comme lu"), "markListened" : MessageLookupByLibrary.simpleMessage("Marquage"),
"markNotListened" : MessageLookupByLibrary.simpleMessage("Mark not listened"), "markNotListened" : MessageLookupByLibrary.simpleMessage("Mark not listened"),
"menu" : MessageLookupByLibrary.simpleMessage("Menu"), "menu" : MessageLookupByLibrary.simpleMessage("Menu"),
"menuAllPodcasts" : MessageLookupByLibrary.simpleMessage("Tous les podcasts"), "menuAllPodcasts" : MessageLookupByLibrary.simpleMessage("Tous les podcasts"),
@ -181,32 +184,34 @@ class MessageLookup extends MessageLookupByLibrary {
"next" : MessageLookupByLibrary.simpleMessage("Suivant"), "next" : MessageLookupByLibrary.simpleMessage("Suivant"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("Aucun épisode téléchargé."), "noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("Aucun épisode téléchargé."),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("Aucun épisode ajouté."), "noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("Aucun épisode ajouté."),
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("Aucun épisode récupéré."), "noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("Aucun épisode récent."),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("Ce groupe ne contient aucun podcast"), "noPodcastGroup" : MessageLookupByLibrary.simpleMessage("Ce groupe ne contient aucun podcast"),
"noShownote" : MessageLookupByLibrary.simpleMessage("Notes de l\'épisode manquantes."), "noShownote" : MessageLookupByLibrary.simpleMessage("Notes de l\'épisode manquantes."),
"notificaitonFatch" : m12, "notificaitonFatch" : m12,
"notificationNetworkError" : m13, "notificationNetworkError" : m13,
"notificationSetting" : MessageLookupByLibrary.simpleMessage("Notification panel"),
"notificationSubscribe" : m14, "notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15, "notificationSubscribeExisted" : m15,
"notificationSuccess" : m16, "notificationSuccess" : m16,
"notificationUpdate" : m17, "notificationUpdate" : m17,
"notificationUpdateError" : m18, "notificationUpdateError" : m18,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier"), "oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier"),
"pause" : MessageLookupByLibrary.simpleMessage("Pause"),
"play" : MessageLookupByLibrary.simpleMessage("Lecture"), "play" : MessageLookupByLibrary.simpleMessage("Lecture"),
"playback" : MessageLookupByLibrary.simpleMessage("Commandes du lecteur"), "playback" : MessageLookupByLibrary.simpleMessage("Commandes du lecteur"),
"player" : MessageLookupByLibrary.simpleMessage("Player"), "player" : MessageLookupByLibrary.simpleMessage("Player"),
"playerHeightMed" : MessageLookupByLibrary.simpleMessage("Medium"), "playerHeightMed" : MessageLookupByLibrary.simpleMessage("Moyen"),
"playerHeightShort" : MessageLookupByLibrary.simpleMessage("Low"), "playerHeightShort" : MessageLookupByLibrary.simpleMessage("Petit"),
"playerHeightTall" : MessageLookupByLibrary.simpleMessage("High"), "playerHeightTall" : MessageLookupByLibrary.simpleMessage("Grand"),
"playing" : MessageLookupByLibrary.simpleMessage("En cours"), "playing" : MessageLookupByLibrary.simpleMessage("En cours"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"), "plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : m19, "podcast" : m19,
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Abonnements"), "podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Abonné au podcast"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Télécharger l\'épisode"), "popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Télécharger l\'épisode"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode à la playlist"), "popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Ajouter à la playlist"),
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode aux favoris"), "popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode aux favoris"),
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marquer l\'épisode comme lu"), "popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marquer l\'épisode comme lu"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Jouer l\'épisode"), "popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer l\'épisode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Gestion des données"), "privacyPolicy" : MessageLookupByLibrary.simpleMessage("Gestion des données"),
"published" : m20, "published" : m20,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Quotidien"), "publishedDaily" : MessageLookupByLibrary.simpleMessage("Quotidien"),
@ -231,7 +236,7 @@ class MessageLookup extends MessageLookupByLibrary {
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"), "settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"), "settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Sélection de la couleur du thème"), "settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Sélection de la couleur du thème"),
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("App intro"), "settingsAppIntro" : MessageLookupByLibrary.simpleMessage("Revoir l\'introduction"),
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("Apparence"), "settingsAppearance" : MessageLookupByLibrary.simpleMessage("Apparence"),
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("Couleurs et thèmes"), "settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("Couleurs et thèmes"),
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("Cache audio"), "settingsAudioCache" : MessageLookupByLibrary.simpleMessage("Cache audio"),
@ -241,25 +246,25 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer automatiquement l\'épisode suivant"), "settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer automatiquement l\'épisode suivant"),
"settingsBackup" : MessageLookupByLibrary.simpleMessage("Backup"), "settingsBackup" : MessageLookupByLibrary.simpleMessage("Backup"),
"settingsBackupDes" : MessageLookupByLibrary.simpleMessage("Sauvegarde des données de l\'application"), "settingsBackupDes" : MessageLookupByLibrary.simpleMessage("Sauvegarde des données de l\'application"),
"settingsBoostVolume" : MessageLookupByLibrary.simpleMessage("Volume boost level"), "settingsBoostVolume" : MessageLookupByLibrary.simpleMessage("Booster le volume"),
"settingsBoostVolumeDes" : MessageLookupByLibrary.simpleMessage("Change volume boost level"), "settingsBoostVolumeDes" : MessageLookupByLibrary.simpleMessage("Définir la puissance du volume"),
"settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("Vue par défaut"), "settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("Vue par défaut"),
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("Onglet Téléchargés"), "settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("Onglet Téléchargés"),
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("Onglet Favoris"), "settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("Onglet Favoris"),
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("Page du podcast"), "settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("Onglet podcasts"),
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("Onglet Récents"), "settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("Onglet Récents"),
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("Revoir le tutoriel"), "settingsDiscovery" : MessageLookupByLibrary.simpleMessage("Revoir le tutoriel"),
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"), "settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"),
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualiser tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes"), "settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualiser tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes"),
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Exporter et importer les paramètres de l\'application."), "settingsExportDes" : MessageLookupByLibrary.simpleMessage("Exporter et importer les paramètres de l\'application."),
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Avance rapide"), "settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Avance rapide"),
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Saut avant en secondes"), "settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Saut avant"),
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"), "settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bug et demande d\'ajout de fonction"), "settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bug et demande d\'ajout de fonction"),
"settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"), "settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"),
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Gestion des données"), "settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Gestion des données"),
"settingsInfo" : MessageLookupByLibrary.simpleMessage("Infos"), "settingsInfo" : MessageLookupByLibrary.simpleMessage("Informations"),
"settingsInterface" : MessageLookupByLibrary.simpleMessage("Interface"), "settingsInterface" : MessageLookupByLibrary.simpleMessage("Interface utilisateur"),
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("Langues"), "settingsLanguages" : MessageLookupByLibrary.simpleMessage("Langues"),
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("Sélection de la langue"), "settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("Sélection de la langue"),
"settingsLayout" : MessageLookupByLibrary.simpleMessage("Style"), "settingsLayout" : MessageLookupByLibrary.simpleMessage("Style"),
@ -267,47 +272,49 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("Librairies"), "settingsLibraries" : MessageLookupByLibrary.simpleMessage("Librairies"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("Librairies opensource utilisées"), "settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("Librairies opensource utilisées"),
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("Gérer les téléchargements"), "settingsManageDownload" : MessageLookupByLibrary.simpleMessage("Gérer les téléchargements"),
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("Gérer les fichiers audio téléchargés"), "settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("Gestion des fichiers audio téléchargés"),
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("Lecture automatique"), "settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("Lecture automatique"),
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("Utilisation du réseau mobile"), "settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("Utilisation du réseau mobile"),
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique sur réseau mobile"), "settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique sur réseau mobile"),
"settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez automatiser le téléchargement des podcasts sur la page de gestion des groupes."), "settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("L\'automatisation du téléchargement peut aussi être configurée sur page de gestion des groupes"),
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("Si connecté à un réseau mobile, demander une confirmation avant de télécharger."), "settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("Demander une confirmation avant de lancer un téléchargement"),
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("Playlist et lecteur"), "settingsPlayDes" : MessageLookupByLibrary.simpleMessage("Playlist et lecteur"),
"settingsPlayerHeight" : MessageLookupByLibrary.simpleMessage("Player height"), "settingsPlayerHeight" : MessageLookupByLibrary.simpleMessage("Taille du player"),
"settingsPlayerHeightDes" : MessageLookupByLibrary.simpleMessage("Change player widget height as you like"), "settingsPlayerHeightDes" : MessageLookupByLibrary.simpleMessage("Changer la hauteur du widget"),
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("Menu popup des épisodes"), "settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("Menu popup des épisodes"),
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Configuration du menu popup"), "settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Configuration du menu popup"),
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Préférences"), "settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Préférences"),
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"), "settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"),
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activer pour un mode sombre accentué"), "settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Mode sombre accentué"),
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Retour rapide"), "settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Retour rapide"),
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Saut arrière en secondes"), "settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Saut arrière"),
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"), "settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"),
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"), "settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"),
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Temps par défaut"), "settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Durée par défaut"),
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("Configuration de la minuterie"), "settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("Configuration de la minuterie"),
"settingsSTMode" : MessageLookupByLibrary.simpleMessage("Mode minuterie automatique"), "settingsSTMode" : MessageLookupByLibrary.simpleMessage("Mode minuterie automatique"),
"settingsStorageDes" : MessageLookupByLibrary.simpleMessage("Gestion du cache et de l\'espace de stockage"), "settingsStorageDes" : MessageLookupByLibrary.simpleMessage("Gestion du cache et de l\'espace de stockage"),
"settingsSyncing" : MessageLookupByLibrary.simpleMessage("Synchronisation"), "settingsSyncing" : MessageLookupByLibrary.simpleMessage("Synchronisation"),
"settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualisation des podcasts en arrière-plan"), "settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualisation des podcasts en arrière-plan"),
"settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("Appuyer pour ouvrir le menu"), "settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("Ouverture du menu"),
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Vous devez effectuer un appui long pour ouvrir la page de l\'épisode"), "settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Effectuer un appui long pour ouvrir la page de l\'épisode"),
"settingsTheme" : MessageLookupByLibrary.simpleMessage("Thème"), "settingsTheme" : MessageLookupByLibrary.simpleMessage("Thème"),
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Intervalle des mises à jour"), "settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Intervalle de mise à jour"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("24 heures par défaut"), "settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("L\'intervalle par défaut est de 24 heures"),
"share" : MessageLookupByLibrary.simpleMessage("Partager"), "share" : MessageLookupByLibrary.simpleMessage("Partager"),
"size" : MessageLookupByLibrary.simpleMessage("Taille"), "size" : MessageLookupByLibrary.simpleMessage("Taille"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Passer les premières secondes du début"), "skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Passer les premières secondes du début"),
"skipSilence" : MessageLookupByLibrary.simpleMessage("Skip silence"), "skipSilence" : MessageLookupByLibrary.simpleMessage("Skip silence"),
"skipToNext" : MessageLookupByLibrary.simpleMessage("Skip to next"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Minuterie"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("Minuterie"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Abonnements"), "stop" : MessageLookupByLibrary.simpleMessage("Stop"),
"subscribe" : MessageLookupByLibrary.simpleMessage("S\'abonner"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts."), "subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts."),
"systemDefault" : MessageLookupByLibrary.simpleMessage("Système par défaut"), "systemDefault" : MessageLookupByLibrary.simpleMessage("Système par défaut"),
"timeLastPlayed" : m24, "timeLastPlayed" : m24,
"timeLeft" : m25, "timeLeft" : m25,
"to" : m26, "to" : m26,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Ajouté à la playlist."), "toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode à la playlist."),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Tutoriel réinitialisé, veuillez redémarrer l\'application."), "toastDiscovery" : MessageLookupByLibrary.simpleMessage("Tutoriel réinitialisé, veuillez redémarrer l\'application."),
"toastFileError" : MessageLookupByLibrary.simpleMessage("Erreur du fichier, échec de l\'abonnement."), "toastFileError" : MessageLookupByLibrary.simpleMessage("Erreur du fichier, échec de l\'abonnement."),
"toastFileNotValid" : MessageLookupByLibrary.simpleMessage("Fichier invalide."), "toastFileNotValid" : MessageLookupByLibrary.simpleMessage("Fichier invalide."),

View File

@ -110,6 +110,8 @@ class MessageLookup extends MessageLookupByLibrary {
"editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"), "editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"), "endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"),
"episode" : m4, "episode" : m4,
"fastForward" : MessageLookupByLibrary.simpleMessage("快进"),
"fastRewind" : MessageLookupByLibrary.simpleMessage("快退"),
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"), "featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"), "featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"),
@ -140,6 +142,7 @@ class MessageLookup extends MessageLookupByLibrary {
"groupFilter" : MessageLookupByLibrary.simpleMessage("分组"), "groupFilter" : MessageLookupByLibrary.simpleMessage("分组"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"), "groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
"groups" : m6, "groups" : m6,
"hideListenedSetting" : MessageLookupByLibrary.simpleMessage("隐藏已收听"),
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"), "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"),
@ -186,12 +189,14 @@ class MessageLookup extends MessageLookupByLibrary {
"noShownote" : MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"), "noShownote" : MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"),
"notificaitonFatch" : m12, "notificaitonFatch" : m12,
"notificationNetworkError" : m13, "notificationNetworkError" : m13,
"notificationSetting" : MessageLookupByLibrary.simpleMessage("通知栏"),
"notificationSubscribe" : m14, "notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15, "notificationSubscribeExisted" : m15,
"notificationSuccess" : m16, "notificationSuccess" : m16,
"notificationUpdate" : m17, "notificationUpdate" : m17,
"notificationUpdateError" : m18, "notificationUpdateError" : m18,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"), "oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
"pause" : MessageLookupByLibrary.simpleMessage("暂停"),
"play" : MessageLookupByLibrary.simpleMessage("播放"), "play" : MessageLookupByLibrary.simpleMessage("播放"),
"playback" : MessageLookupByLibrary.simpleMessage("播放控制"), "playback" : MessageLookupByLibrary.simpleMessage("播放控制"),
"player" : MessageLookupByLibrary.simpleMessage("播放器"), "player" : MessageLookupByLibrary.simpleMessage("播放器"),
@ -300,7 +305,9 @@ class MessageLookup extends MessageLookupByLibrary {
"size" : MessageLookupByLibrary.simpleMessage("大小"), "size" : MessageLookupByLibrary.simpleMessage("大小"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"), "skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
"skipSilence" : MessageLookupByLibrary.simpleMessage("跳过无声"), "skipSilence" : MessageLookupByLibrary.simpleMessage("跳过无声"),
"skipToNext" : MessageLookupByLibrary.simpleMessage("下一首"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"),
"stop" : MessageLookupByLibrary.simpleMessage("停止"),
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"), "subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"), "subscribeExportDes" : MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"), "systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),

View File

@ -358,6 +358,26 @@ class S {
); );
} }
/// `Fast forward`
String get fastForward {
return Intl.message(
'Fast forward',
name: 'fastForward',
desc: '',
args: [],
);
}
/// `Fast rewind`
String get fastRewind {
return Intl.message(
'Fast rewind',
name: 'fastRewind',
desc: '',
args: [],
);
}
/// `Tap to edit group` /// `Tap to edit group`
String get featureDiscoveryEditGroup { String get featureDiscoveryEditGroup {
return Intl.message( return Intl.message(
@ -661,6 +681,16 @@ class S {
); );
} }
/// `Hide listened`
String get hideListenedSetting {
return Intl.message(
'Hide listened',
name: 'hideListenedSetting',
desc: '',
args: [],
);
}
/// `See All` /// `See All`
String get homeGroupsSeeAll { String get homeGroupsSeeAll {
return Intl.message( return Intl.message(
@ -1133,6 +1163,16 @@ class S {
); );
} }
/// `Notification panel`
String get notificationSetting {
return Intl.message(
'Notification panel',
name: 'notificationSetting',
desc: '',
args: [],
);
}
/// `Subscribe {title}` /// `Subscribe {title}`
String notificationSubscribe(Object title) { String notificationSubscribe(Object title) {
return Intl.message( return Intl.message(
@ -1193,6 +1233,16 @@ class S {
); );
} }
/// `Pause`
String get pause {
return Intl.message(
'Pause',
name: 'pause',
desc: '',
args: [],
);
}
/// `Play` /// `Play`
String get play { String get play {
return Intl.message( return Intl.message(
@ -2282,6 +2332,16 @@ class S {
); );
} }
/// `Skip to next`
String get skipToNext {
return Intl.message(
'Skip to next',
name: 'skipToNext',
desc: '',
args: [],
);
}
/// `Sleep timer` /// `Sleep timer`
String get sleepTimer { String get sleepTimer {
return Intl.message( return Intl.message(
@ -2292,6 +2352,16 @@ class S {
); );
} }
/// `Stop`
String get stop {
return Intl.message(
'Stop',
name: 'stop',
desc: '',
args: [],
);
}
/// `Subscribe` /// `Subscribe`
String get subscribe { String get subscribe {
return Intl.message( return Intl.message(

View File

@ -74,6 +74,10 @@
"@endOfEpisode": {}, "@endOfEpisode": {},
"episode": "{count, plural, zero{} one{Episode} other{Episodes}}", "episode": "{count, plural, zero{} one{Episode} other{Episodes}}",
"@episode": {}, "@episode": {},
"fastForward": "Fast forward",
"@fastForward": {},
"fastRewind": "Fast rewind",
"@fastRewind": {},
"featureDiscoveryEditGroup": "Tap to edit group", "featureDiscoveryEditGroup": "Tap to edit group",
"@featureDiscoveryEditGroup": {}, "@featureDiscoveryEditGroup": {},
"featureDiscoveryEditGroupDes": "You can change group name or delete it here, but the home group can not be edited or deleted", "featureDiscoveryEditGroupDes": "You can change group name or delete it here, but the home group can not be edited or deleted",
@ -142,6 +146,8 @@
"@groupRemoveConfirm": {}, "@groupRemoveConfirm": {},
"groups": "{count, plural, zero{Group} one{Group} other{Groups}}", "groups": "{count, plural, zero{Group} one{Group} other{Groups}}",
"@groups": {}, "@groups": {},
"hideListenedSetting": "Hide listened",
"@hideListenedSetting": {},
"homeGroupsSeeAll": "See All", "homeGroupsSeeAll": "See All",
"@homeGroupsSeeAll": {}, "@homeGroupsSeeAll": {},
"homeMenuPlaylist": "Playlist", "homeMenuPlaylist": "Playlist",
@ -248,6 +254,8 @@
"title": {} "title": {}
} }
}, },
"notificationSetting": "Notification panel",
"@notificationSetting": {},
"notificationSubscribe": "Subscribe {title}", "notificationSubscribe": "Subscribe {title}",
"@notificationSubscribe": { "@notificationSubscribe": {
"placeholders": { "placeholders": {
@ -280,6 +288,8 @@
}, },
"oldestFirst": "Oldest first", "oldestFirst": "Oldest first",
"@oldestFirst": {}, "@oldestFirst": {},
"pause": "Pause",
"@pause": {},
"play": "Play", "play": "Play",
"@play": {}, "@play": {},
"playback": "Playback control", "playback": "Playback control",
@ -517,8 +527,12 @@
"@skipSilence": { "@skipSilence": {
"description": "Feature skip silence" "description": "Feature skip silence"
}, },
"skipToNext": "Skip to next",
"@skipToNext": {},
"sleepTimer": "Sleep timer", "sleepTimer": "Sleep timer",
"@sleepTimer": {}, "@sleepTimer": {},
"stop": "Stop",
"@stop": {},
"subscribe": "Subscribe", "subscribe": "Subscribe",
"@subscribe": {}, "@subscribe": {},
"subscribeExportDes": "Export OMPL file of all podcasts", "subscribeExportDes": "Export OMPL file of all podcasts",

View File

@ -74,6 +74,10 @@
"@endOfEpisode": {}, "@endOfEpisode": {},
"episode": "{count, plural, zero{} one{Episodio} other{Episodios}}", "episode": "{count, plural, zero{} one{Episodio} other{Episodios}}",
"@episode": {}, "@episode": {},
"fastForward": "Fast forward",
"@fastForward": {},
"fastRewind": "Fast rewind",
"@fastRewind": {},
"featureDiscoveryEditGroup": "Toca para editar grupo", "featureDiscoveryEditGroup": "Toca para editar grupo",
"@featureDiscoveryEditGroup": {}, "@featureDiscoveryEditGroup": {},
"featureDiscoveryEditGroupDes": "Puedes cambiar el nombre del grupo o eliminar el grupo aquí, el grupo Home no puede ser editado ni borrado", "featureDiscoveryEditGroupDes": "Puedes cambiar el nombre del grupo o eliminar el grupo aquí, el grupo Home no puede ser editado ni borrado",
@ -142,6 +146,8 @@
"@groupRemoveConfirm": {}, "@groupRemoveConfirm": {},
"groups": "{count, plural, zero{Grupo} one{Grupo} other{Grupos}}", "groups": "{count, plural, zero{Grupo} one{Grupo} other{Grupos}}",
"@groups": {}, "@groups": {},
"hideListenedSetting": "Hide listened",
"@hideListenedSetting": {},
"homeGroupsSeeAll": "Ver todo", "homeGroupsSeeAll": "Ver todo",
"@homeGroupsSeeAll": {}, "@homeGroupsSeeAll": {},
"homeMenuPlaylist": "Lista de reproducción", "homeMenuPlaylist": "Lista de reproducción",
@ -248,6 +254,8 @@
"title": {} "title": {}
} }
}, },
"notificationSetting": "Notification panel",
"@notificationSetting": {},
"notificationSubscribe": "Suscribir {title}", "notificationSubscribe": "Suscribir {title}",
"@notificationSubscribe": { "@notificationSubscribe": {
"placeholders": { "placeholders": {
@ -280,6 +288,8 @@
}, },
"oldestFirst": "Mas antiguos primero", "oldestFirst": "Mas antiguos primero",
"@oldestFirst": {}, "@oldestFirst": {},
"pause": "Pause",
"@pause": {},
"play": "Reproducir", "play": "Reproducir",
"@play": {}, "@play": {},
"playback": "Control de reproducción", "playback": "Control de reproducción",
@ -517,8 +527,12 @@
"@skipSilence": { "@skipSilence": {
"description": "Feature skip silence" "description": "Feature skip silence"
}, },
"skipToNext": "Skip to next",
"@skipToNext": {},
"sleepTimer": "Temporizador de sueño", "sleepTimer": "Temporizador de sueño",
"@sleepTimer": {}, "@sleepTimer": {},
"stop": "Stop",
"@stop": {},
"subscribe": "Suscribir", "subscribe": "Suscribir",
"@subscribe": {}, "@subscribe": {},
"subscribeExportDes": "Exportar OPML de todos los podcasts", "subscribeExportDes": "Exportar OPML de todos los podcasts",

View File

@ -20,11 +20,11 @@
}, },
"all": "Tout", "all": "Tout",
"@all": {}, "@all": {},
"autoDownload": "Téléchargements auto", "autoDownload": "Automatisation",
"@autoDownload": {}, "@autoDownload": {},
"back": "Retour", "back": "Retour",
"@back": {}, "@back": {},
"boostVolume": "Boost volume", "boostVolume": "Booster le volume",
"@boostVolume": { "@boostVolume": {
"description": "Boost volume in player widget." "description": "Boost volume in player widget."
}, },
@ -60,7 +60,7 @@
"@developer": { "@developer": {
"description": "Can also translate to About me" "description": "Can also translate to About me"
}, },
"dismiss": "Rejeter", "dismiss": "Passer",
"@dismiss": {}, "@dismiss": {},
"done": "Fait", "done": "Fait",
"@done": {}, "@done": {},
@ -74,41 +74,45 @@
"@endOfEpisode": {}, "@endOfEpisode": {},
"episode": "{count, plural, zero{} one{Épisode} other{Épisodes }}", "episode": "{count, plural, zero{} one{Épisode} other{Épisodes }}",
"@episode": {}, "@episode": {},
"featureDiscoveryEditGroup": "Appuyez pour éditer le groupe", "fastForward": "Fast forward",
"@fastForward": {},
"fastRewind": "Fast rewind",
"@fastRewind": {},
"featureDiscoveryEditGroup": "Gestion des groupes",
"@featureDiscoveryEditGroup": {}, "@featureDiscoveryEditGroup": {},
"featureDiscoveryEditGroupDes": "Vous pouvez supprimer ou modifier le nom du groupe, le groupe Home ne peut être modifié ni supprimé.", "featureDiscoveryEditGroupDes": "Ici vous pouvez supprimer ou modifier le nom des groupes, seul le groupe Home ne peut être édité.",
"@featureDiscoveryEditGroupDes": {}, "@featureDiscoveryEditGroupDes": {},
"featureDiscoveryEpisode": "Vue épisode", "featureDiscoveryEpisode": "Vue épisode",
"@featureDiscoveryEpisode": {}, "@featureDiscoveryEpisode": {},
"featureDiscoveryEpisodeDes": "Vous pouvez effectuer un appui long pour jouer un épisode ou l'ajouter à la playlist.", "featureDiscoveryEpisodeDes": "Vous pouvez effectuer un appui long pour jouer un épisode ou l'ajouter à la playlist.",
"@featureDiscoveryEpisodeDes": {}, "@featureDiscoveryEpisodeDes": {},
"featureDiscoveryEpisodeTitle": "Effectuez un appui long pour jouer un épisode immédiatement", "featureDiscoveryEpisodeTitle": "Effectuez un appui long pour lancer un épisode",
"@featureDiscoveryEpisodeTitle": {}, "@featureDiscoveryEpisodeTitle": {},
"featureDiscoveryGroup": "Appuyez pour ajouter un groupe.", "featureDiscoveryGroup": "Appuyez ici pour créer un groupe",
"@featureDiscoveryGroup": {}, "@featureDiscoveryGroup": {},
"featureDiscoveryGroupDes": "Pour les nouveaux podcasts le groupe par défaut est Home. Vous pouvez créer de nouveaux groupes et y déplacer vos podcasts. Un podcast peut être associé à plusieurs groupes.", "featureDiscoveryGroupDes": "Pour les nouveaux podcasts le groupe par défaut est Home. Vous pouvez créer de nouveaux groupes et y déplacer vos podcasts. Un podcast peut être associé à plusieurs groupes.",
"@featureDiscoveryGroupDes": {}, "@featureDiscoveryGroupDes": {},
"featureDiscoveryGroupPodcast": "Un appui long pour classer les podcasts", "featureDiscoveryGroupPodcast": "Classement des podcasts",
"@featureDiscoveryGroupPodcast": {}, "@featureDiscoveryGroupPodcast": {},
"featureDiscoveryGroupPodcastDes": "Appuyez pour accéder à plus d'options, un appui long permet de classer les podcasts du groupe.", "featureDiscoveryGroupPodcastDes": "Appuyez ici pour accéder à plus d'options, un appui long permet de classer les podcasts d'un groupe.",
"@featureDiscoveryGroupPodcastDes": {}, "@featureDiscoveryGroupPodcastDes": {},
"featureDiscoveryOMPL": "Appuyez pour importer un fichier OPML", "featureDiscoveryOMPL": "Appuyez ici pour importer un fichier OPML",
"@featureDiscoveryOMPL": {}, "@featureDiscoveryOMPL": {},
"featureDiscoveryOMPLDes": "Vous pouvez importer un fichier OPML, accéder aux paramètres ou actualiser tous les podcasts.", "featureDiscoveryOMPLDes": "Vous pouvez importer un fichier OPML, accéder aux paramètres ou actualiser tous les podcasts.",
"@featureDiscoveryOMPLDes": {}, "@featureDiscoveryOMPLDes": {},
"featureDiscoveryPlaylist": "Appuyez pour ouvrir la playlist", "featureDiscoveryPlaylist": "Appuyez ici pour ouvrir la playlist",
"@featureDiscoveryPlaylist": {}, "@featureDiscoveryPlaylist": {},
"featureDiscoveryPlaylistDes": "Vous pouvez ajouter des épisodes dans la playlist. Ils seront automatiquement retirés l'écoute finie.", "featureDiscoveryPlaylistDes": "Ajoutez des épisodes dans la playlist. Ils seront automatiquement retirés une fois écoutés.",
"@featureDiscoveryPlaylistDes": {}, "@featureDiscoveryPlaylistDes": {},
"featureDiscoveryPodcast": "Vue podcasts", "featureDiscoveryPodcast": "Vue podcasts",
"@featureDiscoveryPodcast": {}, "@featureDiscoveryPodcast": {},
"featureDiscoveryPodcastDes": "Vous pouvez appuyer sur Tout Voir pour ajouter des groupes ou gérer les podcasts.", "featureDiscoveryPodcastDes": "Appuyez sur Tout Voir pour ajouter des groupes et gérer les podcasts.",
"@featureDiscoveryPodcastDes": {}, "@featureDiscoveryPodcastDes": {},
"featureDiscoveryPodcastTitle": "Effectuez un défilement vertical pour changer de groupe.", "featureDiscoveryPodcastTitle": "Effectuez un défilement vertical pour changer de groupe.",
"@featureDiscoveryPodcastTitle": {}, "@featureDiscoveryPodcastTitle": {},
"featureDiscoverySearch": "Appuyez pour chercher un podcast", "featureDiscoverySearch": "Appuyez ici pour rechercher un podcast",
"@featureDiscoverySearch": {}, "@featureDiscoverySearch": {},
"featureDiscoverySearchDes": "Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast.", "featureDiscoverySearchDes": "Pour trouver vos podcasts vous pouvez effectuer une recherche par titres, mots clés ou liens RSS.",
"@featureDiscoverySearchDes": {}, "@featureDiscoverySearchDes": {},
"feedbackEmail": "Contact", "feedbackEmail": "Contact",
"@feedbackEmail": {}, "@feedbackEmail": {},
@ -142,6 +146,8 @@
"@groupRemoveConfirm": {}, "@groupRemoveConfirm": {},
"groups": "{count, plural, zero{Groupe} one{Groupe} other{Groupes}}", "groups": "{count, plural, zero{Groupe} one{Groupe} other{Groupes}}",
"@groups": {}, "@groups": {},
"hideListenedSetting": "Hide listened",
"@hideListenedSetting": {},
"homeGroupsSeeAll": "Tout Voir", "homeGroupsSeeAll": "Tout Voir",
"@homeGroupsSeeAll": {}, "@homeGroupsSeeAll": {},
"homeMenuPlaylist": "Playlist", "homeMenuPlaylist": "Playlist",
@ -154,7 +160,7 @@
"@homeTabMenuRecent": {}, "@homeTabMenuRecent": {},
"homeToprightMenuAbout": "À propos", "homeToprightMenuAbout": "À propos",
"@homeToprightMenuAbout": {}, "@homeToprightMenuAbout": {},
"homeToprightMenuImportOMPL": "Importer le fichier OPML", "homeToprightMenuImportOMPL": "Importer un fichier OPML",
"@homeToprightMenuImportOMPL": {}, "@homeToprightMenuImportOMPL": {},
"homeToprightMenuRefreshAll": "Tout actualiser", "homeToprightMenuRefreshAll": "Tout actualiser",
"@homeToprightMenuRefreshAll": {}, "@homeToprightMenuRefreshAll": {},
@ -170,11 +176,11 @@
"@hoursCount": {}, "@hoursCount": {},
"import": "Importer", "import": "Importer",
"@import": {}, "@import": {},
"introFourthPage": "Vous pouvez effectuer un appui long sur un épisode pour accéder aux actions rapides.", "introFourthPage": "Un appui long sur un épisode lance les actions rapides.",
"@introFourthPage": {}, "@introFourthPage": {},
"introSecondPage": "Souscrivez aux podcasts via la section recherche ou importez un fichier OPML.", "introSecondPage": "S'abonner aux podcasts via la section recherche ou un fichier OPML.",
"@introSecondPage": {}, "@introSecondPage": {},
"introThirdPage": "Vous pouvez créer un nouveau groupe de podcasts.", "introThirdPage": "Vous pouvez créer des groupes de podcasts.",
"@introThirdPage": {}, "@introThirdPage": {},
"later": "Plus tard", "later": "Plus tard",
"@later": {}, "@later": {},
@ -202,7 +208,7 @@
"@markConfirm": {}, "@markConfirm": {},
"markConfirmContent": "Marquer tous les épisodes comme lus ?", "markConfirmContent": "Marquer tous les épisodes comme lus ?",
"@markConfirmContent": {}, "@markConfirmContent": {},
"markListened": "Marquer comme lu", "markListened": "Marquage",
"@markListened": {}, "@markListened": {},
"markNotListened": "Mark not listened", "markNotListened": "Mark not listened",
"@markNotListened": {}, "@markNotListened": {},
@ -232,7 +238,7 @@
"@noEpisodeDownload": {}, "@noEpisodeDownload": {},
"noEpisodeFavorite": "Aucun épisode ajouté.", "noEpisodeFavorite": "Aucun épisode ajouté.",
"@noEpisodeFavorite": {}, "@noEpisodeFavorite": {},
"noEpisodeRecent": "Aucun épisode récupéré.", "noEpisodeRecent": "Aucun épisode récent.",
"@noEpisodeRecent": {}, "@noEpisodeRecent": {},
"noPodcastGroup": "Ce groupe ne contient aucun podcast", "noPodcastGroup": "Ce groupe ne contient aucun podcast",
"@noPodcastGroup": {}, "@noPodcastGroup": {},
@ -248,7 +254,9 @@
"title": {} "title": {}
} }
}, },
"notificationSubscribe": "S'abonner", "notificationSetting": "Notification panel",
"@notificationSetting": {},
"notificationSubscribe": "Abonnement en cours",
"@notificationSubscribe": { "@notificationSubscribe": {
"placeholders": { "placeholders": {
"title": {} "title": {}
@ -280,17 +288,19 @@
}, },
"oldestFirst": "Le plus ancien en premier", "oldestFirst": "Le plus ancien en premier",
"@oldestFirst": {}, "@oldestFirst": {},
"pause": "Pause",
"@pause": {},
"play": "Lecture", "play": "Lecture",
"@play": {}, "@play": {},
"playback": "Commandes du lecteur", "playback": "Commandes du lecteur",
"@playback": {}, "@playback": {},
"player": "Player", "player": "Player",
"@player": {}, "@player": {},
"playerHeightMed": "Medium", "playerHeightMed": "Moyen",
"@playerHeightMed": {}, "@playerHeightMed": {},
"playerHeightShort": "Low", "playerHeightShort": "Petit",
"@playerHeightShort": {}, "@playerHeightShort": {},
"playerHeightTall": "High", "playerHeightTall": "Grand",
"@playerHeightTall": {}, "@playerHeightTall": {},
"playing": "En cours", "playing": "En cours",
"@playing": {}, "@playing": {},
@ -298,17 +308,17 @@
"@plugins": {}, "@plugins": {},
"podcast": "{count, plural, zero{} one{Podcast} other{Podcasts}}", "podcast": "{count, plural, zero{} one{Podcast} other{Podcasts}}",
"@podcast": {}, "@podcast": {},
"podcastSubscribed": "Abonnements", "podcastSubscribed": "Abonné au podcast",
"@podcastSubscribed": {}, "@podcastSubscribed": {},
"popupMenuDownloadDes": "Télécharger l'épisode", "popupMenuDownloadDes": "Télécharger l'épisode",
"@popupMenuDownloadDes": {}, "@popupMenuDownloadDes": {},
"popupMenuLaterDes": "Ajouter l'épisode à la playlist", "popupMenuLaterDes": "Ajouter à la playlist",
"@popupMenuLaterDes": {}, "@popupMenuLaterDes": {},
"popupMenuLikeDes": "Ajouter l'épisode aux favoris", "popupMenuLikeDes": "Ajouter l'épisode aux favoris",
"@popupMenuLikeDes": {}, "@popupMenuLikeDes": {},
"popupMenuMarkDes": "Marquer l'épisode comme lu", "popupMenuMarkDes": "Marquer l'épisode comme lu",
"@popupMenuMarkDes": {}, "@popupMenuMarkDes": {},
"popupMenuPlayDes": "Jouer l'épisode", "popupMenuPlayDes": "Lancer l'épisode",
"@popupMenuPlayDes": {}, "@popupMenuPlayDes": {},
"privacyPolicy": "Gestion des données", "privacyPolicy": "Gestion des données",
"@privacyPolicy": {}, "@privacyPolicy": {},
@ -377,7 +387,7 @@
"@settingsAppearance": {}, "@settingsAppearance": {},
"settingsAppearanceDes": "Couleurs et thèmes", "settingsAppearanceDes": "Couleurs et thèmes",
"@settingsAppearanceDes": {}, "@settingsAppearanceDes": {},
"settingsAppIntro": "App intro", "settingsAppIntro": "Revoir l'introduction",
"@settingsAppIntro": {}, "@settingsAppIntro": {},
"settingsAudioCache": "Cache audio", "settingsAudioCache": "Cache audio",
"@settingsAudioCache": {}, "@settingsAudioCache": {},
@ -393,9 +403,9 @@
"@settingsBackup": {}, "@settingsBackup": {},
"settingsBackupDes": "Sauvegarde des données de l'application", "settingsBackupDes": "Sauvegarde des données de l'application",
"@settingsBackupDes": {}, "@settingsBackupDes": {},
"settingsBoostVolume": "Volume boost level", "settingsBoostVolume": "Booster le volume",
"@settingsBoostVolume": {}, "@settingsBoostVolume": {},
"settingsBoostVolumeDes": "Change volume boost level", "settingsBoostVolumeDes": "Définir la puissance du volume",
"@settingsBoostVolumeDes": {}, "@settingsBoostVolumeDes": {},
"settingsDefaultGrid": "Vue par défaut", "settingsDefaultGrid": "Vue par défaut",
"@settingsDefaultGrid": {}, "@settingsDefaultGrid": {},
@ -403,7 +413,7 @@
"@settingsDefaultGridDownload": {}, "@settingsDefaultGridDownload": {},
"settingsDefaultGridFavorite": "Onglet Favoris", "settingsDefaultGridFavorite": "Onglet Favoris",
"@settingsDefaultGridFavorite": {}, "@settingsDefaultGridFavorite": {},
"settingsDefaultGridPodcast": "Page du podcast", "settingsDefaultGridPodcast": "Onglet podcasts",
"@settingsDefaultGridPodcast": {}, "@settingsDefaultGridPodcast": {},
"settingsDefaultGridRecent": "Onglet Récents", "settingsDefaultGridRecent": "Onglet Récents",
"@settingsDefaultGridRecent": {}, "@settingsDefaultGridRecent": {},
@ -419,7 +429,7 @@
"@settingsExportDes": {}, "@settingsExportDes": {},
"settingsFastForwardSec": "Avance rapide", "settingsFastForwardSec": "Avance rapide",
"@settingsFastForwardSec": {}, "@settingsFastForwardSec": {},
"settingsFastForwardSecDes": "Saut avant en secondes", "settingsFastForwardSecDes": "Saut avant",
"@settingsFastForwardSecDes": {}, "@settingsFastForwardSecDes": {},
"settingsFeedback": "Feedback", "settingsFeedback": "Feedback",
"@settingsFeedback": {}, "@settingsFeedback": {},
@ -429,9 +439,9 @@
"@settingsHistory": {}, "@settingsHistory": {},
"settingsHistoryDes": "Gestion des données", "settingsHistoryDes": "Gestion des données",
"@settingsHistoryDes": {}, "@settingsHistoryDes": {},
"settingsInfo": "Infos", "settingsInfo": "Informations",
"@settingsInfo": {}, "@settingsInfo": {},
"settingsInterface": "Interface", "settingsInterface": "Interface utilisateur",
"@settingsInterface": {}, "@settingsInterface": {},
"settingsLanguages": "Langues", "settingsLanguages": "Langues",
"@settingsLanguages": {}, "@settingsLanguages": {},
@ -447,7 +457,7 @@
"@settingsLibrariesDes": {}, "@settingsLibrariesDes": {},
"settingsManageDownload": "Gérer les téléchargements", "settingsManageDownload": "Gérer les téléchargements",
"@settingsManageDownload": {}, "@settingsManageDownload": {},
"settingsManageDownloadDes": "Gérer les fichiers audio téléchargés", "settingsManageDownloadDes": "Gestion des fichiers audio téléchargés",
"@settingsManageDownloadDes": {}, "@settingsManageDownloadDes": {},
"settingsMenuAutoPlay": "Lecture automatique", "settingsMenuAutoPlay": "Lecture automatique",
"@settingsMenuAutoPlay": {}, "@settingsMenuAutoPlay": {},
@ -455,15 +465,15 @@
"@settingsNetworkCellular": {}, "@settingsNetworkCellular": {},
"settingsNetworkCellularAuto": "Téléchargement automatique sur réseau mobile", "settingsNetworkCellularAuto": "Téléchargement automatique sur réseau mobile",
"@settingsNetworkCellularAuto": {}, "@settingsNetworkCellularAuto": {},
"settingsNetworkCellularAutoDes": "Vous pouvez automatiser le téléchargement des podcasts sur la page de gestion des groupes.", "settingsNetworkCellularAutoDes": "L'automatisation du téléchargement peut aussi être configurée sur page de gestion des groupes",
"@settingsNetworkCellularAutoDes": {}, "@settingsNetworkCellularAutoDes": {},
"settingsNetworkCellularDes": "Si connecté à un réseau mobile, demander une confirmation avant de télécharger.", "settingsNetworkCellularDes": "Demander une confirmation avant de lancer un téléchargement",
"@settingsNetworkCellularDes": {}, "@settingsNetworkCellularDes": {},
"settingsPlayDes": "Playlist et lecteur", "settingsPlayDes": "Playlist et lecteur",
"@settingsPlayDes": {}, "@settingsPlayDes": {},
"settingsPlayerHeight": "Player height", "settingsPlayerHeight": "Taille du player",
"@settingsPlayerHeight": {}, "@settingsPlayerHeight": {},
"settingsPlayerHeightDes": "Change player widget height as you like", "settingsPlayerHeightDes": "Changer la hauteur du widget",
"@settingsPlayerHeightDes": {}, "@settingsPlayerHeightDes": {},
"settingsPopupMenu": "Menu popup des épisodes", "settingsPopupMenu": "Menu popup des épisodes",
"@settingsPopupMenu": {}, "@settingsPopupMenu": {},
@ -473,17 +483,17 @@
"@settingsPrefrence": {}, "@settingsPrefrence": {},
"settingsRealDark": "Noir profond", "settingsRealDark": "Noir profond",
"@settingsRealDark": {}, "@settingsRealDark": {},
"settingsRealDarkDes": "Activer pour un mode sombre accentué", "settingsRealDarkDes": "Mode sombre accentué",
"@settingsRealDarkDes": {}, "@settingsRealDarkDes": {},
"settingsRewindSec": "Retour rapide", "settingsRewindSec": "Retour rapide",
"@settingsRewindSec": {}, "@settingsRewindSec": {},
"settingsRewindSecDes": "Saut arrière en secondes", "settingsRewindSecDes": "Saut arrière",
"@settingsRewindSecDes": {}, "@settingsRewindSecDes": {},
"settingsSTAuto": "Activation automatique de la minuterie", "settingsSTAuto": "Activation automatique de la minuterie",
"@settingsSTAuto": {}, "@settingsSTAuto": {},
"settingsSTAutoDes": "Démarrer la minuterie à l'horaire programmé", "settingsSTAutoDes": "Démarrer la minuterie à l'horaire programmé",
"@settingsSTAutoDes": {}, "@settingsSTAutoDes": {},
"settingsSTDefaultTime": "Temps par défaut", "settingsSTDefaultTime": "Durée par défaut",
"@settingsSTDefaultTime": {}, "@settingsSTDefaultTime": {},
"settingsSTDefautTimeDes": "Configuration de la minuterie", "settingsSTDefautTimeDes": "Configuration de la minuterie",
"@settingsSTDefautTimeDes": {}, "@settingsSTDefautTimeDes": {},
@ -495,17 +505,17 @@
"@settingsSyncing": {}, "@settingsSyncing": {},
"settingsSyncingDes": "Actualisation des podcasts en arrière-plan", "settingsSyncingDes": "Actualisation des podcasts en arrière-plan",
"@settingsSyncingDes": {}, "@settingsSyncingDes": {},
"settingsTapToOpenPopupMenu": "Appuyer pour ouvrir le menu", "settingsTapToOpenPopupMenu": "Ouverture du menu",
"@settingsTapToOpenPopupMenu": {}, "@settingsTapToOpenPopupMenu": {},
"settingsTapToOpenPopupMenuDes": "Vous devez effectuer un appui long pour ouvrir la page de l'épisode", "settingsTapToOpenPopupMenuDes": "Effectuer un appui long pour ouvrir la page de l'épisode",
"@settingsTapToOpenPopupMenuDes": {}, "@settingsTapToOpenPopupMenuDes": {},
"settingsTheme": "Thème", "settingsTheme": "Thème",
"@settingsTheme": {}, "@settingsTheme": {},
"settingStorage": "Espace de stockage", "settingStorage": "Espace de stockage",
"@settingStorage": {}, "@settingStorage": {},
"settingsUpdateInterval": "Intervalle des mises à jour", "settingsUpdateInterval": "Intervalle de mise à jour",
"@settingsUpdateInterval": {}, "@settingsUpdateInterval": {},
"settingsUpdateIntervalDes": "24 heures par défaut", "settingsUpdateIntervalDes": "L'intervalle par défaut est de 24 heures",
"@settingsUpdateIntervalDes": {}, "@settingsUpdateIntervalDes": {},
"share": "Partager", "share": "Partager",
"@share": {}, "@share": {},
@ -517,9 +527,13 @@
"@skipSilence": { "@skipSilence": {
"description": "Feature skip silence" "description": "Feature skip silence"
}, },
"skipToNext": "Skip to next",
"@skipToNext": {},
"sleepTimer": "Minuterie", "sleepTimer": "Minuterie",
"@sleepTimer": {}, "@sleepTimer": {},
"subscribe": "Abonnements", "stop": "Stop",
"@stop": {},
"subscribe": "S'abonner",
"@subscribe": {}, "@subscribe": {},
"subscribeExportDes": "Exporter le fichier OPML de tous les podcasts.", "subscribeExportDes": "Exporter le fichier OPML de tous les podcasts.",
"@subscribeExportDes": {}, "@subscribeExportDes": {},
@ -544,7 +558,7 @@
"time": {} "time": {}
} }
}, },
"toastAddPlaylist": "Ajouté à la playlist.", "toastAddPlaylist": "Ajouter l'épisode à la playlist.",
"@toastAddPlaylist": {}, "@toastAddPlaylist": {},
"toastDiscovery": "Tutoriel réinitialisé, veuillez redémarrer l'application.", "toastDiscovery": "Tutoriel réinitialisé, veuillez redémarrer l'application.",
"@toastDiscovery": { "@toastDiscovery": {

View File

@ -74,6 +74,10 @@
"@endOfEpisode": {}, "@endOfEpisode": {},
"episode": "{count, plural, zero{} other{节目}}", "episode": "{count, plural, zero{} other{节目}}",
"@episode": {}, "@episode": {},
"fastForward": "快进",
"@fastForward": {},
"fastRewind": "快退",
"@fastRewind": {},
"featureDiscoveryEditGroup": "点击修改分组", "featureDiscoveryEditGroup": "点击修改分组",
"@featureDiscoveryEditGroup": {}, "@featureDiscoveryEditGroup": {},
"featureDiscoveryEditGroupDes": "您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。", "featureDiscoveryEditGroupDes": "您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。",
@ -142,6 +146,8 @@
"@groupRemoveConfirm": {}, "@groupRemoveConfirm": {},
"groups": "{count, plural, zero{分组} other{分组}}", "groups": "{count, plural, zero{分组} other{分组}}",
"@groups": {}, "@groups": {},
"hideListenedSetting": "隐藏已收听",
"@hideListenedSetting": {},
"homeGroupsSeeAll": "查看全部", "homeGroupsSeeAll": "查看全部",
"@homeGroupsSeeAll": {}, "@homeGroupsSeeAll": {},
"homeMenuPlaylist": "播放列表", "homeMenuPlaylist": "播放列表",
@ -248,6 +254,8 @@
"title": {} "title": {}
} }
}, },
"notificationSetting": "通知栏",
"@notificationSetting": {},
"notificationSubscribe": "订阅 {title}", "notificationSubscribe": "订阅 {title}",
"@notificationSubscribe": { "@notificationSubscribe": {
"placeholders": { "placeholders": {
@ -280,6 +288,8 @@
}, },
"oldestFirst": "由旧到新", "oldestFirst": "由旧到新",
"@oldestFirst": {}, "@oldestFirst": {},
"pause": "暂停",
"@pause": {},
"play": "播放", "play": "播放",
"@play": {}, "@play": {},
"playback": "播放控制", "playback": "播放控制",
@ -517,8 +527,12 @@
"@skipSilence": { "@skipSilence": {
"description": "Feature skip silence" "description": "Feature skip silence"
}, },
"skipToNext": "下一首",
"@skipToNext": {},
"sleepTimer": "睡眠模式", "sleepTimer": "睡眠模式",
"@sleepTimer": {}, "@sleepTimer": {},
"stop": "停止",
"@stop": {},
"subscribe": "订阅", "subscribe": "订阅",
"@subscribe": {}, "@subscribe": {},
"subscribeExportDes": "导出 OMPL 文件", "subscribeExportDes": "导出 OMPL 文件",

View File

@ -42,6 +42,7 @@ const String localeKey = 'localeKey';
const String boostVolumeKey = 'boostVolumeKey'; const String boostVolumeKey = 'boostVolumeKey';
const String volumeGainKey = 'volumeGainKey'; const String volumeGainKey = 'volumeGainKey';
const String hideListenedKey = 'hideListenedKey'; const String hideListenedKey = 'hideListenedKey';
const String notificationLayoutKey = 'notificationLayoutKey';
class KeyValueStorage { class KeyValueStorage {
final String key; final String key;

View File

@ -7,6 +7,7 @@ import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
import '../home/audioplayer.dart'; import '../home/audioplayer.dart';
import '../local_storage/key_value_storage.dart';
import '../state/audio_state.dart'; import '../state/audio_state.dart';
import '../state/setting_state.dart'; import '../state/setting_state.dart';
import '../util/custom_dropdown.dart'; import '../util/custom_dropdown.dart';
@ -201,7 +202,7 @@ class PlaySetting extends StatelessWidget {
appBar: AppBar( appBar: AppBar(
title: Text(s.play), title: Text(s.play),
elevation: 0, elevation: 0,
backgroundColor: Theme.of(context).primaryColor, backgroundColor: context.primaryColor,
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
@ -209,218 +210,200 @@ class PlaySetting extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
Column( Container(
mainAxisAlignment: MainAxisAlignment.start, height: 60.0,
mainAxisSize: MainAxisSize.min, padding: EdgeInsets.symmetric(horizontal: 40),
alignment: Alignment.center,
child: Text(s.notificationSetting,
style: context.textTheme.bodyText1
.copyWith(color: context.accentColor)),
),
_NotificationLayout(),
Divider(
height: 1,
),
Padding(
padding: const EdgeInsets.all(10.0),
),
Container(
height: 30.0,
padding: EdgeInsets.symmetric(horizontal: 70),
alignment: Alignment.centerLeft,
child: Text(s.homeMenuPlaylist,
style: Theme.of(context)
.textTheme
.bodyText1
.copyWith(color: Theme.of(context).accentColor)),
),
Selector<SettingState, bool>(
selector: (_, settings) => settings.autoPlay,
builder: (_, data, __) => ListTile(
onTap: () => settings.setAutoPlay = !data,
contentPadding:
EdgeInsets.only(left: 70.0, right: 20, bottom: 10),
title: Text(s.settingsMenuAutoPlay),
subtitle: Text(s.settingsAutoPlayDes),
trailing: Transform.scale(
scale: 0.9,
child: Switch(
value: data,
onChanged: (boo) => settings.setAutoPlay = boo),
),
),
),
Divider(height: 1),
Padding(
padding: const EdgeInsets.all(10.0),
),
Container(
height: 30.0,
padding: EdgeInsets.symmetric(horizontal: 70),
alignment: Alignment.centerLeft,
child: Text(s.playback,
style: Theme.of(context)
.textTheme
.bodyText1
.copyWith(color: Theme.of(context).accentColor)),
),
ListTile(
contentPadding:
EdgeInsets.only(left: 70.0, right: 20, bottom: 10, top: 10),
title: Text(s.settingsFastForwardSec),
subtitle: Text(s.settingsFastForwardSecDes),
trailing: Selector<SettingState, int>(
selector: (_, settings) => settings.fastForwardSeconds,
builder: (_, data, __) => MyDropdownButton(
hint: Text(s.secCount(data)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: data,
onChanged: (value) =>
settings.setFastForwardSeconds = value,
items: secondsToSelect.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e, child: Text(s.secCount(e)));
}).toList()),
),
),
ListTile(
contentPadding:
EdgeInsets.only(left: 70.0, right: 20, bottom: 10, top: 10),
title: Text(s.settingsRewindSec),
subtitle: Text(s.settingsRewindSecDes),
trailing: Selector<SettingState, int>(
selector: (_, settings) => settings.rewindSeconds,
builder: (_, data, __) => MyDropdownButton(
hint: Text(s.secCount(data)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: data,
onChanged: (value) => settings.setRewindSeconds = value,
items: secondsToSelect.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e, child: Text(s.secCount(e)));
}).toList()),
),
),
ListTile(
contentPadding:
EdgeInsets.only(left: 70.0, right: 20, bottom: 10, top: 10),
title: Text(s.settingsBoostVolume),
subtitle: Text(s.settingsBoostVolumeDes),
trailing: Selector<AudioPlayerNotifier, int>(
selector: (_, audio) => audio.volumeGain,
builder: (_, volumeGain, __) => MyDropdownButton(
hint: Text(_volumeEffect(context, volumeGain)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: volumeGain,
onChanged: (value) => audio.setVolumeGain = value,
items: [2000, 3000, 4000].map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e, child: Text(_volumeEffect(context, e)));
}).toList()),
),
),
Divider(height: 1),
Padding(
padding: const EdgeInsets.all(10.0),
),
Container(
height: 30.0,
padding: EdgeInsets.symmetric(horizontal: 70),
alignment: Alignment.centerLeft,
child: Text(s.sleepTimer,
style: context.textTheme.bodyText1
.copyWith(color: Theme.of(context).accentColor)),
),
ListView(
physics: const BouncingScrollPhysics(),
shrinkWrap: true,
scrollDirection: Axis.vertical,
children: <Widget>[ children: <Widget>[
Padding( ListTile(
padding: const EdgeInsets.all(10.0), contentPadding: EdgeInsets.only(left: 70.0, right: 20),
title: Text(s.settingsSTDefaultTime),
subtitle: Text(s.settingsSTDefautTimeDes),
trailing: Selector<SettingState, int>(
selector: (_, settings) => settings.defaultSleepTimer,
builder: (_, data, __) => MyDropdownButton(
hint: Text(s.minsCount(data)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: data,
onChanged: (value) =>
settings.setDefaultSleepTimer = value,
items: kMinsToSelect.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e, child: Text(s.minsCount(e)));
}).toList()),
),
), ),
Container( Selector<SettingState, bool>(
height: 30.0, selector: (_, settings) => settings.autoSleepTimer,
padding: EdgeInsets.symmetric(horizontal: 70), builder: (_, data, __) => ListTile(
alignment: Alignment.centerLeft, onTap: () => settings.setAutoSleepTimer = !data,
child: Text(s.homeMenuPlaylist, contentPadding: const EdgeInsets.only(
style: Theme.of(context) left: 70.0, right: 20.0, bottom: 10.0, top: 10.0),
.textTheme title: Text(s.settingsSTAuto),
.bodyText1 subtitle: Text(s.settingsSTAutoDes),
.copyWith(color: Theme.of(context).accentColor)), trailing: Transform.scale(
), scale: 0.9,
ListView( child: Switch(
physics: const BouncingScrollPhysics(), value: data,
shrinkWrap: true, onChanged: (boo) =>
scrollDirection: Axis.vertical, settings.setAutoSleepTimer = boo),
children: <Widget>[
Selector<SettingState, bool>(
selector: (_, settings) => settings.autoPlay,
builder: (_, data, __) => ListTile(
onTap: () => settings.setAutoPlay = !data,
contentPadding: EdgeInsets.only(
left: 70.0, right: 20, bottom: 10),
title: Text(s.settingsMenuAutoPlay),
subtitle: Text(s.settingsAutoPlayDes),
trailing: Transform.scale(
scale: 0.9,
child: Switch(
value: data,
onChanged: (boo) => settings.setAutoPlay = boo),
),
),
), ),
Divider(height: 1), ),
],
), ),
Padding( ListTile(
padding: const EdgeInsets.all(10.0), contentPadding: const EdgeInsets.only(
), left: 70.0, right: 20.0, bottom: 10.0, top: 10.0),
Container( title: Text(s.settingsSTMode),
height: 30.0, subtitle:
padding: EdgeInsets.symmetric(horizontal: 70), context.width > 360 ? null : _modeWidget(context),
alignment: Alignment.centerLeft, trailing:
child: Text(s.playback, context.width > 360 ? _modeWidget(context) : null),
style: Theme.of(context) ListTile(
.textTheme contentPadding: EdgeInsets.only(left: 70.0, right: 20),
.bodyText1 title: Text(s.schedule),
.copyWith(color: Theme.of(context).accentColor)), subtitle:
), context.width > 360 ? null : _scheduleWidget(context),
ListView( trailing: context.width > 360
physics: const BouncingScrollPhysics(), ? _scheduleWidget(context)
shrinkWrap: true, : null),
scrollDirection: Axis.vertical, Divider(height: 1)
children: <Widget>[
ListTile(
contentPadding: EdgeInsets.only(
left: 70.0, right: 20, bottom: 10, top: 10),
title: Text(s.settingsFastForwardSec),
subtitle: Text(s.settingsFastForwardSecDes),
trailing: Selector<SettingState, int>(
selector: (_, settings) =>
settings.fastForwardSeconds,
builder: (_, data, __) => MyDropdownButton(
hint: Text(s.secCount(data)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: data,
onChanged: (value) =>
settings.setFastForwardSeconds = value,
items: secondsToSelect
.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e, child: Text(s.secCount(e)));
}).toList()),
),
),
ListTile(
contentPadding: EdgeInsets.only(
left: 70.0, right: 20, bottom: 10, top: 10),
title: Text(s.settingsRewindSec),
subtitle: Text(s.settingsRewindSecDes),
trailing: Selector<SettingState, int>(
selector: (_, settings) => settings.rewindSeconds,
builder: (_, data, __) => MyDropdownButton(
hint: Text(s.secCount(data)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: data,
onChanged: (value) =>
settings.setRewindSeconds = value,
items: secondsToSelect
.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e, child: Text(s.secCount(e)));
}).toList()),
),
),
ListTile(
contentPadding: EdgeInsets.only(
left: 70.0, right: 20, bottom: 10, top: 10),
title: Text(s.settingsBoostVolume),
subtitle: Text(s.settingsBoostVolumeDes),
trailing: Selector<AudioPlayerNotifier, int>(
selector: (_, audio) => audio.volumeGain,
builder: (_, volumeGain, __) => MyDropdownButton(
hint: Text(_volumeEffect(context, volumeGain)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: volumeGain,
onChanged: (value) =>
audio.setVolumeGain = value,
items: [2000, 3000, 4000]
.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e,
child: Text(_volumeEffect(context, e)));
}).toList()),
),
),
Divider(),
]),
Padding(
padding: const EdgeInsets.all(10.0),
),
Container(
height: 30.0,
padding: EdgeInsets.symmetric(horizontal: 70),
alignment: Alignment.centerLeft,
child: Text(s.sleepTimer,
style: context.textTheme.bodyText1
.copyWith(color: Theme.of(context).accentColor)),
),
ListView(
physics: const BouncingScrollPhysics(),
shrinkWrap: true,
scrollDirection: Axis.vertical,
children: <Widget>[
ListTile(
contentPadding: EdgeInsets.only(left: 70.0, right: 20),
title: Text(s.settingsSTDefaultTime),
subtitle: Text(s.settingsSTDefautTimeDes),
trailing: Selector<SettingState, int>(
selector: (_, settings) => settings.defaultSleepTimer,
builder: (_, data, __) => MyDropdownButton(
hint: Text(s.minsCount(data)),
underline: Center(),
elevation: 1,
displayItemCount: 5,
isDense: true,
value: data,
onChanged: (value) =>
settings.setDefaultSleepTimer = value,
items:
kMinsToSelect.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e, child: Text(s.minsCount(e)));
}).toList()),
),
),
Selector<SettingState, bool>(
selector: (_, settings) => settings.autoSleepTimer,
builder: (_, data, __) => ListTile(
onTap: () => settings.setAutoSleepTimer = !data,
contentPadding: const EdgeInsets.only(
left: 70.0, right: 20.0, bottom: 10.0, top: 10.0),
title: Text(s.settingsSTAuto),
subtitle: Text(s.settingsSTAutoDes),
trailing: Transform.scale(
scale: 0.9,
child: Switch(
value: data,
onChanged: (boo) =>
settings.setAutoSleepTimer = boo),
),
),
),
ListTile(
contentPadding: const EdgeInsets.only(
left: 70.0, right: 20.0, bottom: 10.0, top: 10.0),
title: Text(s.settingsSTMode),
subtitle:
context.width > 360 ? null : _modeWidget(context),
trailing: context.width > 360
? _modeWidget(context)
: null),
ListTile(
contentPadding:
EdgeInsets.only(left: 70.0, right: 20),
title: Text(s.schedule),
subtitle: context.width > 360
? null
: _scheduleWidget(context),
trailing: context.width > 360
? _scheduleWidget(context)
: null),
Divider(height: 1)
],
),
SizedBox(height: 20)
], ],
), ),
SizedBox(height: 20)
], ],
), ),
), ),
@ -428,3 +411,121 @@ class PlaySetting extends StatelessWidget {
); );
} }
} }
class _NotificationLayout extends StatefulWidget {
_NotificationLayout({Key key}) : super(key: key);
@override
__NotificationLayoutState createState() => __NotificationLayoutState();
}
class __NotificationLayoutState extends State<_NotificationLayout> {
Future<int> _getNotificationLayout() async {
final storage = KeyValueStorage(notificationLayoutKey);
var index = await storage.getInt(defaultValue: 0);
return index;
}
Future<void> _setNotificationLayout(int index) async {
final storage = KeyValueStorage(notificationLayoutKey);
await storage.saveInt(index);
if (mounted) setState(() {});
}
Widget _notificationIcon(Widget icon, String des) {
return LimitedBox(
maxWidth: 60,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
icon,
SizedBox(height: 8),
Text(des,
style: TextStyle(
fontSize: 12, color: context.textColor.withOpacity(0.5)),
textAlign: TextAlign.center,
maxLines: 2,
overflow: TextOverflow.clip),
],
),
);
}
Widget _notificationOptions(int index, {int selected}) {
final s = context.s;
return InkWell(
borderRadius: BorderRadius.circular(10.0),
onTap: () => _setNotificationLayout(index),
child: Container(
padding: EdgeInsets.symmetric(vertical: 10),
decoration: BoxDecoration(
border: Border.all(
color: index == selected
? context.accentColor.withAlpha(70)
: context.primaryColorDark,
),
borderRadius: BorderRadius.circular(10),
color: index == selected
? context.accentColor.withAlpha(70)
: Colors.transparent,
),
child: index == 0
? Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_notificationIcon(
Icon(Icons.pause_circle_filled), '${s.play}| ${s.pause}'),
_notificationIcon(Icon(Icons.fast_forward), s.fastForward),
_notificationIcon(Icon(Icons.skip_next), s.skipToNext),
_notificationIcon(Icon(Icons.close), s.stop),
],
)
: index == 1
? Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_notificationIcon(Icon(Icons.pause_circle_filled),
'${s.play}| ${s.pause}'),
_notificationIcon(
Icon(Icons.fast_rewind), s.fastRewind),
_notificationIcon(Icon(Icons.skip_next), s.skipToNext),
_notificationIcon(Icon(Icons.close), s.stop),
])
: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_notificationIcon(Icon(Icons.fast_rewind), s.fastRewind),
_notificationIcon(Icon(Icons.pause_circle_filled),
'${s.play}| ${s.pause}'),
_notificationIcon(
Icon(Icons.fast_forward), s.fastForward),
_notificationIcon(Icon(Icons.close), s.stop),
],
),
),
);
}
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.fromLTRB(40, 0, 40, 30),
child: FutureBuilder<int>(
future: _getNotificationLayout(),
initialData: 0,
builder: (context, snapshot) => Column(
children: [
_notificationOptions(0, selected: snapshot.data),
SizedBox(height: 20),
_notificationOptions(1, selected: snapshot.data),
SizedBox(height: 20),
_notificationOptions(2, selected: snapshot.data),
],
),
),
);
}
}

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:math' as math; import 'dart:math' as math;
import 'package:audio_service/audio_service.dart'; import 'package:audio_service/audio_service.dart';
import 'package:audio_session/audio_session.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:just_audio/just_audio.dart'; import 'package:just_audio/just_audio.dart';
@ -43,6 +44,12 @@ MediaControl forward = MediaControl(
action: MediaAction.fastForward, action: MediaAction.fastForward,
); );
MediaControl rewind = MediaControl(
androidIcon: 'drawable/baseline_fast_rewind_white_24',
label: 'rewind',
action: MediaAction.rewind,
);
void _audioPlayerTaskEntrypoint() async { void _audioPlayerTaskEntrypoint() async {
AudioServiceBackground.run(() => AudioPlayerTask()); AudioServiceBackground.run(() => AudioPlayerTask());
} }
@ -718,10 +725,11 @@ class AudioPlayerNotifier extends ChangeNotifier {
} }
class AudioPlayerTask extends BackgroundAudioTask { class AudioPlayerTask extends BackgroundAudioTask {
KeyValueStorage cacheStorage = KeyValueStorage(cacheMaxKey); final cacheStorage = KeyValueStorage(cacheMaxKey);
final layoutStorage = KeyValueStorage(notificationLayoutKey);
final List<MediaItem> _queue = []; final List<MediaItem> _queue = [];
final AudioPlayer _audioPlayer = AudioPlayer(); final AudioPlayer _audioPlayer = AudioPlayer();
AudioSession _session;
AudioProcessingState _skipState; AudioProcessingState _skipState;
bool _playing; bool _playing;
bool _interrupted = false; bool _interrupted = false;
@ -737,6 +745,9 @@ class AudioPlayerTask extends BackgroundAudioTask {
@override @override
Future<void> onStart(Map<String, dynamic> params) async { Future<void> onStart(Map<String, dynamic> params) async {
_stopAtEnd = false; _stopAtEnd = false;
_session = await AudioSession.instance;
await _session.configure(AudioSessionConfiguration.speech());
_handleInterruption(_session);
_playerStateSubscription = _audioPlayer.playbackStateStream _playerStateSubscription = _audioPlayer.playbackStateStream
.where((state) => state == AudioPlaybackState.completed) .where((state) => state == AudioPlaybackState.completed)
.listen((state) { .listen((state) {
@ -786,6 +797,52 @@ class AudioPlayerTask extends BackgroundAudioTask {
} }
} }
void _handleInterruption(AudioSession session) async {
session.interruptionEventStream.listen((event) {
if (event.begin) {
switch (event.type) {
case AudioInterruptionType.pause:
if (_playing) {
onPause();
_interrupted = true;
}
break;
case AudioInterruptionType.duck:
if (_playing) {
onPause();
_interrupted = true;
}
break;
case AudioInterruptionType.unknown:
if (_playing) {
onPause();
_interrupted = true;
}
break;
}
} else {
switch (event.type) {
case AudioInterruptionType.pause:
if (!_playing && _interrupted) {
onPlay();
}
break;
case AudioInterruptionType.duck:
if (!_playing && _interrupted) {
onPlay();
}
break;
case AudioInterruptionType.unknown:
break;
}
_interrupted = false;
}
});
session.becomingNoisyEventStream.listen((_) {
if (_playing) onPause();
});
}
void playPause() { void playPause() {
if (AudioServiceBackground.state.playing) { if (AudioServiceBackground.state.playing) {
onPause(); onPause();
@ -828,7 +885,7 @@ class AudioPlayerTask extends BackgroundAudioTask {
} }
@override @override
void onPlay() async { Future<void> onPlay() async {
if (_skipState == null) { if (_skipState == null) {
if (_playing == null) { if (_playing == null) {
_playing = true; _playing = true;
@ -847,6 +904,7 @@ class AudioPlayerTask extends BackgroundAudioTask {
_playFromStart(); _playFromStart();
} else { } else {
_playing = true; _playing = true;
_session.setActive(true);
if (_audioPlayer.playbackEvent.state != AudioPlaybackState.connecting || if (_audioPlayer.playbackEvent.state != AudioPlaybackState.connecting ||
_audioPlayer.playbackEvent.state != AudioPlaybackState.none) { _audioPlayer.playbackEvent.state != AudioPlaybackState.none) {
_audioPlayer.play(); _audioPlayer.play();
@ -855,8 +913,9 @@ class AudioPlayerTask extends BackgroundAudioTask {
} }
} }
_playFromStart() async { Future<void> _playFromStart() async {
_playing = true; _playing = true;
_session.setActive(true);
if (_audioPlayer.playbackEvent.state != AudioPlaybackState.connecting || if (_audioPlayer.playbackEvent.state != AudioPlaybackState.connecting ||
_audioPlayer.playbackEvent.state != AudioPlaybackState.none) { _audioPlayer.playbackEvent.state != AudioPlaybackState.none) {
try { try {
@ -871,7 +930,7 @@ class AudioPlayerTask extends BackgroundAudioTask {
} }
@override @override
void onPause() { Future<void> onPause() async {
if (_skipState == null) { if (_skipState == null) {
if (_playing == null) { if (_playing == null) {
} else if (_playing) { } else if (_playing) {
@ -882,20 +941,22 @@ class AudioPlayerTask extends BackgroundAudioTask {
} }
@override @override
void onSeekTo(Duration position) { Future<void> onSeekTo(Duration position) async {
if (_audioPlayer.playbackEvent.state != AudioPlaybackState.connecting || if (_audioPlayer.playbackEvent.state != AudioPlaybackState.connecting ||
_audioPlayer.playbackEvent.state != AudioPlaybackState.none) { _audioPlayer.playbackEvent.state != AudioPlaybackState.none) {
_audioPlayer.seek(position); await _audioPlayer.seek(position);
} }
} }
@override @override
void onClick(MediaButton button) { Future<void> onClick(MediaButton button) async {
if (button == MediaButton.media) { if (button == MediaButton.media) {
playPause(); await playPause();
} else if (button == MediaButton.next) { } else if (button == MediaButton.next) {
_seekRelative(fastForwardInterval); await _seekRelative(fastForwardInterval);
} else if (button == MediaButton.previous) _seekRelative(-rewindInterval); } else if (button == MediaButton.previous) {
await _seekRelative(-rewindInterval);
}
} }
Future<void> _seekRelative(Duration offset) async { Future<void> _seekRelative(Duration offset) async {
@ -918,19 +979,19 @@ class AudioPlayerTask extends BackgroundAudioTask {
} }
@override @override
void onAddQueueItem(MediaItem mediaItem) async { Future<void> onAddQueueItem(MediaItem mediaItem) async {
_queue.add(mediaItem); _queue.add(mediaItem);
await AudioServiceBackground.setQueue(_queue); await AudioServiceBackground.setQueue(_queue);
} }
@override @override
void onRemoveQueueItem(MediaItem mediaItem) async { Future<void> onRemoveQueueItem(MediaItem mediaItem) async {
_queue.removeWhere((item) => item.id == mediaItem.id); _queue.removeWhere((item) => item.id == mediaItem.id);
await AudioServiceBackground.setQueue(_queue); await AudioServiceBackground.setQueue(_queue);
} }
@override @override
void onAddQueueItemAt(MediaItem mediaItem, int index) async { Future<void> onAddQueueItemAt(MediaItem mediaItem, int index) async {
if (index == 0) { if (index == 0) {
await _audioPlayer.stop(); await _audioPlayer.stop();
_queue.removeAt(0); _queue.removeAt(0);
@ -951,57 +1012,57 @@ class AudioPlayerTask extends BackgroundAudioTask {
} }
@override @override
void onFastForward() async { Future<void> onFastForward() async {
await _seekRelative(fastForwardInterval); await _seekRelative(fastForwardInterval);
} }
@override @override
void onRewind() async { Future<void> onRewind() async {
await _seekRelative(-rewindInterval); await _seekRelative(-rewindInterval);
} }
@override // @override
void onAudioFocusLost(AudioInterruption interruption) { // Future<void> onAudioFocusLost(AudioInterruption interruption) {
if (_playing) _interrupted = true; // if (_playing) _interrupted = true;
switch (interruption) { // switch (interruption) {
case AudioInterruption.pause: // case AudioInterruption.pause:
case AudioInterruption.temporaryPause: // case AudioInterruption.temporaryPause:
case AudioInterruption.unknownPause: // case AudioInterruption.unknownPause:
onPause(); // onPause();
break; // break;
case AudioInterruption.temporaryDuck: // case AudioInterruption.temporaryDuck:
_audioPlayer.setVolume(0.5); // _audioPlayer.setVolume(0.5);
break; // break;
} // }
} // }
//
@override // @override
void onAudioBecomingNoisy() { // Future<void> onAudioBecomingNoisy() async{
if (_skipState == null) { // if (_skipState == null) {
if (_playing == null) { // if (_playing == null) {
} else if (_audioPlayer.playbackEvent.state == // } else if (_audioPlayer.playbackEvent.state ==
AudioPlaybackState.playing) { // AudioPlaybackState.playing) {
_playing = false; // _playing = false;
_audioPlayer.pause(); // _audioPlayer.pause();
} // }
} // }
} // }
//
@override // @override
void onAudioFocusGained(AudioInterruption interruption) { // void onAudioFocusGained(AudioInterruption interruption) {
switch (interruption) { // switch (interruption) {
case AudioInterruption.temporaryPause: // case AudioInterruption.temporaryPause:
if (!_playing && _interrupted) onPlay(); // if (!_playing && _interrupted) onPlay();
break; // break;
case AudioInterruption.temporaryDuck: // case AudioInterruption.temporaryDuck:
_audioPlayer.setVolume(1.0); // _audioPlayer.setVolume(1.0);
break; // break;
default: // default:
break; // break;
} // }
_interrupted = false; // _interrupted = false;
} // }
//
@override @override
Future onCustomAction(funtion, argument) async { Future onCustomAction(funtion, argument) async {
switch (funtion) { switch (funtion) {
@ -1041,9 +1102,14 @@ class AudioPlayerTask extends BackgroundAudioTask {
if (position == null) { if (position == null) {
position = _audioPlayer.playbackEvent.position; position = _audioPlayer.playbackEvent.position;
} }
final index = await layoutStorage.getInt(defaultValue: 0);
await AudioServiceBackground.setState( await AudioServiceBackground.setState(
controls: getControls(), controls: getControls(index),
systemActions: [MediaAction.seekTo], systemActions: [
MediaAction.seekTo,
MediaAction.seekForward,
MediaAction.seekBackward,
],
processingState: processingState:
processingState ?? AudioServiceBackground.state.processingState, processingState ?? AudioServiceBackground.state.processingState,
playing: _playing ?? false, playing: _playing ?? false,
@ -1053,11 +1119,36 @@ class AudioPlayerTask extends BackgroundAudioTask {
); );
} }
List<MediaControl> getControls() { List<MediaControl> getControls(int index) {
if (_playing) { switch (index) {
return [pauseControl, forward, skipToNextControl, stopControl]; case 0:
} else { if (_playing) {
return [playControl, forward, skipToNextControl, stopControl]; return [pauseControl, forward, skipToNextControl, stopControl];
} else {
return [playControl, forward, skipToNextControl, stopControl];
}
break;
case 1:
if (_playing) {
return [pauseControl, rewind, skipToNextControl, stopControl];
} else {
return [playControl, rewind, skipToNextControl, stopControl];
}
break;
case 2:
if (_playing) {
return [rewind, pauseControl, forward, stopControl];
} else {
return [rewind, playControl, forward, stopControl];
}
break;
default:
if (_playing) {
return [pauseControl, forward, skipToNextControl, stopControl];
} else {
return [playControl, forward, skipToNextControl, stopControl];
}
break;
} }
} }
} }

View File

@ -456,35 +456,37 @@ class SettingState extends ChangeNotifier {
localeList.isEmpty ? '' : '${'${localeList.first}-'}${localeList[1]}'; localeList.isEmpty ? '' : '${'${localeList.first}-'}${localeList[1]}';
var hideListened = var hideListened =
await KeyValueStorage(hideListenedKey).getBool(defaultValue: false); await KeyValueStorage(hideListenedKey).getBool(defaultValue: false);
var notificationLayout =
await KeyValueStorage(notificationLayoutKey).getInt(defaultValue: 0);
return SettingsBackup( return SettingsBackup(
theme: theme, theme: theme,
accentColor: accentColor, accentColor: accentColor,
realDark: realDark, realDark: realDark,
autoPlay: autoPlay, autoPlay: autoPlay,
autoUpdate: autoUpdate, autoUpdate: autoUpdate,
updateInterval: updateInterval, updateInterval: updateInterval,
downloadUsingData: downloadUsingData, downloadUsingData: downloadUsingData,
cacheMax: cacheMax, cacheMax: cacheMax,
podcastLayout: podcastLayout, podcastLayout: podcastLayout,
recentLayout: recentLayout, recentLayout: recentLayout,
favLayout: favLayout, favLayout: favLayout,
downloadLayout: downloadLayout, downloadLayout: downloadLayout,
autoDownloadNetwork: autoDownloadNetwork, autoDownloadNetwork: autoDownloadNetwork,
episodePopupMenu: episodePopupMenu.map((e) => e.toString()).toList(), episodePopupMenu: episodePopupMenu.map((e) => e.toString()).toList(),
autoDelete: autoDelete, autoDelete: autoDelete,
autoSleepTimer: autoSleepTimer, autoSleepTimer: autoSleepTimer,
autoSleepTimerStart: autoSleepTimerStart, autoSleepTimerStart: autoSleepTimerStart,
autoSleepTimerEnd: autoSleepTimerEnd, autoSleepTimerEnd: autoSleepTimerEnd,
autoSleepTimerMode: autoSleepTimerMode, autoSleepTimerMode: autoSleepTimerMode,
defaultSleepTime: defaultSleepTime, defaultSleepTime: defaultSleepTime,
tapToOpenPopupMenu: tapToOpenPopupMenu, tapToOpenPopupMenu: tapToOpenPopupMenu,
fastForwardSeconds: fastForwardSeconds, fastForwardSeconds: fastForwardSeconds,
rewindSeconds: rewindSeconds, rewindSeconds: rewindSeconds,
playerHeight: playerHeight, playerHeight: playerHeight,
locale: backupLocale, locale: backupLocale,
hideListened: hideListened, hideListened: hideListened,
); notificationLayout: notificationLayout);
} }
Future<void> restore(SettingsBackup backup) async { Future<void> restore(SettingsBackup backup) async {
@ -516,6 +518,8 @@ class SettingState extends ChangeNotifier {
await KeyValueStorage(tapToOpenPopupMenuKey) await KeyValueStorage(tapToOpenPopupMenuKey)
.saveBool(backup.tapToOpenPopupMenu); .saveBool(backup.tapToOpenPopupMenu);
await KeyValueStorage(hideListenedKey).saveBool(backup.hideListened); await KeyValueStorage(hideListenedKey).saveBool(backup.hideListened);
await KeyValueStorage(notificationLayoutKey)
.saveInt(backup.notificationLayout);
if (backup.locale == '') { if (backup.locale == '') {
await localeStorage.saveStringList([]); await localeStorage.saveStringList([]);
await S.load(Locale(Intl.systemLocale)); await S.load(Locale(Intl.systemLocale));

View File

@ -25,6 +25,7 @@ class SettingsBackup {
final int playerHeight; final int playerHeight;
final String locale; final String locale;
final bool hideListened; final bool hideListened;
final int notificationLayout;
SettingsBackup( SettingsBackup(
{this.theme, {this.theme,
this.accentColor, this.accentColor,
@ -51,7 +52,8 @@ class SettingsBackup {
this.rewindSeconds, this.rewindSeconds,
this.playerHeight, this.playerHeight,
this.locale, this.locale,
this.hideListened}); this.hideListened,
this.notificationLayout});
Map<String, Object> toJson() { Map<String, Object> toJson() {
return { return {
@ -79,7 +81,8 @@ class SettingsBackup {
'rewindSeconds': rewindSeconds, 'rewindSeconds': rewindSeconds,
'playerHeight': playerHeight, 'playerHeight': playerHeight,
'locale': locale, 'locale': locale,
'hideListened': hideListened 'hideListened': hideListened,
'notificationLayout': notificationLayout
}; };
} }
@ -110,6 +113,7 @@ class SettingsBackup {
rewindSeconds: json['rewindSeconds'] as int, rewindSeconds: json['rewindSeconds'] as int,
playerHeight: json['playerHeight'] as int, playerHeight: json['playerHeight'] as int,
locale: json['locale'] as String, locale: json['locale'] as String,
hideListened: json['hideListened'] as bool); hideListened: json['hideListened'] as bool,
notificationLayout: json['notificationLayout'] as int);
} }
} }

View File

@ -12,7 +12,8 @@ dependencies:
flutter_localizations: flutter_localizations:
sdk: flutter sdk: flutter
auto_animated: ^2.1.0 auto_animated: ^2.1.0
audio_service: ^0.11.2 audio_service: ^0.14.0
audio_session: ^0.0.3
cached_network_image: ^2.2.0+1 cached_network_image: ^2.2.0+1
color_thief_flutter: ^1.0.2 color_thief_flutter: ^1.0.2
cupertino_icons: ^0.1.3 cupertino_icons: ^0.1.3