feat: force TV mode setting

close #885
This commit is contained in:
edde746
2026-04-17 19:41:28 +02:00
parent 47837edb01
commit d2b01100a5
35 changed files with 175 additions and 38 deletions
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åbnes",
"confirmExitOnBack": "Bekræft før lukning",
"confirmExitOnBackDescription": "Vis bekræftelsesdialog ved tryk på tilbage for at lukke appen",
"forceTvMode": "Gennemtving TV-tilstand",
"forceTvModeDescription": "Brug TV-layoutet uanset automatisk registrering. Nyttigt på Android TV-enheder, der ikke rapporterer leanback-funktionen. Genstarter appen ved ændring.",
"autoHidePerformanceOverlay": "Skjul ydelses-overlay automatisk",
"autoHidePerformanceOverlayDescription": "Fade ydelses-overlayet med afspilningskontrollerne",
"showNavBarLabels": "Vis navigationsbarlabels",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Profilauswahl bei jedem Öffnen der App anzeigen",
"confirmExitOnBack": "Vor dem Beenden bestätigen",
"confirmExitOnBackDescription": "Bestätigungsdialog anzeigen, wenn Zurück zum Beenden der App gedrückt wird",
"forceTvMode": "TV-Modus erzwingen",
"forceTvModeDescription": "TV-Layout unabhängig von der automatischen Erkennung verwenden. Nützlich für Android-TV-Geräte, die das Leanback-Feature nicht melden. Startet die App bei Änderung neu.",
"autoHidePerformanceOverlay": "Leistungsoverlay automatisch ausblenden",
"autoHidePerformanceOverlayDescription": "Leistungsoverlay mit den Wiedergabesteuerungen ein-/ausblenden",
"showNavBarLabels": "Navigationsleisten-Beschriftungen anzeigen",
+2
View File
@@ -227,6 +227,8 @@
"requireProfileSelectionOnOpenDescription": "Show profile selection every time the app is opened",
"confirmExitOnBack": "Confirm before exiting",
"confirmExitOnBackDescription": "Show a confirmation dialog when pressing back to exit the app",
"forceTvMode": "Force TV mode",
"forceTvModeDescription": "Use the TV layout regardless of auto-detection. Useful on Android TV devices that don't report the leanback feature. Restarts the app on change.",
"autoHidePerformanceOverlay": "Auto-Hide Performance Overlay",
"autoHidePerformanceOverlayDescription": "Fade the performance overlay with the playback controls",
"showNavBarLabels": "Show Navigation Bar Labels",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Mostrar selección de perfil cada vez que se abre la aplicación",
"confirmExitOnBack": "Confirmar antes de salir",
"confirmExitOnBackDescription": "Mostrar un diálogo de confirmación al presionar atrás para salir de la app",
"forceTvMode": "Forzar modo TV",
"forceTvModeDescription": "Usar el diseño de TV independientemente de la detección automática. Útil en dispositivos Android TV que no informan la característica leanback. Reinicia la app al cambiar.",
"autoHidePerformanceOverlay": "Ocultar superposición de rendimiento automáticamente",
"autoHidePerformanceOverlayDescription": "Desvanecer la superposición de rendimiento con los controles de reproducción",
"showNavBarLabels": "Mostrar etiquetas de la barra de navegación",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Afficher la sélection de profil à chaque ouverture de l'application",
"confirmExitOnBack": "Confirmer avant de quitter",
"confirmExitOnBackDescription": "Afficher une boîte de dialogue de confirmation en appuyant sur retour pour quitter",
"forceTvMode": "Forcer le mode TV",
"forceTvModeDescription": "Utiliser la mise en page TV quelle que soit la détection automatique. Utile sur les appareils Android TV qui ne signalent pas la fonctionnalité leanback. Redémarre l'application lors du changement.",
"autoHidePerformanceOverlay": "Masquer auto. superposition performances",
"autoHidePerformanceOverlayDescription": "Faire apparaître/disparaître la superposition avec les contrôles de lecture",
"showNavBarLabels": "Afficher les libellés de la barre de navigation",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Mostra la selezione del profilo ogni volta che l'app viene aperta",
"confirmExitOnBack": "Conferma prima di uscire",
"confirmExitOnBackDescription": "Mostra una finestra di conferma quando si preme indietro per uscire dall'app",
"forceTvMode": "Forza modalità TV",
"forceTvModeDescription": "Usa il layout TV indipendentemente dal rilevamento automatico. Utile sui dispositivi Android TV che non segnalano la funzionalità leanback. Riavvia l'app al cambiamento.",
"autoHidePerformanceOverlay": "Nascondi automaticamente overlay prestazioni",
"autoHidePerformanceOverlayDescription": "Dissolvi l'overlay prestazioni con i controlli di riproduzione",
"showNavBarLabels": "Mostra etichette barra di navigazione",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "アプリを開くたびにプロフィール選択を表示",
"confirmExitOnBack": "終了前に確認",
"confirmExitOnBackDescription": "戻るボタンでアプリを終了する際に確認ダイアログを表示",
"forceTvMode": "TVモードを強制",
"forceTvModeDescription": "自動検出に関係なくTVレイアウトを使用します。leanback機能を報告しないAndroid TVデバイスで便利です。変更するとアプリが再起動されます。",
"autoHidePerformanceOverlay": "パフォーマンスオーバーレイを自動非表示",
"autoHidePerformanceOverlayDescription": "再生コントロールと一緒にパフォーマンスオーバーレイをフェードする",
"showNavBarLabels": "ナビゲーションバーラベルを表示",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "앱을 열 때마다 프로필 선택 화면을 표시합니다",
"confirmExitOnBack": "종료 전 확인",
"confirmExitOnBackDescription": "뒤로 버튼을 눌러 앱을 종료할 때 확인 대화상자를 표시합니다",
"forceTvMode": "TV 모드 강제 사용",
"forceTvModeDescription": "자동 감지와 관계없이 TV 레이아웃을 사용합니다. leanback 기능을 보고하지 않는 Android TV 기기에 유용합니다. 변경 시 앱이 다시 시작됩니다.",
"autoHidePerformanceOverlay": "성능 오버레이 자동 숨기기",
"autoHidePerformanceOverlayDescription": "재생 컨트롤과 함께 성능 오버레이를 페이드 처리",
"showNavBarLabels": "내비게이션 바 라벨 표시",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åpnes",
"confirmExitOnBack": "Bekreft før avslutning",
"confirmExitOnBackDescription": "Vis en bekreftelsesdialog når du trykker tilbake for å avslutte appen",
"forceTvMode": "Tving TV-modus",
"forceTvModeDescription": "Bruk TV-oppsettet uavhengig av automatisk gjenkjenning. Nyttig på Android TV-enheter som ikke rapporterer leanback-funksjonen. Starter appen på nytt ved endring.",
"autoHidePerformanceOverlay": "Skjul ytelsesoverlegg automatisk",
"autoHidePerformanceOverlayDescription": "Fade ytelsesoverlegget med avspillingskontrollene",
"showNavBarLabels": "Vis navigasjonsfeltlabeler",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Toon profielselectie telkens wanneer de app wordt geopend",
"confirmExitOnBack": "Bevestigen voor afsluiten",
"confirmExitOnBackDescription": "Toon een bevestigingsvenster bij het drukken op terug om de app af te sluiten",
"forceTvMode": "TV-modus forceren",
"forceTvModeDescription": "Gebruik de TV-indeling ongeacht automatische detectie. Handig op Android TV-apparaten die de leanback-functie niet melden. Start de app opnieuw bij wijziging.",
"autoHidePerformanceOverlay": "Prestatie-overlay automatisch verbergen",
"autoHidePerformanceOverlayDescription": "Laat de prestatie-overlay meevervagen met de afspeelknoppen",
"showNavBarLabels": "Navigatiebalk labels tonen",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana",
"confirmExitOnBack": "Potwierdź przed wyjściem",
"confirmExitOnBackDescription": "Pokaż dialog potwierdzenia przy naciśnięciu wstecz, aby wyjść z aplikacji",
"forceTvMode": "Wymuś tryb TV",
"forceTvModeDescription": "Użyj układu TV niezależnie od automatycznego wykrywania. Przydatne na urządzeniach Android TV, które nie zgłaszają funkcji leanback. Po zmianie aplikacja zostanie zrestartowana.",
"autoHidePerformanceOverlay": "Automatycznie ukrywaj nakładkę wydajności",
"autoHidePerformanceOverlayDescription": "Wygaszaj nakładkę wydajności wraz z kontrolkami odtwarzania",
"showNavBarLabels": "Pokaż etykiety paska nawigacji",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Mostrar seleção de perfil toda vez que o app for aberto",
"confirmExitOnBack": "Confirmar antes de sair",
"confirmExitOnBackDescription": "Mostrar diálogo de confirmação ao pressionar voltar para sair do app",
"forceTvMode": "Forçar modo TV",
"forceTvModeDescription": "Usar o layout de TV independentemente da detecção automática. Útil em dispositivos Android TV que não reportam o recurso leanback. Reinicia o app ao alterar.",
"autoHidePerformanceOverlay": "Ocultar overlay de desempenho automaticamente",
"autoHidePerformanceOverlayDescription": "Desvanecer o overlay de desempenho com os controles de reprodução",
"showNavBarLabels": "Mostrar Rótulos da Barra de Navegação",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Показывать выбор профиля при каждом открытии приложения",
"confirmExitOnBack": "Подтверждать выход",
"confirmExitOnBackDescription": "Показывать диалог подтверждения при нажатии «назад» для выхода из приложения",
"forceTvMode": "Принудительный режим ТВ",
"forceTvModeDescription": "Использовать макет ТВ независимо от автоматического определения. Полезно на устройствах Android TV, которые не сообщают о функции leanback. Приложение перезапустится при изменении.",
"autoHidePerformanceOverlay": "Автоскрытие оверлея производительности",
"autoHidePerformanceOverlayDescription": "Скрывать оверлей производительности вместе с элементами управления воспроизведением",
"showNavBarLabels": "Показывать подписи панели навигации",
+2 -2
View File
@@ -4,9 +4,9 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 15
/// Strings: 13290 (886 per locale)
/// Strings: 13320 (888 per locale)
///
/// Built on 2026-04-17 at 12:37 UTC
/// Built on 2026-04-17 at 17:39 UTC
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsDa implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åbnes';
@override String get confirmExitOnBack => 'Bekræft før lukning';
@override String get confirmExitOnBackDescription => 'Vis bekræftelsesdialog ved tryk på tilbage for at lukke appen';
@override String get forceTvMode => 'Gennemtving TV-tilstand';
@override String get forceTvModeDescription => 'Brug TV-layoutet uanset automatisk registrering. Nyttigt på Android TV-enheder, der ikke rapporterer leanback-funktionen. Genstarter appen ved ændring.';
@override String get autoHidePerformanceOverlay => 'Skjul ydelses-overlay automatisk';
@override String get autoHidePerformanceOverlayDescription => 'Fade ydelses-overlayet med afspilningskontrollerne';
@override String get showNavBarLabels => 'Vis navigationsbarlabels';
@@ -1598,6 +1600,8 @@ extension on TranslationsDa {
'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åbnes',
'settings.confirmExitOnBack' => 'Bekræft før lukning',
'settings.confirmExitOnBackDescription' => 'Vis bekræftelsesdialog ved tryk på tilbage for at lukke appen',
'settings.forceTvMode' => 'Gennemtving TV-tilstand',
'settings.forceTvModeDescription' => 'Brug TV-layoutet uanset automatisk registrering. Nyttigt på Android TV-enheder, der ikke rapporterer leanback-funktionen. Genstarter appen ved ændring.',
'settings.autoHidePerformanceOverlay' => 'Skjul ydelses-overlay automatisk',
'settings.autoHidePerformanceOverlayDescription' => 'Fade ydelses-overlayet med afspilningskontrollerne',
'settings.showNavBarLabels' => 'Vis navigationsbarlabels',
@@ -1893,10 +1897,10 @@ extension on TranslationsDa {
'libraries.tabs.collections' => 'Samlinger',
'libraries.tabs.playlists' => 'Playlister',
'libraries.groupings.title' => 'Gruppering',
'libraries.groupings.all' => 'Alle',
'libraries.groupings.movies' => 'Film',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Alle',
'libraries.groupings.movies' => 'Film',
'libraries.groupings.shows' => 'TV-serier',
'libraries.groupings.seasons' => 'Sæsoner',
'libraries.groupings.episodes' => 'Episoder',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsDe implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Profilauswahl bei jedem Öffnen der App anzeigen';
@override String get confirmExitOnBack => 'Vor dem Beenden bestätigen';
@override String get confirmExitOnBackDescription => 'Bestätigungsdialog anzeigen, wenn Zurück zum Beenden der App gedrückt wird';
@override String get forceTvMode => 'TV-Modus erzwingen';
@override String get forceTvModeDescription => 'TV-Layout unabhängig von der automatischen Erkennung verwenden. Nützlich für Android-TV-Geräte, die das Leanback-Feature nicht melden. Startet die App bei Änderung neu.';
@override String get autoHidePerformanceOverlay => 'Leistungsoverlay automatisch ausblenden';
@override String get autoHidePerformanceOverlayDescription => 'Leistungsoverlay mit den Wiedergabesteuerungen ein-/ausblenden';
@override String get showNavBarLabels => 'Navigationsleisten-Beschriftungen anzeigen';
@@ -1598,6 +1600,8 @@ extension on TranslationsDe {
'settings.requireProfileSelectionOnOpenDescription' => 'Profilauswahl bei jedem Öffnen der App anzeigen',
'settings.confirmExitOnBack' => 'Vor dem Beenden bestätigen',
'settings.confirmExitOnBackDescription' => 'Bestätigungsdialog anzeigen, wenn Zurück zum Beenden der App gedrückt wird',
'settings.forceTvMode' => 'TV-Modus erzwingen',
'settings.forceTvModeDescription' => 'TV-Layout unabhängig von der automatischen Erkennung verwenden. Nützlich für Android-TV-Geräte, die das Leanback-Feature nicht melden. Startet die App bei Änderung neu.',
'settings.autoHidePerformanceOverlay' => 'Leistungsoverlay automatisch ausblenden',
'settings.autoHidePerformanceOverlayDescription' => 'Leistungsoverlay mit den Wiedergabesteuerungen ein-/ausblenden',
'settings.showNavBarLabels' => 'Navigationsleisten-Beschriftungen anzeigen',
@@ -1893,10 +1897,10 @@ extension on TranslationsDe {
'libraries.tabs.collections' => 'Sammlungen',
'libraries.tabs.playlists' => 'Wiedergabelisten',
'libraries.groupings.title' => 'Gruppierung',
'libraries.groupings.all' => 'Alle',
'libraries.groupings.movies' => 'Filme',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Alle',
'libraries.groupings.movies' => 'Filme',
'libraries.groupings.shows' => 'Serien',
'libraries.groupings.seasons' => 'Staffeln',
'libraries.groupings.episodes' => 'Episoden',
+10 -2
View File
@@ -784,6 +784,12 @@ class TranslationsSettingsEn {
/// en: 'Show a confirmation dialog when pressing back to exit the app'
String get confirmExitOnBackDescription => 'Show a confirmation dialog when pressing back to exit the app';
/// en: 'Force TV mode'
String get forceTvMode => 'Force TV mode';
/// en: 'Use the TV layout regardless of auto-detection. Useful on Android TV devices that don't report the leanback feature. Restarts the app on change.'
String get forceTvModeDescription => 'Use the TV layout regardless of auto-detection. Useful on Android TV devices that don\'t report the leanback feature. Restarts the app on change.';
/// en: 'Auto-Hide Performance Overlay'
String get autoHidePerformanceOverlay => 'Auto-Hide Performance Overlay';
@@ -3379,6 +3385,8 @@ extension on Translations {
'settings.requireProfileSelectionOnOpenDescription' => 'Show profile selection every time the app is opened',
'settings.confirmExitOnBack' => 'Confirm before exiting',
'settings.confirmExitOnBackDescription' => 'Show a confirmation dialog when pressing back to exit the app',
'settings.forceTvMode' => 'Force TV mode',
'settings.forceTvModeDescription' => 'Use the TV layout regardless of auto-detection. Useful on Android TV devices that don\'t report the leanback feature. Restarts the app on change.',
'settings.autoHidePerformanceOverlay' => 'Auto-Hide Performance Overlay',
'settings.autoHidePerformanceOverlayDescription' => 'Fade the performance overlay with the playback controls',
'settings.showNavBarLabels' => 'Show Navigation Bar Labels',
@@ -3672,10 +3680,10 @@ extension on Translations {
'libraries.tabs.collections' => 'Collections',
'libraries.tabs.playlists' => 'Playlists',
'libraries.groupings.title' => 'Grouping',
'libraries.groupings.all' => 'All',
'libraries.groupings.movies' => 'Movies',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'All',
'libraries.groupings.movies' => 'Movies',
'libraries.groupings.shows' => 'TV Shows',
'libraries.groupings.seasons' => 'Seasons',
'libraries.groupings.episodes' => 'Episodes',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsEs implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Mostrar selección de perfil cada vez que se abre la aplicación';
@override String get confirmExitOnBack => 'Confirmar antes de salir';
@override String get confirmExitOnBackDescription => 'Mostrar un diálogo de confirmación al presionar atrás para salir de la app';
@override String get forceTvMode => 'Forzar modo TV';
@override String get forceTvModeDescription => 'Usar el diseño de TV independientemente de la detección automática. Útil en dispositivos Android TV que no informan la característica leanback. Reinicia la app al cambiar.';
@override String get autoHidePerformanceOverlay => 'Ocultar superposición de rendimiento automáticamente';
@override String get autoHidePerformanceOverlayDescription => 'Desvanecer la superposición de rendimiento con los controles de reproducción';
@override String get showNavBarLabels => 'Mostrar etiquetas de la barra de navegación';
@@ -1598,6 +1600,8 @@ extension on TranslationsEs {
'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar selección de perfil cada vez que se abre la aplicación',
'settings.confirmExitOnBack' => 'Confirmar antes de salir',
'settings.confirmExitOnBackDescription' => 'Mostrar un diálogo de confirmación al presionar atrás para salir de la app',
'settings.forceTvMode' => 'Forzar modo TV',
'settings.forceTvModeDescription' => 'Usar el diseño de TV independientemente de la detección automática. Útil en dispositivos Android TV que no informan la característica leanback. Reinicia la app al cambiar.',
'settings.autoHidePerformanceOverlay' => 'Ocultar superposición de rendimiento automáticamente',
'settings.autoHidePerformanceOverlayDescription' => 'Desvanecer la superposición de rendimiento con los controles de reproducción',
'settings.showNavBarLabels' => 'Mostrar etiquetas de la barra de navegación',
@@ -1893,10 +1897,10 @@ extension on TranslationsEs {
'libraries.tabs.collections' => 'Colecciones',
'libraries.tabs.playlists' => 'Listas',
'libraries.groupings.title' => 'Agrupación',
'libraries.groupings.all' => 'Todo',
'libraries.groupings.movies' => 'Películas',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Todo',
'libraries.groupings.movies' => 'Películas',
'libraries.groupings.shows' => 'Series',
'libraries.groupings.seasons' => 'Temporadas',
'libraries.groupings.episodes' => 'Episodios',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsFr implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Afficher la sélection de profil à chaque ouverture de l\'application';
@override String get confirmExitOnBack => 'Confirmer avant de quitter';
@override String get confirmExitOnBackDescription => 'Afficher une boîte de dialogue de confirmation en appuyant sur retour pour quitter';
@override String get forceTvMode => 'Forcer le mode TV';
@override String get forceTvModeDescription => 'Utiliser la mise en page TV quelle que soit la détection automatique. Utile sur les appareils Android TV qui ne signalent pas la fonctionnalité leanback. Redémarre l\'application lors du changement.';
@override String get autoHidePerformanceOverlay => 'Masquer auto. superposition performances';
@override String get autoHidePerformanceOverlayDescription => 'Faire apparaître/disparaître la superposition avec les contrôles de lecture';
@override String get showNavBarLabels => 'Afficher les libellés de la barre de navigation';
@@ -1598,6 +1600,8 @@ extension on TranslationsFr {
'settings.requireProfileSelectionOnOpenDescription' => 'Afficher la sélection de profil à chaque ouverture de l\'application',
'settings.confirmExitOnBack' => 'Confirmer avant de quitter',
'settings.confirmExitOnBackDescription' => 'Afficher une boîte de dialogue de confirmation en appuyant sur retour pour quitter',
'settings.forceTvMode' => 'Forcer le mode TV',
'settings.forceTvModeDescription' => 'Utiliser la mise en page TV quelle que soit la détection automatique. Utile sur les appareils Android TV qui ne signalent pas la fonctionnalité leanback. Redémarre l\'application lors du changement.',
'settings.autoHidePerformanceOverlay' => 'Masquer auto. superposition performances',
'settings.autoHidePerformanceOverlayDescription' => 'Faire apparaître/disparaître la superposition avec les contrôles de lecture',
'settings.showNavBarLabels' => 'Afficher les libellés de la barre de navigation',
@@ -1893,10 +1897,10 @@ extension on TranslationsFr {
'libraries.tabs.collections' => 'Collections',
'libraries.tabs.playlists' => 'Playlists',
'libraries.groupings.title' => 'Regroupement',
'libraries.groupings.all' => 'Tous',
'libraries.groupings.movies' => 'Films',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Tous',
'libraries.groupings.movies' => 'Films',
'libraries.groupings.shows' => 'Show TV',
'libraries.groupings.seasons' => 'Saisons',
'libraries.groupings.episodes' => 'Épisodes',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsIt implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta';
@override String get confirmExitOnBack => 'Conferma prima di uscire';
@override String get confirmExitOnBackDescription => 'Mostra una finestra di conferma quando si preme indietro per uscire dall\'app';
@override String get forceTvMode => 'Forza modalità TV';
@override String get forceTvModeDescription => 'Usa il layout TV indipendentemente dal rilevamento automatico. Utile sui dispositivi Android TV che non segnalano la funzionalità leanback. Riavvia l\'app al cambiamento.';
@override String get autoHidePerformanceOverlay => 'Nascondi automaticamente overlay prestazioni';
@override String get autoHidePerformanceOverlayDescription => 'Dissolvi l\'overlay prestazioni con i controlli di riproduzione';
@override String get showNavBarLabels => 'Mostra etichette barra di navigazione';
@@ -1598,6 +1600,8 @@ extension on TranslationsIt {
'settings.requireProfileSelectionOnOpenDescription' => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta',
'settings.confirmExitOnBack' => 'Conferma prima di uscire',
'settings.confirmExitOnBackDescription' => 'Mostra una finestra di conferma quando si preme indietro per uscire dall\'app',
'settings.forceTvMode' => 'Forza modalità TV',
'settings.forceTvModeDescription' => 'Usa il layout TV indipendentemente dal rilevamento automatico. Utile sui dispositivi Android TV che non segnalano la funzionalità leanback. Riavvia l\'app al cambiamento.',
'settings.autoHidePerformanceOverlay' => 'Nascondi automaticamente overlay prestazioni',
'settings.autoHidePerformanceOverlayDescription' => 'Dissolvi l\'overlay prestazioni con i controlli di riproduzione',
'settings.showNavBarLabels' => 'Mostra etichette barra di navigazione',
@@ -1893,10 +1897,10 @@ extension on TranslationsIt {
'libraries.tabs.collections' => 'Raccolte',
'libraries.tabs.playlists' => 'Playlist',
'libraries.groupings.title' => 'Raggruppamento',
'libraries.groupings.all' => 'Tutti',
'libraries.groupings.movies' => 'Film',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Tutti',
'libraries.groupings.movies' => 'Film',
'libraries.groupings.shows' => 'Serie TV',
'libraries.groupings.seasons' => 'Stagioni',
'libraries.groupings.episodes' => 'Episodi',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsJa implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'アプリを開くたびにプロフィール選択を表示';
@override String get confirmExitOnBack => '終了前に確認';
@override String get confirmExitOnBackDescription => '戻るボタンでアプリを終了する際に確認ダイアログを表示';
@override String get forceTvMode => 'TVモードを強制';
@override String get forceTvModeDescription => '自動検出に関係なくTVレイアウトを使用します。leanback機能を報告しないAndroid TVデバイスで便利です。変更するとアプリが再起動されます。';
@override String get autoHidePerformanceOverlay => 'パフォーマンスオーバーレイを自動非表示';
@override String get autoHidePerformanceOverlayDescription => '再生コントロールと一緒にパフォーマンスオーバーレイをフェードする';
@override String get showNavBarLabels => 'ナビゲーションバーラベルを表示';
@@ -1598,6 +1600,8 @@ extension on TranslationsJa {
'settings.requireProfileSelectionOnOpenDescription' => 'アプリを開くたびにプロフィール選択を表示',
'settings.confirmExitOnBack' => '終了前に確認',
'settings.confirmExitOnBackDescription' => '戻るボタンでアプリを終了する際に確認ダイアログを表示',
'settings.forceTvMode' => 'TVモードを強制',
'settings.forceTvModeDescription' => '自動検出に関係なくTVレイアウトを使用します。leanback機能を報告しないAndroid TVデバイスで便利です。変更するとアプリが再起動されます。',
'settings.autoHidePerformanceOverlay' => 'パフォーマンスオーバーレイを自動非表示',
'settings.autoHidePerformanceOverlayDescription' => '再生コントロールと一緒にパフォーマンスオーバーレイをフェードする',
'settings.showNavBarLabels' => 'ナビゲーションバーラベルを表示',
@@ -1893,10 +1897,10 @@ extension on TranslationsJa {
'libraries.tabs.collections' => 'コレクション',
'libraries.tabs.playlists' => 'プレイリスト',
'libraries.groupings.title' => 'グループ',
'libraries.groupings.all' => 'すべて',
'libraries.groupings.movies' => '映画',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'すべて',
'libraries.groupings.movies' => '映画',
'libraries.groupings.shows' => 'テレビ番組',
'libraries.groupings.seasons' => 'シーズン',
'libraries.groupings.episodes' => 'エピソード',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsKo implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => '앱을 열 때마다 프로필 선택 화면을 표시합니다';
@override String get confirmExitOnBack => '종료 전 확인';
@override String get confirmExitOnBackDescription => '뒤로 버튼을 눌러 앱을 종료할 때 확인 대화상자를 표시합니다';
@override String get forceTvMode => 'TV 모드 강제 사용';
@override String get forceTvModeDescription => '자동 감지와 관계없이 TV 레이아웃을 사용합니다. leanback 기능을 보고하지 않는 Android TV 기기에 유용합니다. 변경 시 앱이 다시 시작됩니다.';
@override String get autoHidePerformanceOverlay => '성능 오버레이 자동 숨기기';
@override String get autoHidePerformanceOverlayDescription => '재생 컨트롤과 함께 성능 오버레이를 페이드 처리';
@override String get showNavBarLabels => '내비게이션 바 라벨 표시';
@@ -1598,6 +1600,8 @@ extension on TranslationsKo {
'settings.requireProfileSelectionOnOpenDescription' => '앱을 열 때마다 프로필 선택 화면을 표시합니다',
'settings.confirmExitOnBack' => '종료 전 확인',
'settings.confirmExitOnBackDescription' => '뒤로 버튼을 눌러 앱을 종료할 때 확인 대화상자를 표시합니다',
'settings.forceTvMode' => 'TV 모드 강제 사용',
'settings.forceTvModeDescription' => '자동 감지와 관계없이 TV 레이아웃을 사용합니다. leanback 기능을 보고하지 않는 Android TV 기기에 유용합니다. 변경 시 앱이 다시 시작됩니다.',
'settings.autoHidePerformanceOverlay' => '성능 오버레이 자동 숨기기',
'settings.autoHidePerformanceOverlayDescription' => '재생 컨트롤과 함께 성능 오버레이를 페이드 처리',
'settings.showNavBarLabels' => '내비게이션 바 라벨 표시',
@@ -1893,10 +1897,10 @@ extension on TranslationsKo {
'libraries.tabs.collections' => '컬렉션',
'libraries.tabs.playlists' => '재생 목록',
'libraries.groupings.title' => '그룹',
'libraries.groupings.all' => '전체',
'libraries.groupings.movies' => '영화',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => '전체',
'libraries.groupings.movies' => '영화',
'libraries.groupings.shows' => 'TV 프로그램',
'libraries.groupings.seasons' => '시즌',
'libraries.groupings.episodes' => '',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsNb implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åpnes';
@override String get confirmExitOnBack => 'Bekreft før avslutning';
@override String get confirmExitOnBackDescription => 'Vis en bekreftelsesdialog når du trykker tilbake for å avslutte appen';
@override String get forceTvMode => 'Tving TV-modus';
@override String get forceTvModeDescription => 'Bruk TV-oppsettet uavhengig av automatisk gjenkjenning. Nyttig på Android TV-enheter som ikke rapporterer leanback-funksjonen. Starter appen på nytt ved endring.';
@override String get autoHidePerformanceOverlay => 'Skjul ytelsesoverlegg automatisk';
@override String get autoHidePerformanceOverlayDescription => 'Fade ytelsesoverlegget med avspillingskontrollene';
@override String get showNavBarLabels => 'Vis navigasjonsfeltlabeler';
@@ -1598,6 +1600,8 @@ extension on TranslationsNb {
'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åpnes',
'settings.confirmExitOnBack' => 'Bekreft før avslutning',
'settings.confirmExitOnBackDescription' => 'Vis en bekreftelsesdialog når du trykker tilbake for å avslutte appen',
'settings.forceTvMode' => 'Tving TV-modus',
'settings.forceTvModeDescription' => 'Bruk TV-oppsettet uavhengig av automatisk gjenkjenning. Nyttig på Android TV-enheter som ikke rapporterer leanback-funksjonen. Starter appen på nytt ved endring.',
'settings.autoHidePerformanceOverlay' => 'Skjul ytelsesoverlegg automatisk',
'settings.autoHidePerformanceOverlayDescription' => 'Fade ytelsesoverlegget med avspillingskontrollene',
'settings.showNavBarLabels' => 'Vis navigasjonsfeltlabeler',
@@ -1893,10 +1897,10 @@ extension on TranslationsNb {
'libraries.tabs.collections' => 'Samlinger',
'libraries.tabs.playlists' => 'Spillelister',
'libraries.groupings.title' => 'Gruppering',
'libraries.groupings.all' => 'Alle',
'libraries.groupings.movies' => 'Filmer',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Alle',
'libraries.groupings.movies' => 'Filmer',
'libraries.groupings.shows' => 'TV-serier',
'libraries.groupings.seasons' => 'Sesonger',
'libraries.groupings.episodes' => 'Episoder',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsNl implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Toon profielselectie telkens wanneer de app wordt geopend';
@override String get confirmExitOnBack => 'Bevestigen voor afsluiten';
@override String get confirmExitOnBackDescription => 'Toon een bevestigingsvenster bij het drukken op terug om de app af te sluiten';
@override String get forceTvMode => 'TV-modus forceren';
@override String get forceTvModeDescription => 'Gebruik de TV-indeling ongeacht automatische detectie. Handig op Android TV-apparaten die de leanback-functie niet melden. Start de app opnieuw bij wijziging.';
@override String get autoHidePerformanceOverlay => 'Prestatie-overlay automatisch verbergen';
@override String get autoHidePerformanceOverlayDescription => 'Laat de prestatie-overlay meevervagen met de afspeelknoppen';
@override String get showNavBarLabels => 'Navigatiebalk labels tonen';
@@ -1598,6 +1600,8 @@ extension on TranslationsNl {
'settings.requireProfileSelectionOnOpenDescription' => 'Toon profielselectie telkens wanneer de app wordt geopend',
'settings.confirmExitOnBack' => 'Bevestigen voor afsluiten',
'settings.confirmExitOnBackDescription' => 'Toon een bevestigingsvenster bij het drukken op terug om de app af te sluiten',
'settings.forceTvMode' => 'TV-modus forceren',
'settings.forceTvModeDescription' => 'Gebruik de TV-indeling ongeacht automatische detectie. Handig op Android TV-apparaten die de leanback-functie niet melden. Start de app opnieuw bij wijziging.',
'settings.autoHidePerformanceOverlay' => 'Prestatie-overlay automatisch verbergen',
'settings.autoHidePerformanceOverlayDescription' => 'Laat de prestatie-overlay meevervagen met de afspeelknoppen',
'settings.showNavBarLabels' => 'Navigatiebalk labels tonen',
@@ -1893,10 +1897,10 @@ extension on TranslationsNl {
'libraries.tabs.collections' => 'Collecties',
'libraries.tabs.playlists' => 'Afspeellijsten',
'libraries.groupings.title' => 'Groepering',
'libraries.groupings.all' => 'Alles',
'libraries.groupings.movies' => 'Films',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Alles',
'libraries.groupings.movies' => 'Films',
'libraries.groupings.shows' => 'Series',
'libraries.groupings.seasons' => 'Seizoenen',
'libraries.groupings.episodes' => 'Afleveringen',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsPl implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana';
@override String get confirmExitOnBack => 'Potwierdź przed wyjściem';
@override String get confirmExitOnBackDescription => 'Pokaż dialog potwierdzenia przy naciśnięciu wstecz, aby wyjść z aplikacji';
@override String get forceTvMode => 'Wymuś tryb TV';
@override String get forceTvModeDescription => 'Użyj układu TV niezależnie od automatycznego wykrywania. Przydatne na urządzeniach Android TV, które nie zgłaszają funkcji leanback. Po zmianie aplikacja zostanie zrestartowana.';
@override String get autoHidePerformanceOverlay => 'Automatycznie ukrywaj nakładkę wydajności';
@override String get autoHidePerformanceOverlayDescription => 'Wygaszaj nakładkę wydajności wraz z kontrolkami odtwarzania';
@override String get showNavBarLabels => 'Pokaż etykiety paska nawigacji';
@@ -1598,6 +1600,8 @@ extension on TranslationsPl {
'settings.requireProfileSelectionOnOpenDescription' => 'Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana',
'settings.confirmExitOnBack' => 'Potwierdź przed wyjściem',
'settings.confirmExitOnBackDescription' => 'Pokaż dialog potwierdzenia przy naciśnięciu wstecz, aby wyjść z aplikacji',
'settings.forceTvMode' => 'Wymuś tryb TV',
'settings.forceTvModeDescription' => 'Użyj układu TV niezależnie od automatycznego wykrywania. Przydatne na urządzeniach Android TV, które nie zgłaszają funkcji leanback. Po zmianie aplikacja zostanie zrestartowana.',
'settings.autoHidePerformanceOverlay' => 'Automatycznie ukrywaj nakładkę wydajności',
'settings.autoHidePerformanceOverlayDescription' => 'Wygaszaj nakładkę wydajności wraz z kontrolkami odtwarzania',
'settings.showNavBarLabels' => 'Pokaż etykiety paska nawigacji',
@@ -1893,10 +1897,10 @@ extension on TranslationsPl {
'libraries.tabs.collections' => 'Kolekcje',
'libraries.tabs.playlists' => 'Playlisty',
'libraries.groupings.title' => 'Grupowanie',
'libraries.groupings.all' => 'Wszystkie',
'libraries.groupings.movies' => 'Filmy',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Wszystkie',
'libraries.groupings.movies' => 'Filmy',
'libraries.groupings.shows' => 'Seriale TV',
'libraries.groupings.seasons' => 'Sezony',
'libraries.groupings.episodes' => 'Odcinki',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsPt implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Mostrar seleção de perfil toda vez que o app for aberto';
@override String get confirmExitOnBack => 'Confirmar antes de sair';
@override String get confirmExitOnBackDescription => 'Mostrar diálogo de confirmação ao pressionar voltar para sair do app';
@override String get forceTvMode => 'Forçar modo TV';
@override String get forceTvModeDescription => 'Usar o layout de TV independentemente da detecção automática. Útil em dispositivos Android TV que não reportam o recurso leanback. Reinicia o app ao alterar.';
@override String get autoHidePerformanceOverlay => 'Ocultar overlay de desempenho automaticamente';
@override String get autoHidePerformanceOverlayDescription => 'Desvanecer o overlay de desempenho com os controles de reprodução';
@override String get showNavBarLabels => 'Mostrar Rótulos da Barra de Navegação';
@@ -1598,6 +1600,8 @@ extension on TranslationsPt {
'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar seleção de perfil toda vez que o app for aberto',
'settings.confirmExitOnBack' => 'Confirmar antes de sair',
'settings.confirmExitOnBackDescription' => 'Mostrar diálogo de confirmação ao pressionar voltar para sair do app',
'settings.forceTvMode' => 'Forçar modo TV',
'settings.forceTvModeDescription' => 'Usar o layout de TV independentemente da detecção automática. Útil em dispositivos Android TV que não reportam o recurso leanback. Reinicia o app ao alterar.',
'settings.autoHidePerformanceOverlay' => 'Ocultar overlay de desempenho automaticamente',
'settings.autoHidePerformanceOverlayDescription' => 'Desvanecer o overlay de desempenho com os controles de reprodução',
'settings.showNavBarLabels' => 'Mostrar Rótulos da Barra de Navegação',
@@ -1893,10 +1897,10 @@ extension on TranslationsPt {
'libraries.tabs.collections' => 'Coleções',
'libraries.tabs.playlists' => 'Playlists',
'libraries.groupings.title' => 'Agrupamento',
'libraries.groupings.all' => 'Todos',
'libraries.groupings.movies' => 'Filmes',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Todos',
'libraries.groupings.movies' => 'Filmes',
'libraries.groupings.shows' => 'Séries de TV',
'libraries.groupings.seasons' => 'Temporadas',
'libraries.groupings.episodes' => 'Episódios',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsRu implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Показывать выбор профиля при каждом открытии приложения';
@override String get confirmExitOnBack => 'Подтверждать выход';
@override String get confirmExitOnBackDescription => 'Показывать диалог подтверждения при нажатии «назад» для выхода из приложения';
@override String get forceTvMode => 'Принудительный режим ТВ';
@override String get forceTvModeDescription => 'Использовать макет ТВ независимо от автоматического определения. Полезно на устройствах Android TV, которые не сообщают о функции leanback. Приложение перезапустится при изменении.';
@override String get autoHidePerformanceOverlay => 'Автоскрытие оверлея производительности';
@override String get autoHidePerformanceOverlayDescription => 'Скрывать оверлей производительности вместе с элементами управления воспроизведением';
@override String get showNavBarLabels => 'Показывать подписи панели навигации';
@@ -1598,6 +1600,8 @@ extension on TranslationsRu {
'settings.requireProfileSelectionOnOpenDescription' => 'Показывать выбор профиля при каждом открытии приложения',
'settings.confirmExitOnBack' => 'Подтверждать выход',
'settings.confirmExitOnBackDescription' => 'Показывать диалог подтверждения при нажатии «назад» для выхода из приложения',
'settings.forceTvMode' => 'Принудительный режим ТВ',
'settings.forceTvModeDescription' => 'Использовать макет ТВ независимо от автоматического определения. Полезно на устройствах Android TV, которые не сообщают о функции leanback. Приложение перезапустится при изменении.',
'settings.autoHidePerformanceOverlay' => 'Автоскрытие оверлея производительности',
'settings.autoHidePerformanceOverlayDescription' => 'Скрывать оверлей производительности вместе с элементами управления воспроизведением',
'settings.showNavBarLabels' => 'Показывать подписи панели навигации',
@@ -1893,10 +1897,10 @@ extension on TranslationsRu {
'libraries.tabs.collections' => 'Коллекции',
'libraries.tabs.playlists' => 'Плейлисты',
'libraries.groupings.title' => 'Группировка',
'libraries.groupings.all' => 'Все',
'libraries.groupings.movies' => 'Фильмы',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Все',
'libraries.groupings.movies' => 'Фильмы',
'libraries.groupings.shows' => 'Сериалы',
'libraries.groupings.seasons' => 'Сезоны',
'libraries.groupings.episodes' => 'Эпизоды',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsSv implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => 'Visa profilval varje gång appen öppnas';
@override String get confirmExitOnBack => 'Bekräfta innan avslut';
@override String get confirmExitOnBackDescription => 'Visa en bekräftelsedialog när du trycker tillbaka för att avsluta appen';
@override String get forceTvMode => 'Tvinga TV-läge';
@override String get forceTvModeDescription => 'Använd TV-layouten oavsett automatisk identifiering. Användbart på Android TV-enheter som inte rapporterar leanback-funktionen. Startar om appen vid ändring.';
@override String get autoHidePerformanceOverlay => 'Dölj prestandaöverlagring automatiskt';
@override String get autoHidePerformanceOverlayDescription => 'Tona prestandaöverlagringen med uppspelningskontrollerna';
@override String get showNavBarLabels => 'Visa navigeringsfältets etiketter';
@@ -1598,6 +1600,8 @@ extension on TranslationsSv {
'settings.requireProfileSelectionOnOpenDescription' => 'Visa profilval varje gång appen öppnas',
'settings.confirmExitOnBack' => 'Bekräfta innan avslut',
'settings.confirmExitOnBackDescription' => 'Visa en bekräftelsedialog när du trycker tillbaka för att avsluta appen',
'settings.forceTvMode' => 'Tvinga TV-läge',
'settings.forceTvModeDescription' => 'Använd TV-layouten oavsett automatisk identifiering. Användbart på Android TV-enheter som inte rapporterar leanback-funktionen. Startar om appen vid ändring.',
'settings.autoHidePerformanceOverlay' => 'Dölj prestandaöverlagring automatiskt',
'settings.autoHidePerformanceOverlayDescription' => 'Tona prestandaöverlagringen med uppspelningskontrollerna',
'settings.showNavBarLabels' => 'Visa navigeringsfältets etiketter',
@@ -1893,10 +1897,10 @@ extension on TranslationsSv {
'libraries.tabs.collections' => 'Samlingar',
'libraries.tabs.playlists' => 'Spellistor',
'libraries.groupings.title' => 'Gruppering',
'libraries.groupings.all' => 'Alla',
'libraries.groupings.movies' => 'Filmer',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => 'Alla',
'libraries.groupings.movies' => 'Filmer',
'libraries.groupings.shows' => 'Serier',
'libraries.groupings.seasons' => 'Säsonger',
'libraries.groupings.episodes' => 'Avsnitt',
+6 -2
View File
@@ -344,6 +344,8 @@ class _TranslationsSettingsZh implements TranslationsSettingsEn {
@override String get requireProfileSelectionOnOpenDescription => '每次打开应用时显示配置文件选择';
@override String get confirmExitOnBack => '退出前确认';
@override String get confirmExitOnBackDescription => '按返回键退出应用时显示确认对话框';
@override String get forceTvMode => '强制 TV 模式';
@override String get forceTvModeDescription => '无论自动检测结果如何都使用 TV 布局。适用于未报告 leanback 功能的 Android TV 设备。更改后将重启应用。';
@override String get autoHidePerformanceOverlay => '自动隐藏性能叠加层';
@override String get autoHidePerformanceOverlayDescription => '性能叠加层随播放控件一起淡入淡出';
@override String get showNavBarLabels => '显示导航栏标签';
@@ -1598,6 +1600,8 @@ extension on TranslationsZh {
'settings.requireProfileSelectionOnOpenDescription' => '每次打开应用时显示配置文件选择',
'settings.confirmExitOnBack' => '退出前确认',
'settings.confirmExitOnBackDescription' => '按返回键退出应用时显示确认对话框',
'settings.forceTvMode' => '强制 TV 模式',
'settings.forceTvModeDescription' => '无论自动检测结果如何都使用 TV 布局。适用于未报告 leanback 功能的 Android TV 设备。更改后将重启应用。',
'settings.autoHidePerformanceOverlay' => '自动隐藏性能叠加层',
'settings.autoHidePerformanceOverlayDescription' => '性能叠加层随播放控件一起淡入淡出',
'settings.showNavBarLabels' => '显示导航栏标签',
@@ -1893,10 +1897,10 @@ extension on TranslationsZh {
'libraries.tabs.collections' => '合集',
'libraries.tabs.playlists' => '播放列表',
'libraries.groupings.title' => '分组',
'libraries.groupings.all' => '全部',
'libraries.groupings.movies' => '电影',
_ => null,
} ?? switch (path) {
'libraries.groupings.all' => '全部',
'libraries.groupings.movies' => '电影',
'libraries.groupings.shows' => '剧集',
'libraries.groupings.seasons' => '',
'libraries.groupings.episodes' => '',
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "Visa profilval varje gång appen öppnas",
"confirmExitOnBack": "Bekräfta innan avslut",
"confirmExitOnBackDescription": "Visa en bekräftelsedialog när du trycker tillbaka för att avsluta appen",
"forceTvMode": "Tvinga TV-läge",
"forceTvModeDescription": "Använd TV-layouten oavsett automatisk identifiering. Användbart på Android TV-enheter som inte rapporterar leanback-funktionen. Startar om appen vid ändring.",
"autoHidePerformanceOverlay": "Dölj prestandaöverlagring automatiskt",
"autoHidePerformanceOverlayDescription": "Tona prestandaöverlagringen med uppspelningskontrollerna",
"showNavBarLabels": "Visa navigeringsfältets etiketter",
+2
View File
@@ -225,6 +225,8 @@
"requireProfileSelectionOnOpenDescription": "每次打开应用时显示配置文件选择",
"confirmExitOnBack": "退出前确认",
"confirmExitOnBackDescription": "按返回键退出应用时显示确认对话框",
"forceTvMode": "强制 TV 模式",
"forceTvModeDescription": "无论自动检测结果如何都使用 TV 布局。适用于未报告 leanback 功能的 Android TV 设备。更改后将重启应用。",
"autoHidePerformanceOverlay": "自动隐藏性能叠加层",
"autoHidePerformanceOverlayDescription": "性能叠加层随播放控件一起淡入淡出",
"showNavBarLabels": "显示导航栏标签",
+1 -1
View File
@@ -136,7 +136,7 @@ Future<void> _bootstrapApp() async {
// Initialize TV detection and PiP service for Android
if (Platform.isAndroid) {
futures.add(TvDetectionService.getInstance());
futures.add(TvDetectionService.getInstance(forceTv: settings.getForceTvMode()));
// Initialize PiP service to listen for PiP state changes
PipService();
}
@@ -1,3 +1,5 @@
import 'dart:io' show Platform;
import 'package:flutter/material.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:provider/provider.dart';
@@ -26,6 +28,7 @@ class _AppearanceSettingsScreenState extends State<AppearanceSettingsScreen> {
bool _isLoading = true;
bool _requireProfileSelectionOnOpen = false;
bool _confirmExitOnBack = true;
bool _forceTvMode = false;
@override
void initState() {
@@ -39,6 +42,7 @@ class _AppearanceSettingsScreenState extends State<AppearanceSettingsScreen> {
setState(() {
_requireProfileSelectionOnOpen = _settingsService.getRequireProfileSelectionOnOpen();
_confirmExitOnBack = _settingsService.getConfirmExitOnBack();
_forceTvMode = _settingsService.getForceTvMode();
_isLoading = false;
});
}
@@ -73,6 +77,7 @@ class _AppearanceSettingsScreenState extends State<AppearanceSettingsScreen> {
// --- Navigation ---
SettingsSectionHeader(t.settings.navigation),
if (Platform.isAndroid) _buildForceTvMode(),
if (PlatformDetector.shouldUseSideNavigation(context)) _buildAlwaysKeepSidebarOpen(),
if (!PlatformDetector.shouldUseSideNavigation(context)) _buildShowNavBarLabels(),
_buildShowUnwatchedCount(),
@@ -368,6 +373,21 @@ class _AppearanceSettingsScreenState extends State<AppearanceSettingsScreen> {
);
}
Widget _buildForceTvMode() {
return SwitchListTile(
secondary: const AppIcon(Symbols.tv_rounded, fill: 1),
title: Text(t.settings.forceTvMode),
subtitle: Text(t.settings.forceTvModeDescription),
value: _forceTvMode,
onChanged: (value) async {
setState(() => _forceTvMode = value);
await _settingsService.setForceTvMode(value);
TvDetectionService.setForceTVSync(value);
if (mounted) _restartApp();
},
);
}
Widget _buildAutoHidePerformanceOverlay() {
return Consumer<SettingsProvider>(
builder: (context, settingsProvider, child) {
+9
View File
@@ -112,6 +112,7 @@ class SettingsService extends BaseSharedPreferencesService {
static const String _keySelectedExternalPlayer = 'selected_external_player';
static const String _keyCustomExternalPlayers = 'custom_external_players';
static const String _keyConfirmExitOnBack = 'confirm_exit_on_back';
static const String _keyForceTvMode = 'force_tv_mode';
static const String _keyAmbientLighting = 'ambient_lighting';
static const String _keyAudioPassthrough = 'audio_passthrough';
static const String _keyAudioNormalization = 'audio_normalization';
@@ -1374,6 +1375,13 @@ class SettingsService extends BaseSharedPreferencesService {
return prefs.getBool(_keyConfirmExitOnBack) ?? true; // Default: enabled
}
// Force TV Mode (Android)
Future<void> setForceTvMode(bool value) async {
await prefs.setBool(_keyForceTvMode, value);
}
bool getForceTvMode() => prefs.getBool(_keyForceTvMode) ?? false;
// Ambient Lighting
Future<void> setAmbientLighting(bool enabled) async {
await prefs.setBool(_keyAmbientLighting, enabled);
@@ -1463,6 +1471,7 @@ class SettingsService extends BaseSharedPreferencesService {
prefs.remove(_keySelectedExternalPlayer),
prefs.remove(_keyCustomExternalPlayers),
prefs.remove(_keyConfirmExitOnBack),
prefs.remove(_keyForceTvMode),
prefs.remove(_keyAmbientLighting),
prefs.remove(_keyAudioPassthrough),
prefs.remove(_keyAudioNormalization),
+19 -5
View File
@@ -7,36 +7,50 @@ import 'package:flutter/material.dart';
/// Service for detecting if the app is running on Android TV
class TvDetectionService {
static TvDetectionService? _instance;
bool _detected = false;
bool _forceTv = false;
bool _isTV = false;
bool _initialized = false;
TvDetectionService._();
/// Get the singleton instance, initializing if needed
static Future<TvDetectionService> getInstance() async {
/// Get the singleton instance, initializing if needed.
/// Pass [forceTv] to combine a user override with the system-feature check.
static Future<TvDetectionService> getInstance({bool forceTv = false}) async {
if (_instance == null) {
_instance = TvDetectionService._();
await _instance!._detect();
await _instance!._detect(forceTv);
}
return _instance!;
}
Future<void> _detect() async {
Future<void> _detect(bool forceTv) async {
if (_initialized) return;
if (Platform.isAndroid) {
final deviceInfo = DeviceInfoPlugin();
final androidInfo = await deviceInfo.androidInfo;
// Check for android.software.leanback feature (standard Android TV detection)
_isTV = androidInfo.systemFeatures.contains('android.software.leanback');
_detected = androidInfo.systemFeatures.contains('android.software.leanback');
}
_forceTv = forceTv;
_isTV = _detected || _forceTv;
_initialized = true;
}
bool get isTV => _isTV;
/// Update the user force-TV override and recompute the effective flag.
void setForceTv(bool value) {
_forceTv = value;
_isTV = _detected || _forceTv;
}
/// Synchronous access after initialization (returns false if not initialized)
static bool isTVSync() => _instance?._isTV ?? false;
/// Convenience setter that forwards to the singleton if available.
static void setForceTVSync(bool value) => _instance?.setForceTv(value);
}
/// Utility class for platform detection