From 23071bb7b1e57142278b959cd7b9506a7873ee65 Mon Sep 17 00:00:00 2001 From: cogwheel0 <172976095+cogwheel0@users.noreply.github.com> Date: Fri, 17 Oct 2025 15:09:37 +0530 Subject: [PATCH] refactor: Simplify platform-specific icon handling in AppCustomizationPage and ProfilePage - Replaced direct platform checks with a utility method `UiUtils.platformIcon` for better readability and maintainability. - Updated localization strings for app customization to enhance clarity and consistency across multiple languages. - Adjusted icon colors in the UI to ensure proper theming and visual consistency. --- .../profile/views/app_customization_page.dart | 47 +++++++++++++------ lib/features/profile/views/profile_page.dart | 22 ++++----- lib/l10n/app_de.arb | 6 +-- lib/l10n/app_en.arb | 6 +-- lib/l10n/app_es.arb | 6 +-- lib/l10n/app_fr.arb | 6 +-- lib/l10n/app_it.arb | 6 +-- lib/l10n/app_localizations.dart | 6 +-- lib/l10n/app_localizations_de.dart | 6 +-- lib/l10n/app_localizations_en.dart | 7 +-- lib/l10n/app_localizations_fr.dart | 7 ++- lib/l10n/app_localizations_it.dart | 7 ++- lib/l10n/app_nl.arb | 8 ++-- lib/l10n/app_ru.arb | 8 ++-- lib/l10n/app_zh.arb | 6 +-- 15 files changed, 85 insertions(+), 69 deletions(-) diff --git a/lib/features/profile/views/app_customization_page.dart b/lib/features/profile/views/app_customization_page.dart index 1c32497..9ab4ea1 100644 --- a/lib/features/profile/views/app_customization_page.dart +++ b/lib/features/profile/views/app_customization_page.dart @@ -508,7 +508,10 @@ class AppCustomizationPage extends ConsumerWidget { _CustomizationTile( leading: _buildIconBadge( context, - Platform.isIOS ? CupertinoIcons.speaker_3 : Icons.record_voice_over, + UiUtils.platformIcon( + ios: CupertinoIcons.speaker_3, + android: Icons.record_voice_over, + ), color: theme.buttonPrimary, ), title: l10n.ttsVoice, @@ -523,7 +526,10 @@ class AppCustomizationPage extends ConsumerWidget { _buildSliderTile( context, ref, - icon: Platform.isIOS ? CupertinoIcons.speedometer : Icons.speed, + icon: UiUtils.platformIcon( + ios: CupertinoIcons.speedometer, + android: Icons.speed, + ), title: l10n.ttsSpeechRate, value: settings.ttsSpeechRate, min: 0.25, @@ -538,7 +544,10 @@ class AppCustomizationPage extends ConsumerWidget { _buildSliderTile( context, ref, - icon: Platform.isIOS ? CupertinoIcons.waveform : Icons.graphic_eq, + icon: UiUtils.platformIcon( + ios: CupertinoIcons.waveform, + android: Icons.graphic_eq, + ), title: l10n.ttsPitch, value: settings.ttsPitch, min: 0.5, @@ -553,7 +562,10 @@ class AppCustomizationPage extends ConsumerWidget { _buildSliderTile( context, ref, - icon: Platform.isIOS ? CupertinoIcons.volume_up : Icons.volume_up, + icon: UiUtils.platformIcon( + ios: CupertinoIcons.volume_up, + android: Icons.volume_up, + ), title: l10n.ttsVolume, value: settings.ttsVolume, min: 0.0, @@ -568,8 +580,11 @@ class AppCustomizationPage extends ConsumerWidget { _CustomizationTile( leading: _buildIconBadge( context, - Platform.isIOS ? CupertinoIcons.play_fill : Icons.play_arrow, - color: theme.buttonSecondary, + UiUtils.platformIcon( + ios: CupertinoIcons.play_fill, + android: Icons.play_arrow, + ), + color: theme.buttonPrimary, ), title: l10n.ttsPreview, subtitle: l10n.ttsPreviewText, @@ -599,7 +614,7 @@ class AppCustomizationPage extends ConsumerWidget { children: [ Row( children: [ - _buildIconBadge(context, icon, color: theme.buttonSecondary), + _buildIconBadge(context, icon, color: theme.buttonPrimary), const SizedBox(width: Spacing.sm), Expanded( child: Text( @@ -746,10 +761,11 @@ class AppCustomizationPage extends ConsumerWidget { // System Default Option ListTile( leading: Icon( - Platform.isIOS - ? CupertinoIcons.speaker_3 - : Icons.record_voice_over, - color: theme.iconPrimary, + UiUtils.platformIcon( + ios: CupertinoIcons.speaker_3, + android: Icons.record_voice_over, + ), + color: theme.textPrimary, ), title: Text( l10n.ttsSystemDefault, @@ -846,10 +862,11 @@ class AppCustomizationPage extends ConsumerWidget { return ListTile( leading: Icon( - Platform.isIOS - ? CupertinoIcons.person_fill - : Icons.person, - color: theme.iconSecondary, + UiUtils.platformIcon( + ios: CupertinoIcons.person_fill, + android: Icons.person, + ), + color: theme.textPrimary, ), title: Text( displayName, diff --git a/lib/features/profile/views/profile_page.dart b/lib/features/profile/views/profile_page.dart index dfaf8db..4dc0f3a 100644 --- a/lib/features/profile/views/profile_page.dart +++ b/lib/features/profile/views/profile_page.dart @@ -160,17 +160,6 @@ class ProfilePage extends ConsumerWidget { TextStyle(color: theme.textSecondary); final supportTiles = [ - _buildSupportOption( - context, - icon: UiUtils.platformIcon( - ios: CupertinoIcons.heart, - android: Icons.favorite_border, - ), - title: AppLocalizations.of(context)!.githubSponsorsTitle, - subtitle: AppLocalizations.of(context)!.githubSponsorsSubtitle, - url: _githubSponsorsUrl, - color: theme.success, - ), _buildSupportOption( context, icon: UiUtils.platformIcon( @@ -182,6 +171,17 @@ class ProfilePage extends ConsumerWidget { url: _buyMeACoffeeUrl, color: theme.warning, ), + _buildSupportOption( + context, + icon: UiUtils.platformIcon( + ios: CupertinoIcons.heart, + android: Icons.favorite_border, + ), + title: AppLocalizations.of(context)!.githubSponsorsTitle, + subtitle: AppLocalizations.of(context)!.githubSponsorsSubtitle, + url: _githubSponsorsUrl, + color: theme.success, + ), ]; return Column( diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 3bb3b35..71239e4 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -236,7 +236,7 @@ "deleteFolderTitle": "Ordner löschen", "deleteFolderMessage": "Dieser Ordner und seine Zuordnungen werden entfernt.", "failedToDeleteFolder": "Ordner konnte nicht gelöscht werden", - "aboutApp": "Über die App", + "aboutApp": "Über", "aboutAppSubtitle": "Conduit Informationen und Links", "web": "Web", "imageGen": "Bild-Gen", @@ -310,8 +310,8 @@ "placeholders": {"duration": {"type": "String", "example": "3 s"}} } , - "appCustomization": "App-Anpassung", - "appCustomizationSubtitle": "Personalisieren, wie Namen und UI angezeigt werden", + "appCustomization": "Anpassung", + "appCustomizationSubtitle": "Design, Sprache, Stimme und Quick Pills", "quickActionsDescription": "Wähle bis zu zwei Schnellzugriffe, die neben dem Eingabefeld angepinnt werden", "chatSettings": "Chat", "sendOnEnter": "Mit Enter senden", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index b61c28b..b3904a0 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -501,7 +501,7 @@ "@deleteFolderMessage": {"description": "Warning that deleting a folder will remove it and its associations."}, "failedToDeleteFolder": "Failed to delete folder", "@failedToDeleteFolder": {"description": "Error notice when deleting a folder fails."}, - "aboutApp": "About App", + "aboutApp": "About", "@aboutApp": {"description": "Settings tile title to view app information."}, "aboutAppSubtitle": "Conduit information and links", "@aboutAppSubtitle": {"description": "Subtitle/description for the About section."}, @@ -636,9 +636,9 @@ "placeholders": {"duration": {"type": "String", "example": "3s"}} } , - "appCustomization": "App Customization", + "appCustomization": "Customization", "@appCustomization": {"description": "Title of the customization settings page."}, - "appCustomizationSubtitle": "Personalize how names and UI display", + "appCustomizationSubtitle": "Theme, language, voice, and quickpills", "@appCustomizationSubtitle": {"description": "Subtitle shown under App Customization tile and page header."}, "quickActionsDescription": "Pick up to two shortcuts to pin near the composer", "@quickActionsDescription": {"description": "Helper text explaining quick action pill selection in customization."}, diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 502902a..d5e921d 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -233,7 +233,7 @@ "deleteFolderTitle": "Eliminar carpeta", "deleteFolderMessage": "Esta carpeta y sus referencias de asignación se eliminarán.", "failedToDeleteFolder": "No se pudo eliminar la carpeta", - "aboutApp": "Acerca de la aplicación", + "aboutApp": "Acerca de", "aboutAppSubtitle": "Información y enlaces de Conduit", "web": "Web", "imageGen": "Generación de imágenes", @@ -303,8 +303,8 @@ "description": "Muestra cuánto tiempo el asistente estuvo pensando antes de responder.", "placeholders": {"duration": {"type": "String", "example": "3s"}} }, - "appCustomization": "Personalización de la aplicación", - "appCustomizationSubtitle": "Personaliza cómo se muestran los nombres y la interfaz", + "appCustomization": "Personalización", + "appCustomizationSubtitle": "Tema, idioma, voz y quickpills", "quickActionsDescription": "Elige hasta dos accesos directos para anclar cerca del compositor", "chatSettings": "Conversación", "sendOnEnter": "Enviar con Enter", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index f12f453..f6d9c15 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -236,7 +236,7 @@ "deleteFolderTitle": "Supprimer le dossier", "deleteFolderMessage": "Ce dossier et ses associations seront supprimés.", "failedToDeleteFolder": "Échec de la suppression du dossier", - "aboutApp": "À propos de l’application", + "aboutApp": "À propos", "aboutAppSubtitle": "Informations et liens Conduit", "web": "Web", "imageGen": "Gén. image", @@ -310,8 +310,8 @@ "placeholders": {"duration": {"type": "String", "example": "3 s"}} } , - "appCustomization": "Personnalisation de l'app", - "appCustomizationSubtitle": "Personnalisez l'affichage des noms et de l'UI", + "appCustomization": "Personnalisation", + "appCustomizationSubtitle": "Thème, langue, voix et quickpills", "quickActionsDescription": "Choisissez jusqu'à deux raccourcis à épingler près du champ de saisie", "chatSettings": "Discussion", "sendOnEnter": "Envoyer avec Entrée", diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 16514b0..8c22ecf 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -236,7 +236,7 @@ "deleteFolderTitle": "Elimina cartella", "deleteFolderMessage": "Questa cartella e le sue associazioni verranno rimosse.", "failedToDeleteFolder": "Impossibile eliminare la cartella", - "aboutApp": "Informazioni sull’app", + "aboutApp": "Informazioni", "aboutAppSubtitle": "Informazioni e link di Conduit", "web": "Web", "imageGen": "Gen. immagini", @@ -310,8 +310,8 @@ "placeholders": {"duration": {"type": "String", "example": "3 s"}} } , - "appCustomization": "Personalizzazione app", - "appCustomizationSubtitle": "Personalizza la visualizzazione dei nomi e dell'UI", + "appCustomization": "Personalizzazione", + "appCustomizationSubtitle": "Tema, lingua, voce e quickpills", "quickActionsDescription": "Scegli fino a due scorciatoie da fissare vicino al campo di input", "chatSettings": "Chat", "sendOnEnter": "Invia con Invio", diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index d32aa46..629ee3b 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -1361,7 +1361,7 @@ abstract class AppLocalizations { /// Settings tile title to view app information. /// /// In en, this message translates to: - /// **'About App'** + /// **'About'** String get aboutApp; /// Subtitle/description for the About section. @@ -1685,13 +1685,13 @@ abstract class AppLocalizations { /// Title of the customization settings page. /// /// In en, this message translates to: - /// **'App Customization'** + /// **'Customization'** String get appCustomization; /// Subtitle shown under App Customization tile and page header. /// /// In en, this message translates to: - /// **'Personalize how names and UI display'** + /// **'Theme, language, voice, and quickpills'** String get appCustomizationSubtitle; /// Helper text explaining quick action pill selection in customization. diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 2d79ceb..ebc9440 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -692,7 +692,7 @@ class AppLocalizationsDe extends AppLocalizations { String get failedToDeleteFolder => 'Ordner konnte nicht gelöscht werden'; @override - String get aboutApp => 'Über die App'; + String get aboutApp => 'Über'; @override String get aboutAppSubtitle => 'Conduit Informationen und Links'; @@ -875,11 +875,11 @@ class AppLocalizationsDe extends AppLocalizations { } @override - String get appCustomization => 'App-Anpassung'; + String get appCustomization => 'Anpassung'; @override String get appCustomizationSubtitle => - 'Personalisieren, wie Namen und UI angezeigt werden'; + 'Design, Sprache, Stimme und Quick Pills'; @override String get quickActionsDescription => diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 5a13c21..7ade408 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -687,7 +687,7 @@ class AppLocalizationsEn extends AppLocalizations { String get failedToDeleteFolder => 'Failed to delete folder'; @override - String get aboutApp => 'About App'; + String get aboutApp => 'About'; @override String get aboutAppSubtitle => 'Conduit information and links'; @@ -868,10 +868,11 @@ class AppLocalizationsEn extends AppLocalizations { } @override - String get appCustomization => 'App Customization'; + String get appCustomization => 'Customization'; @override - String get appCustomizationSubtitle => 'Personalize how names and UI display'; + String get appCustomizationSubtitle => + 'Theme, language, voice, and quickpills'; @override String get quickActionsDescription => diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 1f3957a..f751b34 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -697,7 +697,7 @@ class AppLocalizationsFr extends AppLocalizations { String get failedToDeleteFolder => 'Échec de la suppression du dossier'; @override - String get aboutApp => 'À propos de l’application'; + String get aboutApp => 'À propos'; @override String get aboutAppSubtitle => 'Informations et liens Conduit'; @@ -883,11 +883,10 @@ class AppLocalizationsFr extends AppLocalizations { } @override - String get appCustomization => 'Personnalisation de l\'app'; + String get appCustomization => 'Personnalisation'; @override - String get appCustomizationSubtitle => - 'Personnalisez l\'affichage des noms et de l\'UI'; + String get appCustomizationSubtitle => 'Thème, langue, voix et quickpills'; @override String get quickActionsDescription => diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart index f50f1d8..28aec9c 100644 --- a/lib/l10n/app_localizations_it.dart +++ b/lib/l10n/app_localizations_it.dart @@ -690,7 +690,7 @@ class AppLocalizationsIt extends AppLocalizations { String get failedToDeleteFolder => 'Impossibile eliminare la cartella'; @override - String get aboutApp => 'Informazioni sull’app'; + String get aboutApp => 'Informazioni'; @override String get aboutAppSubtitle => 'Informazioni e link di Conduit'; @@ -872,11 +872,10 @@ class AppLocalizationsIt extends AppLocalizations { } @override - String get appCustomization => 'Personalizzazione app'; + String get appCustomization => 'Personalizzazione'; @override - String get appCustomizationSubtitle => - 'Personalizza la visualizzazione dei nomi e dell\'UI'; + String get appCustomizationSubtitle => 'Tema, lingua, voce e quickpills'; @override String get quickActionsDescription => diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 276f129..91073a6 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -233,8 +233,8 @@ "deleteFolderTitle": "Map verwijderen", "deleteFolderMessage": "Deze map en zijn toewijzingen worden verwijderd.", "failedToDeleteFolder": "Kan map niet verwijderen", - "aboutApp": "Over de app", - "aboutAppSubtitle": "Conduit-informatie en links", + "aboutApp": "Over", + "aboutAppSubtitle": "Conduit informatie en links", "web": "Web", "imageGen": "Afbeeldingsgeneratie", "pinned": "Vastgepind", @@ -303,8 +303,8 @@ "description": "Toont hoe lang de assistent dacht voordat hij antwoordde.", "placeholders": {"duration": {"type": "String", "example": "3s"}} }, - "appCustomization": "App-aanpassing", - "appCustomizationSubtitle": "Personaliseer hoe namen en UI worden weergegeven", + "appCustomization": "Aanpassing", + "appCustomizationSubtitle": "Thema, taal, stem en quickpills", "quickActionsDescription": "Kies maximaal twee snelkoppelingen om vast te pinnen bij de composer", "chatSettings": "Chat", "sendOnEnter": "Verzenden met Enter", diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 33ebad2..2a89e37 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -233,8 +233,8 @@ "deleteFolderTitle": "Удалить папку", "deleteFolderMessage": "Эта папка и ее ссылки будут удалены.", "failedToDeleteFolder": "Не удалось удалить папку", - "aboutApp": "О приложении", - "aboutAppSubtitle": "Информация о Conduit и ссылки", + "aboutApp": "О", + "aboutAppSubtitle": "Информация и ссылки Conduit", "web": "Веб", "imageGen": "Генерация изображений", "pinned": "Закреплено", @@ -303,8 +303,8 @@ "description": "Показывает, сколько времени ассистент думал перед ответом.", "placeholders": {"duration": {"type": "String", "example": "3с"}} }, - "appCustomization": "Настройка приложения", - "appCustomizationSubtitle": "Персонализируйте отображение имен и интерфейса", + "appCustomization": "Настройка", + "appCustomizationSubtitle": "Тема, язык, голос и quickpills", "quickActionsDescription": "Выберите до двух ярлыков для закрепления рядом с полем ввода", "chatSettings": "Чат", "sendOnEnter": "Отправка по Enter", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index e4b20d0..cb31a55 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -233,7 +233,7 @@ "deleteFolderTitle": "删除文件夹", "deleteFolderMessage": "此文件夹及其分配引用将被删除。", "failedToDeleteFolder": "无法删除文件夹", - "aboutApp": "关于应用", + "aboutApp": "关于", "aboutAppSubtitle": "Conduit 信息和链接", "web": "网页", "imageGen": "图像生成", @@ -303,8 +303,8 @@ "description": "显示助手在回复前思考了多长时间。", "placeholders": {"duration": {"type": "String", "example": "3s"}} }, - "appCustomization": "应用自定义", - "appCustomizationSubtitle": "个性化名称和 UI 显示", + "appCustomization": "自定义", + "appCustomizationSubtitle": "主题、语言、语音和 quickpills", "quickActionsDescription": "选择最多两个快捷方式以固定在撰写器附近", "chatSettings": "对话", "sendOnEnter": "回车发送",