From 9b622f941ca3073c29e896c1485e6723b37c33de Mon Sep 17 00:00:00 2001 From: zarzet <42882290+zarzet@users.noreply.github.com> Date: Sun, 18 Oct 2026 03:11:44 +0700 Subject: [PATCH] chore(settings): clarify beta features and playback information --- lib/l10n/arb/app_en.arb | 10 ++++++- lib/l10n/arb/app_id.arb | 4 ++- lib/screens/equalizer_screen.dart | 26 +++++++++++++---- lib/screens/settings/about_page.dart | 14 ++++----- .../settings/playback_settings_page.dart | 29 +++---------------- lib/widgets/beta_badge.dart | 26 +++++++++++++++++ 6 files changed, 69 insertions(+), 40 deletions(-) create mode 100644 lib/widgets/beta_badge.dart diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 4a77eda3..3b7f474a 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -758,6 +758,14 @@ "@aboutTelegramChatSubtitle": { "description": "Subtitle for Telegram chat" }, + "aboutTelegramBeta": "SpotiFLAC Mobile Beta", + "@aboutTelegramBeta": { + "description": "Link to the Telegram group that shares internal beta builds" + }, + "aboutTelegramBetaSubtitle": "Join for the latest internal beta builds", + "@aboutTelegramBetaSubtitle": { + "description": "Subtitle for the Telegram beta group link" + }, "aboutSocial": "Social", "@aboutSocial": { "description": "Section for social links" @@ -6611,7 +6619,7 @@ "@libraryExternalPlayer": { "description": "Setting option to use an external music player" }, - "libraryExternalPlayerSubtitle": "Recommended for listening, best quality, gapless playback, EQ, and wider format support", + "libraryExternalPlayerSubtitle": "Open tracks in another music app on your device", "@libraryExternalPlayerSubtitle": { "description": "Subtitle for external player option" }, diff --git a/lib/l10n/arb/app_id.arb b/lib/l10n/arb/app_id.arb index ed57fd5a..4f897ce7 100644 --- a/lib/l10n/arb/app_id.arb +++ b/lib/l10n/arb/app_id.arb @@ -780,6 +780,8 @@ "@aboutTelegramChatSubtitle": { "description": "Subtitle for Telegram chat" }, + "aboutTelegramBeta": "SpotiFLAC Mobile Beta", + "aboutTelegramBetaSubtitle": "Gabung untuk build beta internal terbaru", "aboutSocial": "Media Sosial", "@aboutSocial": { "description": "Section for social links" @@ -6633,7 +6635,7 @@ "@libraryExternalPlayer": { "description": "Setting option to use an external music player" }, - "libraryExternalPlayerSubtitle": "Bagus untuk mendengarkan harian, kualitas terbaik, pemutaran lancar, EQ, dan dukungan format luas", + "libraryExternalPlayerSubtitle": "Buka lagu di aplikasi musik lain di perangkatmu", "@libraryExternalPlayerSubtitle": { "description": "Subtitle for external player option" }, diff --git a/lib/screens/equalizer_screen.dart b/lib/screens/equalizer_screen.dart index 53df1ebb..6bdf1fa2 100644 --- a/lib/screens/equalizer_screen.dart +++ b/lib/screens/equalizer_screen.dart @@ -23,6 +23,7 @@ import 'package:spotiflac_android/widgets/app_slider.dart'; import 'package:spotiflac_android/widgets/app_sliver_header.dart'; import 'package:spotiflac_android/widgets/app_switch.dart'; import 'package:spotiflac_android/widgets/app_text_field.dart'; +import 'package:spotiflac_android/widgets/beta_badge.dart'; import 'package:spotiflac_android/widgets/expressive_button.dart'; import 'package:spotiflac_android/widgets/expressive_icon_button.dart'; import 'package:spotiflac_android/widgets/mornye_chrome.dart'; @@ -237,6 +238,7 @@ class _EqualizerScreenState extends ConsumerState { SettingsSwitchItem( icon: Icons.graphic_eq, title: l10n.equalizerEnable, + titleTrailing: const BetaBadge(), value: settings.enabled, onChanged: setEnabled, showDivider: false, @@ -660,12 +662,24 @@ class _EqualizerOverview extends StatelessWidget { ), ), SizedBox(height: tokens.gapXs), - Text( - '${settings.gains.length} ${l10n.equalizerBands.toLowerCase()} · ${l10n.equalizerPreamp} ${_signed(settings.inputGain)} dB', - style: theme.textTheme.bodyMedium?.copyWith( - color: colors.onSurfaceVariant, - fontFeatures: const [FontFeature.tabularFigures()], - ), + Row( + children: [ + const BetaBadge(), + const SizedBox(width: 8), + Flexible( + child: Text( + '${settings.gains.length} ${l10n.equalizerBands.toLowerCase()} · ${l10n.equalizerPreamp} ${_signed(settings.inputGain)} dB', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: theme.textTheme.bodyMedium?.copyWith( + color: colors.onSurfaceVariant, + fontFeatures: const [ + FontFeature.tabularFigures(), + ], + ), + ), + ), + ], ), ], ), diff --git a/lib/screens/settings/about_page.dart b/lib/screens/settings/about_page.dart index a8830848..5e51d067 100644 --- a/lib/screens/settings/about_page.dart +++ b/lib/screens/settings/about_page.dart @@ -185,13 +185,6 @@ class AboutPage extends StatelessWidget { onTap: () => _launchUrl(AppInfo.originalGithubUrl), showDivider: true, ), - _AboutSettingsItem( - icon: Icons.campaign_outlined, - title: context.l10n.aboutKeepAndroidOpen, - subtitle: 'keepandroidopen.org', - onTap: () => _launchUrl('https://keepandroidopen.org/'), - showDivider: true, - ), _AboutSettingsItem( icon: Icons.bug_report_outlined, title: context.l10n.aboutReportIssue, @@ -229,6 +222,13 @@ class AboutPage extends StatelessWidget { title: context.l10n.aboutTelegramChat, subtitle: context.l10n.aboutTelegramChatSubtitle, onTap: () => _launchUrl('https://t.me/spotiflac_chat'), + showDivider: true, + ), + _AboutSettingsItem( + icon: Icons.science_outlined, + title: context.l10n.aboutTelegramBeta, + subtitle: context.l10n.aboutTelegramBetaSubtitle, + onTap: () => _launchUrl('https://t.me/+GUncjI1DB1w0N2Y1'), showDivider: false, ), ], diff --git a/lib/screens/settings/playback_settings_page.dart b/lib/screens/settings/playback_settings_page.dart index 6b6296b5..d21a3606 100644 --- a/lib/screens/settings/playback_settings_page.dart +++ b/lib/screens/settings/playback_settings_page.dart @@ -13,6 +13,7 @@ import 'package:spotiflac_android/widgets/animation_utils.dart'; import 'package:spotiflac_android/widgets/app_alert_dialog.dart'; import 'package:spotiflac_android/widgets/app_icon.dart'; import 'package:spotiflac_android/widgets/app_sliver_header.dart'; +import 'package:spotiflac_android/widgets/beta_badge.dart'; import 'package:spotiflac_android/widgets/player_volume_control.dart'; import 'package:spotiflac_android/widgets/settings_group.dart'; import 'package:spotiflac_android/widgets/discord_presence_settings.dart'; @@ -126,6 +127,7 @@ class _PlaybackSettingsPageState extends ConsumerState { SettingsItem( icon: Icons.equalizer, title: context.l10n.equalizerTitle, + titleTrailing: const BetaBadge(), subtitle: context.l10n.equalizerDescription, onTap: () => Navigator.of(context).push( MaterialPageRoute(builder: (_) => const EqualizerScreen()), @@ -321,7 +323,7 @@ class _PlaybackSettingsPageState extends ConsumerState { builder: (context, status, _) => SettingsSwitchItem( icon: Icons.usb, title: context.l10n.usbBitPerfect, - titleTrailing: const _PlaybackBetaBadge(), + titleTrailing: const BetaBadge(), subtitle: [ context.l10n.usbBitPerfectDescription, if (settings.usbBitPerfect) @@ -447,7 +449,7 @@ class _PlaybackSettingsPageState extends ConsumerState { SettingsSwitchItem( icon: Icons.headphones, title: context.l10n.dapExclusive, - titleTrailing: const _PlaybackBetaBadge(), + titleTrailing: const BetaBadge(), subtitle: context.l10n.dapExclusiveDescription, value: settings.dapExclusive, onChanged: (value) => ref @@ -486,26 +488,3 @@ class _PlaybackSettingsPageState extends ConsumerState { ); } } - -class _PlaybackBetaBadge extends StatelessWidget { - const _PlaybackBetaBadge(); - - @override - Widget build(BuildContext context) { - final colors = Theme.of(context).colorScheme; - return Container( - padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 2), - decoration: BoxDecoration( - color: colors.surfaceContainerHighest, - borderRadius: BorderRadius.circular(6), - ), - child: Text( - 'Beta', - style: Theme.of(context).textTheme.labelSmall?.copyWith( - color: colors.onSurfaceVariant, - fontWeight: FontWeight.w600, - ), - ), - ); - } -} diff --git a/lib/widgets/beta_badge.dart b/lib/widgets/beta_badge.dart new file mode 100644 index 00000000..5e88c9a1 --- /dev/null +++ b/lib/widgets/beta_badge.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; + +/// A small tonal tag marking a feature that is still in beta. +class BetaBadge extends StatelessWidget { + const BetaBadge({super.key}); + + @override + Widget build(BuildContext context) { + final colors = Theme.of(context).colorScheme; + return Container( + padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 2), + decoration: BoxDecoration( + color: colors.surfaceContainerHighest, + borderRadius: BorderRadius.circular(6), + ), + child: Text( + 'Beta', + style: Theme.of(context).textTheme.labelSmall?.copyWith( + // onSurfaceVariant falls under 4.5:1 on Mornye's container tones. + color: colors.onSurface, + fontWeight: FontWeight.w600, + ), + ), + ); + } +}