From 9954ed7db596a621a1568ebbf8f5392ca284df2c Mon Sep 17 00:00:00 2001 From: PartyDonut Date: Sat, 18 Oct 2025 14:21:32 +0200 Subject: [PATCH] chore: Change native interface size and custom keyboard fixes --- .../jknaapen/fladder/VideoPlayerActivity.kt | 2 +- .../widgets/suggestion_search_bar.dart | 10 +- .../client_settings_advanced.dart | 3 +- lib/screens/shared/media/detailed_banner.dart | 2 +- lib/screens/shared/outlined_text_field.dart | 7 +- .../keyboard/keyboard_localization.dart | 94 +++++++++++-------- lib/widgets/keyboard/slide_in_keyboard.dart | 2 +- 7 files changed, 65 insertions(+), 55 deletions(-) diff --git a/android/app/src/main/kotlin/nl/jknaapen/fladder/VideoPlayerActivity.kt b/android/app/src/main/kotlin/nl/jknaapen/fladder/VideoPlayerActivity.kt index 9c426a2..2f98816 100644 --- a/android/app/src/main/kotlin/nl/jknaapen/fladder/VideoPlayerActivity.kt +++ b/android/app/src/main/kotlin/nl/jknaapen/fladder/VideoPlayerActivity.kt @@ -52,7 +52,7 @@ fun VideoPlayerScreen( ) { val leanBackEnabled = leanBackEnabled(LocalContext.current) ExoPlayer { player -> - ScaledContent(if (leanBackEnabled) 0.7f else 1f) { + ScaledContent(if (leanBackEnabled) 0.75f else 1f) { CustomVideoControls(player) } } diff --git a/lib/screens/library_search/widgets/suggestion_search_bar.dart b/lib/screens/library_search/widgets/suggestion_search_bar.dart index 5add4ca..6505b42 100644 --- a/lib/screens/library_search/widgets/suggestion_search_bar.dart +++ b/lib/screens/library_search/widgets/suggestion_search_bar.dart @@ -46,15 +46,6 @@ class _SearchBarState extends ConsumerState { bool isEmpty = true; final FocusNode focusNode = FocusNode(); - @override - void initState() { - super.initState(); - if (widget.autoFocus) { - focusNode.requestFocus(); - } - super.initState(); - } - @override Widget build(BuildContext context) { ref.listen(librarySearchProvider(widget.key!).select((value) => value.searchQuery), (previous, next) { @@ -90,6 +81,7 @@ class _SearchBarState extends ConsumerState { ), builder: (context, controller, focusNode) => OutlinedTextField( focusNode: focusNode, + autoFocus: widget.autoFocus, controller: controller, onSubmitted: (value) { widget.onSubmited!(value); diff --git a/lib/screens/settings/client_sections/client_settings_advanced.dart b/lib/screens/settings/client_sections/client_settings_advanced.dart index 791d61d..835c9cd 100644 --- a/lib/screens/settings/client_sections/client_settings_advanced.dart +++ b/lib/screens/settings/client_sections/client_settings_advanced.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:fladder/providers/arguments_provider.dart'; import 'package:fladder/providers/settings/client_settings_provider.dart'; import 'package:fladder/providers/settings/home_settings_provider.dart'; import 'package:fladder/screens/settings/settings_list_tile.dart'; @@ -81,7 +80,7 @@ List buildClientSettingsAdvanced(BuildContext context, WidgetRef ref) { ), ), ), - if (ref.read(argumentsStateProvider).leanBackMode) + if (AdaptiveLayout.inputDeviceOf(context) == InputDevice.dPad) SettingsListTile( label: Text(context.localized.clientSettingsUseSystemIMETitle), subLabel: Text(context.localized.clientSettingsUseSystemIMEDesc), diff --git a/lib/screens/shared/media/detailed_banner.dart b/lib/screens/shared/media/detailed_banner.dart index 8356e95..eb3c978 100644 --- a/lib/screens/shared/media/detailed_banner.dart +++ b/lib/screens/shared/media/detailed_banner.dart @@ -65,7 +65,7 @@ class _DetailedBannerState extends ConsumerState { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Flexible( + Expanded( child: ExcludeFocus( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16).copyWith(bottom: 4), diff --git a/lib/screens/shared/outlined_text_field.dart b/lib/screens/shared/outlined_text_field.dart index 518b73b..2941185 100644 --- a/lib/screens/shared/outlined_text_field.dart +++ b/lib/screens/shared/outlined_text_field.dart @@ -5,7 +5,6 @@ import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:fladder/providers/arguments_provider.dart'; import 'package:fladder/providers/settings/client_settings_provider.dart'; import 'package:fladder/screens/shared/animated_fade_size.dart'; import 'package:fladder/theme.dart'; @@ -112,8 +111,8 @@ class _OutlinedTextFieldState extends ConsumerState { void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { - final useCustomKeyboard = ref.watch(argumentsStateProvider.select((value) => value.leanBackMode)) && - ref.watch(clientSettingsProvider.select((value) => !value.useSystemIME)); + final useCustomKeyboard = AdaptiveLayout.inputDeviceOf(context) == InputDevice.dPad && + ref.read(clientSettingsProvider.select((value) => !value.useSystemIME)); if (widget.autoFocus) { if (useCustomKeyboard) { _wrapperFocus.requestFocus(); @@ -127,7 +126,7 @@ class _OutlinedTextFieldState extends ConsumerState { @override Widget build(BuildContext context) { final isPasswordField = widget.keyboardType == TextInputType.visiblePassword; - final useCustomKeyboard = ref.watch(argumentsStateProvider.select((value) => value.leanBackMode)) && + final useCustomKeyboard = AdaptiveLayout.inputDeviceOf(context) == InputDevice.dPad && ref.watch(clientSettingsProvider.select((value) => !value.useSystemIME)); final textField = TextField( diff --git a/lib/widgets/keyboard/keyboard_localization.dart b/lib/widgets/keyboard/keyboard_localization.dart index bf1c7de..d769ade 100644 --- a/lib/widgets/keyboard/keyboard_localization.dart +++ b/lib/widgets/keyboard/keyboard_localization.dart @@ -2,82 +2,102 @@ class KeyboardLayouts { static const Map>>> layouts = { 'en': { KeyboardLayer.alpha: [ - ['A', 'B', 'C', 'D', 'E', 'F', 'G', '⌫'], - ['H', 'I', 'J', 'K', 'L', 'M', 'N', '123'], - ['O', 'P', 'Q', 'R', 'S', 'T', 'U'], + ['A', 'B', 'C', 'D', 'E', '⌫'], + ['F', 'G', 'H', 'I', 'J', '123'], + ['K', 'L', 'M', 'N', 'O', 'P'], + ['Q', 'R', 'S', 'T', 'U'], ['V', 'W', 'X', 'Y', 'Z'], ], KeyboardLayer.numericExtra: [ - ['1', '2', '3', '&', '#', '(', ')', '⌫'], - ['4', '5', '6', '@', '!', '?', ':', 'ABC'], - ['7', '8', '9', '.', '-', '_', '"', ':'], + ['1', '2', '3', '&', '#', '⌫'], + ['4', '5', '6', '(', ')', 'ABC'], + ['7', '8', '9', '@', '!', '?'], ['0', '/', '\$', '%', '+', '[', ']'], + ['.', '-', '_', '"', ':'] ], }, 'es': { KeyboardLayer.alpha: [ - ['A', 'B', 'C', 'D', 'E', 'F', 'G', '⌫'], - ['H', 'I', 'J', 'K', 'L', 'M', 'N', '123'], - ['O', 'P', 'Q', 'R', 'S', 'T', 'U'], + ['A', 'B', 'C', 'D', 'E', '⌫'], + ['F', 'G', 'H', 'I', 'J', '123'], + ['K', 'L', 'M', 'N', 'O', 'P'], + ['Q', 'R', 'S', 'T', 'U'], ['V', 'W', 'X', 'Y', 'Z', 'Ñ'], ], KeyboardLayer.numericExtra: [ - ['1', '2', '3', '&', '#', '(', ')', '⌫'], - ['4', '5', '6', '@', '!', '?', ';', 'ABC'], - ['7', '8', '9', '.', '-', '_', '"'], + ['1', '2', '3', '&', '#', '⌫'], + ['4', '5', '6', '(', ')', 'ABC'], + ['7', '8', '9', '@', '!', '?'], ['0', '/', '\$', '%', '+', '[', ']'], + ['.', '-', '_', '"', ':'] ], }, 'de': { KeyboardLayer.alpha: [ - ['A', 'B', 'C', 'D', 'E', 'F', 'G', '⌫'], - ['H', 'I', 'J', 'K', 'L', 'M', 'N', '123'], - ['O', 'P', 'Q', 'R', 'S', 'T', 'U'], - ['V', 'W', 'X', 'Y', 'Z', 'Ä', 'Ö', 'Ü'], + ['A', 'B', 'C', 'D', 'E', '⌫'], + ['F', 'G', 'H', 'I', 'J', '123'], + ['K', 'L', 'M', 'N', 'O', 'P'], + ['Q', 'R', 'S', 'T', 'U'], + ['V', 'W', 'X', 'Y', 'Z'], + ['Ä', 'Ö', 'Ü', 'ß'] ], KeyboardLayer.numericExtra: [ - ['1', '2', '3', '&', '#', '(', ')', '⌫'], - ['4', '5', '6', '@', '!', '?', ';', 'ABC'], - ['7', '8', '9', '.', '-', '_', '"'], + ['1', '2', '3', '&', '#', '⌫'], + ['4', '5', '6', '(', ')', 'ABC'], + ['7', '8', '9', '@', '!', '?'], ['0', '/', '\$', '%', '+', '[', ']'], + ['.', '-', '_', '"', ':'] ], }, 'fr': { KeyboardLayer.alpha: [ - ['A', 'B', 'C', 'D', 'E', 'F', 'G', '⌫'], - ['H', 'I', 'J', 'K', 'L', 'M', 'N', '123'], - ['O', 'P', 'Q', 'R', 'S', 'T', 'U'], - ['V', 'W', 'X', 'Y', 'Z', 'É', 'È', 'À'], + ['A', 'B', 'C', 'D', 'E', '⌫'], + ['F', 'G', 'H', 'I', 'J', '123'], + ['K', 'L', 'M', 'N', 'O', 'P'], + ['Q', 'R', 'S', 'T', 'U'], + ['V', 'W', 'X', 'Y', 'Z'], + ['É', 'È', 'À', 'Ç'], + ['Â', 'Ê', 'Î', 'Ô', 'Û'], ], KeyboardLayer.numericExtra: [ - ['1', '2', '3', '&', '#', '(', ')', '⌫'], - ['4', '5', '6', '@', '!', '?', ';', 'ABC'], - ['7', '8', '9', '.', '-', '_', '"'], + ['1', '2', '3', '&', '#', '⌫'], + ['4', '5', '6', '(', ')', 'ABC'], + ['7', '8', '9', '@', '!', '?'], ['0', '/', '\$', '%', '+', '[', ']'], + ['.', '-', '_', '"', ':'] ], }, 'ja': { KeyboardLayer.alpha: [ - ['あ', 'い', 'う', 'え', 'お', 'か', 'き', '⌫'], - ['さ', 'し', 'す', 'せ', 'そ', 'た', 'ち', '123'], - ['な', 'に', 'ぬ', 'ね', 'の', 'は', 'ひ'], - ['ふ', 'へ', 'ほ', 'ま', 'み', 'む', 'も', 'や', 'ゆ', 'よ'], + ['あ', 'い', 'う', 'え', 'お', '⌫'], + ['か', 'き', 'さ', 'し', 'す', '123'], + ['せ', 'そ', 'た', 'ち', 'な', 'に'], + ['ぬ', 'ね', 'の', 'は', 'ひ'], + ['ふ', 'へ', 'ほ', 'ま', 'み'], + ['む', 'も', 'や', 'ゆ', 'よ'], ], KeyboardLayer.numericExtra: [ - ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '⌫'], - ['!', '@', '#', '\$', '%', '^', '&', '*', '(', ')', 'ABC'], + ['1', '2', '3', '4', '5', '⌫'], + ['6', '7', '8', '9', '0', 'ABC'], + ['!', '@', '#', '\$', '%'], + ['^', '&', '*', '(', ')'], + ['-', '_', '¥', '.', ','] ], }, 'zh': { KeyboardLayer.alpha: [ - ['啊', '波', '从', '的', '饿', '发', '个', '⌫'], - ['喝', '衣', '机', '卡', '拉', '马', '呢', '123'], - ['哦', '啪', '期', '然', '色', '他', '乌'], + ['啊', '波', '从', '的', '饿', '⌫'], + ['发', '个', '喝', '衣', '机', '123'], + ['卡', '拉', '马', '呢', '哦', '啪'], + ['期', '然', '色', '他', '乌'], ['为', '西', '行', '呀', '月', '子'], ], KeyboardLayer.numericExtra: [ - ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '⌫'], - ['!', '@', '#', '\$', '%', '^', '&', '*', '(', ')', 'ABC'], + ['1', '2', '3', '4', '5', '⌫'], + ['6', '7', '8', '9', '0', 'ABC'], + ['!', '@', '#', '\$', '%'], + ['^', '&', '*', '(', ')'], + ['-', '_', '¥', '·', '…'] ], }, }; diff --git a/lib/widgets/keyboard/slide_in_keyboard.dart b/lib/widgets/keyboard/slide_in_keyboard.dart index 93ad621..94a61b1 100644 --- a/lib/widgets/keyboard/slide_in_keyboard.dart +++ b/lib/widgets/keyboard/slide_in_keyboard.dart @@ -12,7 +12,7 @@ import 'package:fladder/widgets/keyboard/alpha_numeric_keyboard.dart'; ValueNotifier isKeyboardOpen = ValueNotifier(false); -double keyboardWidthFactor = 0.2; +double keyboardWidthFactor = 0.25; class CustomKeyboardWrapper extends StatelessWidget { final Widget child;