feat(#553): move 7-tap Experimental unlock from About row to Build row

Follow-up to #509. Settings is post-connect, so About had no availability edge,
and wrapping the About version subtitle fought the About dialog's onTap. The
7-tap unlock now anchors on the Build (BuildInfo.stamp) row in Device Info,
mirroring Android's build-number gesture; About reverts to a plain row. The
countdown/unlock hint renders inline under the Build row.

Co-located on the #524 test branch so the owner tests one APK; will be split
to its own PR off dev at land time. Agent: QuietSnow (session 31eaba02)
pull/556/head
Strycher 2 months ago
parent 9e3500a9a9
commit aaa33c983d

@ -88,7 +88,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
}); });
} }
void _handleVersionTap() { void _handleUnlockTap() {
final l10n = context.l10n; final l10n = context.l10n;
final settingsService = context.read<AppSettingsService>(); final settingsService = context.read<AppSettingsService>();
@ -621,11 +621,25 @@ class _SettingsScreenState extends State<SettingsScreen> {
// #397: identity of the running binary, injected at build time and // #397: identity of the running binary, injected at build time and
// independent of the marketing version. Its own line so "which build // independent of the marketing version. Its own line so "which build
// am I on" is answerable at a glance; copyable for bug reports. // am I on" is answerable at a glance; copyable for bug reports.
// Also the hidden 7-tap Experimental unlock anchor (#509/#553),
// mirroring Android's Software-info build-number gesture.
_buildInfoRow( _buildInfoRow(
l10n.settings_infoBuild, l10n.settings_infoBuild,
BuildInfo.stamp, BuildInfo.stamp,
copyValue: BuildInfo.stamp, copyValue: BuildInfo.stamp,
onTap: _handleUnlockTap,
), ),
if (_versionHint != null)
Padding(
padding: const EdgeInsets.only(top: 2, bottom: 6),
child: Text(
_versionHint!,
style: TextStyle(
fontSize: 12,
color: Theme.of(context).colorScheme.primary,
),
),
),
], ],
), ),
), ),
@ -754,33 +768,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
child: ListTile( child: ListTile(
leading: const Icon(Icons.info_outline), leading: const Icon(Icons.info_outline),
title: Text(l10n.settings_about), title: Text(l10n.settings_about),
// Tapping the version number counts toward the #509 unlock and is subtitle: Text(
// absorbed here; tapping elsewhere on the row still opens the dialog. l10n.settings_aboutVersion(
// Progress is shown inline (below), never as a snackbar. _appVersion.isEmpty ? l10n.common_loading : _appVersion,
subtitle: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: _handleVersionTap,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
l10n.settings_aboutVersion(
_appVersion.isEmpty ? l10n.common_loading : _appVersion,
),
),
if (_versionHint != null)
Padding(
padding: const EdgeInsets.only(top: 2),
child: Text(
_versionHint!,
style: TextStyle(
fontSize: 12,
color: Theme.of(context).colorScheme.primary,
),
),
),
],
), ),
), ),
onTap: () => _showAbout(context), onTap: () => _showAbout(context),

Loading…
Cancel
Save

Powered by TurnKey Linux.