setting tab abr long press url copy
This commit is contained in:
@@ -42,7 +42,7 @@ final class BrowserAddonServiceProvider
|
||||
}
|
||||
|
||||
String _$browserAddonServiceHash() =>
|
||||
r'6f07d93576a0816bf1b9e1b36397b89b7cacf43f';
|
||||
r'1485fd056ce32e142e342e920affb82a5c77a370';
|
||||
|
||||
abstract class _$BrowserAddonService extends $Notifier<void> {
|
||||
void build();
|
||||
|
||||
+21
@@ -18,6 +18,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:skeletonizer/skeletonizer.dart';
|
||||
@@ -64,6 +65,7 @@ class CompactAppBarTitle extends ConsumerWidget {
|
||||
isTabTunneled:
|
||||
isTabTuneledAsync.hasValue && isTabTuneledAsync.value == true,
|
||||
showSiteSettingsBadge: showSiteSettingsBadge,
|
||||
longPressUrlCopy: settings.tabBarLongPressUrlCopy,
|
||||
onSiteSettingsTap: () {
|
||||
ref
|
||||
.read(bottomSheetControllerProvider.notifier)
|
||||
@@ -89,6 +91,7 @@ class CompactAppBarTitleView extends StatelessWidget {
|
||||
required this.onSiteSettingsTap,
|
||||
required this.onTitleTap,
|
||||
this.tabIcon,
|
||||
this.longPressUrlCopy = true,
|
||||
});
|
||||
|
||||
final TabState tabState;
|
||||
@@ -97,6 +100,7 @@ class CompactAppBarTitleView extends StatelessWidget {
|
||||
final VoidCallback onSiteSettingsTap;
|
||||
final VoidCallback onTitleTap;
|
||||
final Widget? tabIcon;
|
||||
final bool longPressUrlCopy;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -168,6 +172,13 @@ class CompactAppBarTitleView extends StatelessWidget {
|
||||
style: theme.textTheme.bodyMedium?.copyWith(
|
||||
color: theme.colorScheme.onSurface,
|
||||
),
|
||||
onTooltipTriggered: longPressUrlCopy
|
||||
? () async {
|
||||
await Clipboard.setData(
|
||||
ClipboardData(text: tabState.url.toString()),
|
||||
);
|
||||
}
|
||||
: null,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -209,6 +220,7 @@ class AppBarTitle extends ConsumerWidget {
|
||||
isTabTunneled:
|
||||
isTabTuneledAsync.hasValue && isTabTuneledAsync.value == true,
|
||||
showSiteSettingsBadge: showSiteSettingsBadge,
|
||||
longPressUrlCopy: settings.tabBarLongPressUrlCopy,
|
||||
onSiteSettingsTap: () {
|
||||
ref
|
||||
.read(bottomSheetControllerProvider.notifier)
|
||||
@@ -233,6 +245,7 @@ class AppBarTitleView extends StatelessWidget {
|
||||
required this.showSiteSettingsBadge,
|
||||
required this.onSiteSettingsTap,
|
||||
required this.onTitleTap,
|
||||
required this.longPressUrlCopy,
|
||||
this.tabIcon,
|
||||
});
|
||||
|
||||
@@ -242,6 +255,7 @@ class AppBarTitleView extends StatelessWidget {
|
||||
final VoidCallback onSiteSettingsTap;
|
||||
final VoidCallback onTitleTap;
|
||||
final Widget? tabIcon;
|
||||
final bool longPressUrlCopy;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -333,6 +347,13 @@ class AppBarTitleView extends StatelessWidget {
|
||||
style: theme.textTheme.bodyMedium?.copyWith(
|
||||
color: theme.colorScheme.onSurface,
|
||||
),
|
||||
onTooltipTriggered: longPressUrlCopy
|
||||
? () async {
|
||||
await Clipboard.setData(
|
||||
ClipboardData(text: tabState.url.toString()),
|
||||
);
|
||||
}
|
||||
: null,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -37,6 +37,7 @@ class ToolbarLayoutContent extends StatelessWidget {
|
||||
_TabBarPositionSection(),
|
||||
_TabBarLayoutModeSection(),
|
||||
_AutoHideTabBarTile(),
|
||||
_TabBarLongPressUrlCopyTile(),
|
||||
SettingSection(name: 'Contextual Toolbar'),
|
||||
_ShowContextualTabBarTile(),
|
||||
_CustomizeToolbarButtonsTile(),
|
||||
@@ -423,6 +424,36 @@ class _BottomSheetTabViewTile extends HookConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _TabBarLongPressUrlCopyTile extends HookConsumerWidget {
|
||||
const _TabBarLongPressUrlCopyTile();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final tabBarLongPressUrlCopy = ref.watch(
|
||||
generalSettingsWithDefaultsProvider.select(
|
||||
(s) => s.tabBarLongPressUrlCopy,
|
||||
),
|
||||
);
|
||||
|
||||
return SwitchListTile.adaptive(
|
||||
title: const Text('Long Press URL to Copy'),
|
||||
subtitle: const Text(
|
||||
'Copy the page URL to clipboard when long pressing the address bar',
|
||||
),
|
||||
secondary: const Icon(MdiIcons.contentCopy),
|
||||
value: tabBarLongPressUrlCopy,
|
||||
onChanged: (value) async {
|
||||
await ref
|
||||
.read(saveGeneralSettingsControllerProvider.notifier)
|
||||
.save(
|
||||
(currentSettings) =>
|
||||
currentSettings.copyWith.tabBarLongPressUrlCopy(value),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _TabListShowFaviconsTile extends HookConsumerWidget {
|
||||
const _TabListShowFaviconsTile();
|
||||
|
||||
|
||||
@@ -355,6 +355,7 @@ class _RegularPreviewTitle extends StatelessWidget {
|
||||
onSiteSettingsTap: _noop,
|
||||
onTitleTap: _noop,
|
||||
tabIcon: const Icon(MdiIcons.web, size: 24),
|
||||
longPressUrlCopy: false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -224,7 +224,7 @@ final class SmallWebSessionControllerProvider
|
||||
}
|
||||
|
||||
String _$smallWebSessionControllerHash() =>
|
||||
r'90680807b38de577e3322941b47792952d66428a';
|
||||
r'ee57d24b33b5a7dffe668fe3ddd2b77d84f58eae';
|
||||
|
||||
abstract class _$SmallWebSessionController
|
||||
extends $Notifier<AsyncValue<SmallWebSessionState>> {
|
||||
|
||||
@@ -115,6 +115,7 @@ class GeneralSettings with FastEquatable {
|
||||
final int? urlCleanerLastCheckEpochMs;
|
||||
final bool urlCleanerLastUpdateWasAuto;
|
||||
final TabType smallWebTabType;
|
||||
final bool tabBarLongPressUrlCopy;
|
||||
final bool unshortenerEnabled;
|
||||
final String unshortenerToken;
|
||||
|
||||
@@ -164,6 +165,7 @@ class GeneralSettings with FastEquatable {
|
||||
required this.urlCleanerLastCheckEpochMs,
|
||||
required this.urlCleanerLastUpdateWasAuto,
|
||||
required this.smallWebTabType,
|
||||
required this.tabBarLongPressUrlCopy,
|
||||
required this.unshortenerEnabled,
|
||||
required this.unshortenerToken,
|
||||
});
|
||||
@@ -214,6 +216,7 @@ class GeneralSettings with FastEquatable {
|
||||
this.urlCleanerLastCheckEpochMs,
|
||||
bool? urlCleanerLastUpdateWasAuto,
|
||||
TabType? smallWebTabType,
|
||||
bool? tabBarLongPressUrlCopy,
|
||||
bool? unshortenerEnabled,
|
||||
String? unshortenerToken,
|
||||
}) : themeMode = themeMode ?? ThemeMode.dark,
|
||||
@@ -271,6 +274,7 @@ class GeneralSettings with FastEquatable {
|
||||
urlCleanerAutoUpdate = urlCleanerAutoUpdate ?? false,
|
||||
urlCleanerLastUpdateWasAuto = urlCleanerLastUpdateWasAuto ?? false,
|
||||
smallWebTabType = smallWebTabType ?? TabType.private,
|
||||
tabBarLongPressUrlCopy = tabBarLongPressUrlCopy ?? true,
|
||||
unshortenerEnabled = unshortenerEnabled ?? false,
|
||||
unshortenerToken = unshortenerToken ?? '';
|
||||
|
||||
@@ -341,6 +345,7 @@ class GeneralSettings with FastEquatable {
|
||||
urlCleanerLastCheckEpochMs,
|
||||
urlCleanerLastUpdateWasAuto,
|
||||
smallWebTabType,
|
||||
tabBarLongPressUrlCopy,
|
||||
unshortenerEnabled,
|
||||
unshortenerToken,
|
||||
];
|
||||
|
||||
@@ -115,6 +115,8 @@ abstract class _$GeneralSettingsCWProxy {
|
||||
|
||||
GeneralSettings smallWebTabType(TabType smallWebTabType);
|
||||
|
||||
GeneralSettings tabBarLongPressUrlCopy(bool tabBarLongPressUrlCopy);
|
||||
|
||||
GeneralSettings unshortenerEnabled(bool unshortenerEnabled);
|
||||
|
||||
GeneralSettings unshortenerToken(String unshortenerToken);
|
||||
@@ -172,6 +174,7 @@ abstract class _$GeneralSettingsCWProxy {
|
||||
int? urlCleanerLastCheckEpochMs,
|
||||
bool urlCleanerLastUpdateWasAuto,
|
||||
TabType smallWebTabType,
|
||||
bool tabBarLongPressUrlCopy,
|
||||
bool unshortenerEnabled,
|
||||
String unshortenerToken,
|
||||
});
|
||||
@@ -376,6 +379,10 @@ class _$GeneralSettingsCWProxyImpl implements _$GeneralSettingsCWProxy {
|
||||
GeneralSettings smallWebTabType(TabType smallWebTabType) =>
|
||||
call(smallWebTabType: smallWebTabType);
|
||||
|
||||
@override
|
||||
GeneralSettings tabBarLongPressUrlCopy(bool tabBarLongPressUrlCopy) =>
|
||||
call(tabBarLongPressUrlCopy: tabBarLongPressUrlCopy);
|
||||
|
||||
@override
|
||||
GeneralSettings unshortenerEnabled(bool unshortenerEnabled) =>
|
||||
call(unshortenerEnabled: unshortenerEnabled);
|
||||
@@ -439,6 +446,7 @@ class _$GeneralSettingsCWProxyImpl implements _$GeneralSettingsCWProxy {
|
||||
Object? urlCleanerLastCheckEpochMs = const $CopyWithPlaceholder(),
|
||||
Object? urlCleanerLastUpdateWasAuto = const $CopyWithPlaceholder(),
|
||||
Object? smallWebTabType = const $CopyWithPlaceholder(),
|
||||
Object? tabBarLongPressUrlCopy = const $CopyWithPlaceholder(),
|
||||
Object? unshortenerEnabled = const $CopyWithPlaceholder(),
|
||||
Object? unshortenerToken = const $CopyWithPlaceholder(),
|
||||
}) {
|
||||
@@ -707,6 +715,12 @@ class _$GeneralSettingsCWProxyImpl implements _$GeneralSettingsCWProxy {
|
||||
? _value.smallWebTabType
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: smallWebTabType as TabType,
|
||||
tabBarLongPressUrlCopy:
|
||||
tabBarLongPressUrlCopy == const $CopyWithPlaceholder() ||
|
||||
tabBarLongPressUrlCopy == null
|
||||
? _value.tabBarLongPressUrlCopy
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: tabBarLongPressUrlCopy as bool,
|
||||
unshortenerEnabled:
|
||||
unshortenerEnabled == const $CopyWithPlaceholder() ||
|
||||
unshortenerEnabled == null
|
||||
@@ -826,6 +840,7 @@ GeneralSettings _$GeneralSettingsFromJson(
|
||||
_$TabTypeEnumMap,
|
||||
json['smallWebTabType'],
|
||||
),
|
||||
tabBarLongPressUrlCopy: json['tabBarLongPressUrlCopy'] as bool?,
|
||||
unshortenerEnabled: json['unshortenerEnabled'] as bool?,
|
||||
unshortenerToken: json['unshortenerToken'] as String?,
|
||||
);
|
||||
@@ -889,6 +904,7 @@ Map<String, dynamic> _$GeneralSettingsToJson(
|
||||
'urlCleanerLastCheckEpochMs': instance.urlCleanerLastCheckEpochMs,
|
||||
'urlCleanerLastUpdateWasAuto': instance.urlCleanerLastUpdateWasAuto,
|
||||
'smallWebTabType': _$TabTypeEnumMap[instance.smallWebTabType]!,
|
||||
'tabBarLongPressUrlCopy': instance.tabBarLongPressUrlCopy,
|
||||
'unshortenerEnabled': instance.unshortenerEnabled,
|
||||
'unshortenerToken': instance.unshortenerToken,
|
||||
};
|
||||
|
||||
@@ -200,4 +200,4 @@ final class BackupListProvider
|
||||
}
|
||||
}
|
||||
|
||||
String _$backupListHash() => r'cdce1b5f195f0c9b72132f7da0c9d173dfc119eb';
|
||||
String _$backupListHash() => r'527bfdab7b537b08764ff77dd69de14d38846d41';
|
||||
|
||||
@@ -217,6 +217,10 @@ class GeneralSettingsRepository extends _$GeneralSettingsRepository {
|
||||
DriftSqlType.string,
|
||||
db.typeMapping,
|
||||
),
|
||||
'tabBarLongPressUrlCopy': settings['tabBarLongPressUrlCopy']?.readAs(
|
||||
DriftSqlType.bool,
|
||||
db.typeMapping,
|
||||
),
|
||||
'unshortenerEnabled': settings['unshortenerEnabled']?.readAs(
|
||||
DriftSqlType.bool,
|
||||
db.typeMapping,
|
||||
|
||||
@@ -41,7 +41,7 @@ final class UserBackupServiceProvider
|
||||
}
|
||||
}
|
||||
|
||||
String _$userBackupServiceHash() => r'74cd6fd9818a8350a91b1225d904e23f48bc9e30';
|
||||
String _$userBackupServiceHash() => r'3746ae59d490e25a44815c125f30cd0981de555d';
|
||||
|
||||
abstract class _$UserBackupService extends $Notifier<void> {
|
||||
void build();
|
||||
|
||||
@@ -25,13 +25,21 @@ class UriBreadcrumb extends StatelessWidget {
|
||||
final Uri uri;
|
||||
final Widget? icon;
|
||||
final TextStyle? style;
|
||||
final void Function()? onTooltipTriggered;
|
||||
|
||||
const UriBreadcrumb({super.key, required this.uri, this.icon, this.style});
|
||||
const UriBreadcrumb({
|
||||
super.key,
|
||||
required this.uri,
|
||||
this.icon,
|
||||
this.style,
|
||||
this.onTooltipTriggered,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Tooltip(
|
||||
message: uri.toString(),
|
||||
onTriggered: onTooltipTriggered,
|
||||
child: DefaultTextStyle(
|
||||
style: style ?? DefaultTextStyle.of(context).style,
|
||||
child: FadingScroll(
|
||||
|
||||
Reference in New Issue
Block a user