settings to choose default tab types
This commit is contained in:
@@ -32,6 +32,7 @@ import 'package:weblibre/features/geckoview/domain/providers/selected_tab.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/tab_state.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/repositories/tab.dart';
|
||||
import 'package:weblibre/features/geckoview/features/find_in_page/presentation/controllers/find_in_page.dart';
|
||||
import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
|
||||
|
||||
part 'providers.g.dart';
|
||||
|
||||
@@ -43,8 +44,11 @@ GeckoSelectionActionService selectionActionService(Ref ref) {
|
||||
service.setActions([
|
||||
SearchAction((text) async {
|
||||
final router = await ref.read(routerProvider.future);
|
||||
final settings = ref.read(generalSettingsRepositoryProvider);
|
||||
final route = SearchRoute(
|
||||
tabType: ref.read(selectedTabTypeProvider) ?? TabType.regular,
|
||||
tabType:
|
||||
ref.read(selectedTabTypeProvider) ??
|
||||
settings.defaultCreateTabType,
|
||||
searchText: text,
|
||||
);
|
||||
|
||||
@@ -57,13 +61,19 @@ GeckoSelectionActionService selectionActionService(Ref ref) {
|
||||
|
||||
if (defaultSearchBang != null) {
|
||||
final currentTab = ref.read(selectedTabStateProvider);
|
||||
final isPrivate =
|
||||
currentTab?.isPrivate ??
|
||||
ref
|
||||
.read(generalSettingsRepositoryProvider)
|
||||
.defaultCreateTabType ==
|
||||
TabType.private;
|
||||
|
||||
await ref
|
||||
.read(tabRepositoryProvider.notifier)
|
||||
.addTab(
|
||||
url: defaultSearchBang.getTemplateUrl(text),
|
||||
parentId: currentTab?.id,
|
||||
private: currentTab?.isPrivate ?? false,
|
||||
private: isPrivate,
|
||||
);
|
||||
} else {
|
||||
logger.e('No default search bang found');
|
||||
|
||||
@@ -7,7 +7,7 @@ part of 'providers.dart';
|
||||
// **************************************************************************
|
||||
|
||||
String _$selectionActionServiceHash() =>
|
||||
r'ab6aeb105020a16ed24911acd73ba8553e5b3905';
|
||||
r'f356434878b46fd443c8e3a8a48cf07c34a63b70';
|
||||
|
||||
/// See also [selectionActionService].
|
||||
@ProviderFor(selectionActionService)
|
||||
|
||||
@@ -25,6 +25,7 @@ import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||
import 'package:nullability/nullability.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:weblibre/core/logger.dart';
|
||||
import 'package:weblibre/core/routing/routes.dart';
|
||||
import 'package:weblibre/features/bangs/domain/providers/bangs.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/entities/states/tab.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers.dart';
|
||||
@@ -38,6 +39,7 @@ import 'package:weblibre/features/geckoview/features/tabs/domain/providers/selec
|
||||
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/container.dart';
|
||||
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/tab.dart';
|
||||
import 'package:weblibre/features/share_intent/domain/entities/shared_content.dart';
|
||||
import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
|
||||
import 'package:weblibre/utils/debouncer.dart';
|
||||
|
||||
part 'tab.g.dart';
|
||||
@@ -64,7 +66,7 @@ class TabRepository extends _$TabRepository {
|
||||
String? parentId,
|
||||
LoadUrlFlags flags = LoadUrlFlags.NONE,
|
||||
Source source = Internal.newTab,
|
||||
bool private = false,
|
||||
required bool private,
|
||||
HistoryMetadataKey? historyMetadata,
|
||||
Map<String, String>? additionalHeaders,
|
||||
}) async {
|
||||
@@ -222,7 +224,7 @@ class TabRepository extends _$TabRepository {
|
||||
if (availableContainers.isNotEmpty) {
|
||||
//Last resort push new tab to avoid any authenticated tab is selected
|
||||
// ignore: avoid_redundant_argument_values
|
||||
await addTab(selectTab: true);
|
||||
await addTab(selectTab: true, private: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,9 +347,17 @@ class TabRepository extends _$TabRepository {
|
||||
engineBoundIntentStreamProvider,
|
||||
(previous, next) {
|
||||
next.whenData((value) async {
|
||||
final isPrivate =
|
||||
ref
|
||||
.read(generalSettingsRepositoryProvider)
|
||||
.defaultIntentTabType ==
|
||||
TabType.private;
|
||||
|
||||
switch (value) {
|
||||
case SharedUrl():
|
||||
_tabFromIntent.add(await addTab(url: value.url));
|
||||
_tabFromIntent.add(
|
||||
await addTab(url: value.url, private: isPrivate),
|
||||
);
|
||||
case SharedText():
|
||||
final defaultSearchBang =
|
||||
ref.read(selectedBangDataProvider()) ??
|
||||
@@ -356,6 +366,7 @@ class TabRepository extends _$TabRepository {
|
||||
_tabFromIntent.add(
|
||||
await addTab(
|
||||
url: defaultSearchBang?.getTemplateUrl(value.text),
|
||||
private: isPrivate,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ part of 'tab.dart';
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$tabRepositoryHash() => r'4b0dc3bbfd3635398009d655d811a4a35dbfb503';
|
||||
String _$tabRepositoryHash() => r'fccaa6521e1bad7e8b3f82e6d611469348dc8667';
|
||||
|
||||
/// See also [TabRepository].
|
||||
@ProviderFor(TabRepository)
|
||||
|
||||
+17
-1
@@ -207,9 +207,18 @@ class BrowserBottomAppBar extends HookConsumerWidget {
|
||||
),
|
||||
MenuItemButton(
|
||||
onPressed: () async {
|
||||
final isPrivate =
|
||||
ref
|
||||
.read(generalSettingsRepositoryProvider)
|
||||
.defaultCreateTabType ==
|
||||
TabType.private;
|
||||
|
||||
await ref
|
||||
.read(tabRepositoryProvider.notifier)
|
||||
.addTab(url: ref.read(docsUriProvider));
|
||||
.addTab(
|
||||
url: ref.read(docsUriProvider),
|
||||
private: isPrivate,
|
||||
);
|
||||
},
|
||||
leadingIcon: const Icon(Icons.help),
|
||||
child: const Text('Help and feedback'),
|
||||
@@ -257,10 +266,17 @@ class BrowserBottomAppBar extends HookConsumerWidget {
|
||||
),
|
||||
MenuItemButton(
|
||||
onPressed: () async {
|
||||
final isPrivate =
|
||||
ref
|
||||
.read(generalSettingsRepositoryProvider)
|
||||
.defaultCreateTabType ==
|
||||
TabType.private;
|
||||
|
||||
await ref
|
||||
.read(tabRepositoryProvider.notifier)
|
||||
.addTab(
|
||||
url: Uri.parse('https://addons.mozilla.org'),
|
||||
private: isPrivate,
|
||||
);
|
||||
},
|
||||
leadingIcon: const Icon(MdiIcons.puzzlePlus),
|
||||
|
||||
+4
-1
@@ -313,13 +313,16 @@ class _BrowserViewState extends ConsumerState<BrowserView>
|
||||
widget.suggestionTimeout) {
|
||||
//Don't do anything if a child route is active
|
||||
if (GoRouterState.of(context).topRoute?.name == BrowserRoute.name) {
|
||||
final settings = ref.read(generalSettingsRepositoryProvider);
|
||||
|
||||
unawaited(
|
||||
showSuggestNewTabMessage(
|
||||
context,
|
||||
onAdd: (searchText) async {
|
||||
await SearchRoute(
|
||||
tabType:
|
||||
ref.read(selectedTabTypeProvider) ?? TabType.regular,
|
||||
ref.read(selectedTabTypeProvider) ??
|
||||
settings.defaultCreateTabType,
|
||||
searchText: searchText ?? SearchRoute.emptySearchText,
|
||||
).push(context);
|
||||
},
|
||||
|
||||
+1
-1
@@ -215,7 +215,7 @@ class ViewTabSheetWidget extends HookConsumerWidget {
|
||||
onTap: () async {
|
||||
final tabId = await ref
|
||||
.read(tabRepositoryProvider.notifier)
|
||||
.addTab(url: initialTabState.url);
|
||||
.addTab(url: initialTabState.url, private: false);
|
||||
|
||||
if (context.mounted) {
|
||||
//save reference before pop `ref` gets disposed
|
||||
|
||||
+10
-2
@@ -605,8 +605,12 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
|
||||
),
|
||||
child: FloatingActionButton.small(
|
||||
onPressed: () async {
|
||||
final settings = ref.read(generalSettingsRepositoryProvider);
|
||||
|
||||
await SearchRoute(
|
||||
tabType: ref.read(selectedTabTypeProvider) ?? TabType.regular,
|
||||
tabType:
|
||||
ref.read(selectedTabTypeProvider) ??
|
||||
settings.defaultCreateTabType,
|
||||
).push(context);
|
||||
|
||||
onClose();
|
||||
@@ -782,8 +786,12 @@ class ViewTabTreesSheetWidget extends HookConsumerWidget {
|
||||
),
|
||||
child: FloatingActionButton.small(
|
||||
onPressed: () async {
|
||||
final settings = ref.read(generalSettingsRepositoryProvider);
|
||||
|
||||
await SearchRoute(
|
||||
tabType: ref.read(selectedTabTypeProvider) ?? TabType.regular,
|
||||
tabType:
|
||||
ref.read(selectedTabTypeProvider) ??
|
||||
settings.defaultCreateTabType,
|
||||
).push(context);
|
||||
|
||||
onClose();
|
||||
|
||||
+7
-1
@@ -22,9 +22,11 @@ import 'package:flutter_material_design_icons/flutter_material_design_icons.dart
|
||||
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:weblibre/core/routing/routes.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/tab_state.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/repositories/tab.dart';
|
||||
import 'package:weblibre/features/geckoview/features/contextmenu/extensions/hit_result.dart';
|
||||
import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
|
||||
import 'package:weblibre/utils/ui_helper.dart';
|
||||
|
||||
class OpenImageInNewTab extends HookConsumerWidget {
|
||||
@@ -43,6 +45,10 @@ class OpenImageInNewTab extends HookConsumerWidget {
|
||||
title: const Text('Open image in new tab'),
|
||||
onTap: () async {
|
||||
final currentTab = ref.read(selectedTabStateProvider);
|
||||
final isPrivate =
|
||||
currentTab?.isPrivate ??
|
||||
ref.read(generalSettingsRepositoryProvider).defaultCreateTabType ==
|
||||
TabType.private;
|
||||
|
||||
final tabId = await ref
|
||||
.read(tabRepositoryProvider.notifier)
|
||||
@@ -50,7 +56,7 @@ class OpenImageInNewTab extends HookConsumerWidget {
|
||||
url: hitResult.tryGetLink(),
|
||||
parentId: currentTab?.id,
|
||||
selectTab: false,
|
||||
private: currentTab?.isPrivate ?? false,
|
||||
private: isPrivate,
|
||||
);
|
||||
|
||||
if (context.mounted) {
|
||||
|
||||
+7
-1
@@ -22,9 +22,11 @@ import 'package:flutter_material_design_icons/flutter_material_design_icons.dart
|
||||
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:weblibre/core/routing/routes.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/providers/tab_state.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/repositories/tab.dart';
|
||||
import 'package:weblibre/features/geckoview/features/contextmenu/extensions/hit_result.dart';
|
||||
import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
|
||||
import 'package:weblibre/utils/ui_helper.dart';
|
||||
|
||||
class OpenInNewTab extends HookConsumerWidget {
|
||||
@@ -43,6 +45,10 @@ class OpenInNewTab extends HookConsumerWidget {
|
||||
title: const Text('Open in new tab'),
|
||||
onTap: () async {
|
||||
final currentTab = ref.read(selectedTabStateProvider);
|
||||
final isPrivate =
|
||||
currentTab?.isPrivate ??
|
||||
ref.read(generalSettingsRepositoryProvider).defaultCreateTabType ==
|
||||
TabType.private;
|
||||
|
||||
final tabId = await ref
|
||||
.read(tabRepositoryProvider.notifier)
|
||||
@@ -50,7 +56,7 @@ class OpenInNewTab extends HookConsumerWidget {
|
||||
url: hitResult.tryGetLink(),
|
||||
parentId: currentTab?.id,
|
||||
selectTab: false,
|
||||
private: currentTab?.isPrivate ?? false,
|
||||
private: isPrivate,
|
||||
);
|
||||
|
||||
if (context.mounted) {
|
||||
|
||||
Reference in New Issue
Block a user