From f18b31042c69eb2a176468c39742b30f4d28bc2b Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Sat, 3 May 2025 23:44:15 +0200 Subject: [PATCH] new search action and sorting of actions --- .../features/geckoview/domain/providers.dart | 26 +++++++++---------- .../api/GeckoBrowserApiImpl.kt | 8 +++++- .../entities/default_selection_actions.dart | 9 +++++++ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/app/lib/features/geckoview/domain/providers.dart b/app/lib/features/geckoview/domain/providers.dart index de3b40ae..71d55487 100644 --- a/app/lib/features/geckoview/domain/providers.dart +++ b/app/lib/features/geckoview/domain/providers.dart @@ -2,6 +2,8 @@ import 'dart:async'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:lensai/core/logger.dart'; +import 'package:lensai/core/providers/router.dart'; +import 'package:lensai/core/routing/routes.dart'; import 'package:lensai/features/bangs/domain/providers/bangs.dart'; import 'package:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/domain/repositories/tab.dart'; @@ -19,6 +21,17 @@ GeckoSelectionActionService selectionActionService(Ref ref) { unawaited( service.setActions([ SearchAction((text) async { + final router = ref.read(routerProvider); + final isCurrentPrivate = + ref.read(selectedTabStateProvider)?.isPrivate ?? false; + final route = SearchRoute( + tabType: isCurrentPrivate ? TabType.private : TabType.regular, + searchText: text, + ); + + await router.push(route.location); + }), + DefaultSearchAction((text) async { final defaultSearchBang = await ref.read( defaultSearchBangDataProvider.future, ); @@ -37,19 +50,6 @@ GeckoSelectionActionService selectionActionService(Ref ref) { logger.e('No default search bang found'); } }), - // PrivateSearchAction((text) async { - // final defaultSearchBang = await ref.read( - // defaultSearchBangDataProvider.future, - // ); - - // if (defaultSearchBang != null) { - // await ref - // .read(tabRepositoryProvider.notifier) - // .addTab(url: defaultSearchBang.getUrl(text), private: true); - // } else { - // logger.e('No default search bang found'); - // } - // }), ShareAction((text) async { await SharePlus.instance.share(ShareParams(text: text)); }), diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoBrowserApiImpl.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoBrowserApiImpl.kt index 17915064..3203f495 100644 --- a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoBrowserApiImpl.kt +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoBrowserApiImpl.kt @@ -109,7 +109,13 @@ class GeckoBrowserApiImpl : GeckoBrowserApi { private fun setupGeckoEngine() { val selectionActionEvents = GeckoSelectionActionEvents(_flutterPluginBinding.binaryMessenger) - val selectionActionDelegate = DefaultSelectionActionDelegate(selectionActionEvents) + val selectionActionDelegate = DefaultSelectionActionDelegate(selectionActionEvents) { actions -> + val processTextAction = "android.intent.action.PROCESS_TEXT" + val withoutProcessText = actions.filter { it != processTextAction }.toTypedArray() + val processTextActions = actions.filter { it == processTextAction }.toTypedArray() + + withoutProcessText + processTextActions + } val readerViewController = ReaderViewController(_flutterPluginBinding.binaryMessenger) diff --git a/packages/flutter_mozilla_components/lib/src/domain/entities/default_selection_actions.dart b/packages/flutter_mozilla_components/lib/src/domain/entities/default_selection_actions.dart index 002a6854..ec25789e 100644 --- a/packages/flutter_mozilla_components/lib/src/domain/entities/default_selection_actions.dart +++ b/packages/flutter_mozilla_components/lib/src/domain/entities/default_selection_actions.dart @@ -33,6 +33,15 @@ class EmailAction extends BaseSelectionAction { ); } +class DefaultSearchAction extends BaseSelectionAction { + DefaultSearchAction(PerformAction action) + : super( + id: 'CUSTOM_CONTEXT_MENU_SEARCH_DEFAULT', + title: 'Web Search', + performAction: action, + ); +} + class SearchAction extends BaseSelectionAction { SearchAction(PerformAction action) : super(