feat: Implement custom keyboard for Android TV (#523)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2025-10-09 09:59:30 +02:00 committed by GitHub
parent 721fc28060
commit 75c2f958b4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 927 additions and 157 deletions

View file

@ -38,6 +38,7 @@ mixin _$ClientSettingsModel implements DiagnosticableTreeMixin {
BackgroundType get backgroundImage;
bool get checkForUpdates;
bool get usePosterForLibrary;
bool get useSystemIME;
String? get lastViewedUpdate;
int? get libraryPageSize;
Map<GlobalHotKeys, KeyCombination> get shortcuts;
@ -82,6 +83,7 @@ mixin _$ClientSettingsModel implements DiagnosticableTreeMixin {
..add(DiagnosticsProperty('backgroundImage', backgroundImage))
..add(DiagnosticsProperty('checkForUpdates', checkForUpdates))
..add(DiagnosticsProperty('usePosterForLibrary', usePosterForLibrary))
..add(DiagnosticsProperty('useSystemIME', useSystemIME))
..add(DiagnosticsProperty('lastViewedUpdate', lastViewedUpdate))
..add(DiagnosticsProperty('libraryPageSize', libraryPageSize))
..add(DiagnosticsProperty('shortcuts', shortcuts));
@ -89,7 +91,7 @@ mixin _$ClientSettingsModel implements DiagnosticableTreeMixin {
@override
String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) {
return 'ClientSettingsModel(syncPath: $syncPath, position: $position, size: $size, timeOut: $timeOut, nextUpDateCutoff: $nextUpDateCutoff, themeMode: $themeMode, themeColor: $themeColor, deriveColorsFromItem: $deriveColorsFromItem, amoledBlack: $amoledBlack, blurPlaceHolders: $blurPlaceHolders, blurUpcomingEpisodes: $blurUpcomingEpisodes, selectedLocale: $selectedLocale, enableMediaKeys: $enableMediaKeys, posterSize: $posterSize, pinchPosterZoom: $pinchPosterZoom, mouseDragSupport: $mouseDragSupport, requireWifi: $requireWifi, showAllCollectionTypes: $showAllCollectionTypes, maxConcurrentDownloads: $maxConcurrentDownloads, schemeVariant: $schemeVariant, backgroundImage: $backgroundImage, checkForUpdates: $checkForUpdates, usePosterForLibrary: $usePosterForLibrary, lastViewedUpdate: $lastViewedUpdate, libraryPageSize: $libraryPageSize, shortcuts: $shortcuts)';
return 'ClientSettingsModel(syncPath: $syncPath, position: $position, size: $size, timeOut: $timeOut, nextUpDateCutoff: $nextUpDateCutoff, themeMode: $themeMode, themeColor: $themeColor, deriveColorsFromItem: $deriveColorsFromItem, amoledBlack: $amoledBlack, blurPlaceHolders: $blurPlaceHolders, blurUpcomingEpisodes: $blurUpcomingEpisodes, selectedLocale: $selectedLocale, enableMediaKeys: $enableMediaKeys, posterSize: $posterSize, pinchPosterZoom: $pinchPosterZoom, mouseDragSupport: $mouseDragSupport, requireWifi: $requireWifi, showAllCollectionTypes: $showAllCollectionTypes, maxConcurrentDownloads: $maxConcurrentDownloads, schemeVariant: $schemeVariant, backgroundImage: $backgroundImage, checkForUpdates: $checkForUpdates, usePosterForLibrary: $usePosterForLibrary, useSystemIME: $useSystemIME, lastViewedUpdate: $lastViewedUpdate, libraryPageSize: $libraryPageSize, shortcuts: $shortcuts)';
}
}
@ -123,6 +125,7 @@ abstract mixin class $ClientSettingsModelCopyWith<$Res> {
BackgroundType backgroundImage,
bool checkForUpdates,
bool usePosterForLibrary,
bool useSystemIME,
String? lastViewedUpdate,
int? libraryPageSize,
Map<GlobalHotKeys, KeyCombination> shortcuts});
@ -164,6 +167,7 @@ class _$ClientSettingsModelCopyWithImpl<$Res>
Object? backgroundImage = null,
Object? checkForUpdates = null,
Object? usePosterForLibrary = null,
Object? useSystemIME = null,
Object? lastViewedUpdate = freezed,
Object? libraryPageSize = freezed,
Object? shortcuts = null,
@ -261,6 +265,10 @@ class _$ClientSettingsModelCopyWithImpl<$Res>
? _self.usePosterForLibrary
: usePosterForLibrary // ignore: cast_nullable_to_non_nullable
as bool,
useSystemIME: null == useSystemIME
? _self.useSystemIME
: useSystemIME // ignore: cast_nullable_to_non_nullable
as bool,
lastViewedUpdate: freezed == lastViewedUpdate
? _self.lastViewedUpdate
: lastViewedUpdate // ignore: cast_nullable_to_non_nullable
@ -394,6 +402,7 @@ extension ClientSettingsModelPatterns on ClientSettingsModel {
BackgroundType backgroundImage,
bool checkForUpdates,
bool usePosterForLibrary,
bool useSystemIME,
String? lastViewedUpdate,
int? libraryPageSize,
Map<GlobalHotKeys, KeyCombination> shortcuts)?
@ -427,6 +436,7 @@ extension ClientSettingsModelPatterns on ClientSettingsModel {
_that.backgroundImage,
_that.checkForUpdates,
_that.usePosterForLibrary,
_that.useSystemIME,
_that.lastViewedUpdate,
_that.libraryPageSize,
_that.shortcuts);
@ -474,6 +484,7 @@ extension ClientSettingsModelPatterns on ClientSettingsModel {
BackgroundType backgroundImage,
bool checkForUpdates,
bool usePosterForLibrary,
bool useSystemIME,
String? lastViewedUpdate,
int? libraryPageSize,
Map<GlobalHotKeys, KeyCombination> shortcuts)
@ -506,6 +517,7 @@ extension ClientSettingsModelPatterns on ClientSettingsModel {
_that.backgroundImage,
_that.checkForUpdates,
_that.usePosterForLibrary,
_that.useSystemIME,
_that.lastViewedUpdate,
_that.libraryPageSize,
_that.shortcuts);
@ -552,6 +564,7 @@ extension ClientSettingsModelPatterns on ClientSettingsModel {
BackgroundType backgroundImage,
bool checkForUpdates,
bool usePosterForLibrary,
bool useSystemIME,
String? lastViewedUpdate,
int? libraryPageSize,
Map<GlobalHotKeys, KeyCombination> shortcuts)?
@ -584,6 +597,7 @@ extension ClientSettingsModelPatterns on ClientSettingsModel {
_that.backgroundImage,
_that.checkForUpdates,
_that.usePosterForLibrary,
_that.useSystemIME,
_that.lastViewedUpdate,
_that.libraryPageSize,
_that.shortcuts);
@ -621,6 +635,7 @@ class _ClientSettingsModel extends ClientSettingsModel
this.backgroundImage = BackgroundType.blurred,
this.checkForUpdates = true,
this.usePosterForLibrary = false,
this.useSystemIME = false,
this.lastViewedUpdate,
this.libraryPageSize,
final Map<GlobalHotKeys, KeyCombination> shortcuts = const {}})
@ -696,6 +711,9 @@ class _ClientSettingsModel extends ClientSettingsModel
@JsonKey()
final bool usePosterForLibrary;
@override
@JsonKey()
final bool useSystemIME;
@override
final String? lastViewedUpdate;
@override
final int? libraryPageSize;
@ -753,6 +771,7 @@ class _ClientSettingsModel extends ClientSettingsModel
..add(DiagnosticsProperty('backgroundImage', backgroundImage))
..add(DiagnosticsProperty('checkForUpdates', checkForUpdates))
..add(DiagnosticsProperty('usePosterForLibrary', usePosterForLibrary))
..add(DiagnosticsProperty('useSystemIME', useSystemIME))
..add(DiagnosticsProperty('lastViewedUpdate', lastViewedUpdate))
..add(DiagnosticsProperty('libraryPageSize', libraryPageSize))
..add(DiagnosticsProperty('shortcuts', shortcuts));
@ -760,7 +779,7 @@ class _ClientSettingsModel extends ClientSettingsModel
@override
String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) {
return 'ClientSettingsModel(syncPath: $syncPath, position: $position, size: $size, timeOut: $timeOut, nextUpDateCutoff: $nextUpDateCutoff, themeMode: $themeMode, themeColor: $themeColor, deriveColorsFromItem: $deriveColorsFromItem, amoledBlack: $amoledBlack, blurPlaceHolders: $blurPlaceHolders, blurUpcomingEpisodes: $blurUpcomingEpisodes, selectedLocale: $selectedLocale, enableMediaKeys: $enableMediaKeys, posterSize: $posterSize, pinchPosterZoom: $pinchPosterZoom, mouseDragSupport: $mouseDragSupport, requireWifi: $requireWifi, showAllCollectionTypes: $showAllCollectionTypes, maxConcurrentDownloads: $maxConcurrentDownloads, schemeVariant: $schemeVariant, backgroundImage: $backgroundImage, checkForUpdates: $checkForUpdates, usePosterForLibrary: $usePosterForLibrary, lastViewedUpdate: $lastViewedUpdate, libraryPageSize: $libraryPageSize, shortcuts: $shortcuts)';
return 'ClientSettingsModel(syncPath: $syncPath, position: $position, size: $size, timeOut: $timeOut, nextUpDateCutoff: $nextUpDateCutoff, themeMode: $themeMode, themeColor: $themeColor, deriveColorsFromItem: $deriveColorsFromItem, amoledBlack: $amoledBlack, blurPlaceHolders: $blurPlaceHolders, blurUpcomingEpisodes: $blurUpcomingEpisodes, selectedLocale: $selectedLocale, enableMediaKeys: $enableMediaKeys, posterSize: $posterSize, pinchPosterZoom: $pinchPosterZoom, mouseDragSupport: $mouseDragSupport, requireWifi: $requireWifi, showAllCollectionTypes: $showAllCollectionTypes, maxConcurrentDownloads: $maxConcurrentDownloads, schemeVariant: $schemeVariant, backgroundImage: $backgroundImage, checkForUpdates: $checkForUpdates, usePosterForLibrary: $usePosterForLibrary, useSystemIME: $useSystemIME, lastViewedUpdate: $lastViewedUpdate, libraryPageSize: $libraryPageSize, shortcuts: $shortcuts)';
}
}
@ -796,6 +815,7 @@ abstract mixin class _$ClientSettingsModelCopyWith<$Res>
BackgroundType backgroundImage,
bool checkForUpdates,
bool usePosterForLibrary,
bool useSystemIME,
String? lastViewedUpdate,
int? libraryPageSize,
Map<GlobalHotKeys, KeyCombination> shortcuts});
@ -837,6 +857,7 @@ class __$ClientSettingsModelCopyWithImpl<$Res>
Object? backgroundImage = null,
Object? checkForUpdates = null,
Object? usePosterForLibrary = null,
Object? useSystemIME = null,
Object? lastViewedUpdate = freezed,
Object? libraryPageSize = freezed,
Object? shortcuts = null,
@ -934,6 +955,10 @@ class __$ClientSettingsModelCopyWithImpl<$Res>
? _self.usePosterForLibrary
: usePosterForLibrary // ignore: cast_nullable_to_non_nullable
as bool,
useSystemIME: null == useSystemIME
? _self.useSystemIME
: useSystemIME // ignore: cast_nullable_to_non_nullable
as bool,
lastViewedUpdate: freezed == lastViewedUpdate
? _self.lastViewedUpdate
: lastViewedUpdate // ignore: cast_nullable_to_non_nullable