Files
cromite/build/patches/Customize-selection-popup.patch

600 lines
35 KiB
Diff

From: uazo <uazo@users.noreply.github.com>
Date: Sun, 7 Jan 2024 15:46:46 +0000
Subject: Customize selection popup
Adds options related to the handling of pop-up selections:
Opens tabs in foreground, Move web search to the top of items,
Web search in tab group and Enable smart text selection
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../SamsungSelectionActionMenuDelegate.java | 7 +-
.../browser/ChromeActionModeHandler.java | 4 +-
.../chrome/browser/ChromeTabbedActivity.java | 15 +++-
...ActivityTabWebContentsDelegateAndroid.java | 10 ++-
.../compositor/layouts/LayoutManagerImpl.java | 9 ++-
.../tab/TabContextMenuItemDelegate.java | 7 +-
.../chrome/browser/ui/RootUiCoordinator.java | 8 +-
.../Customize-selection-popup.grdp | 34 +++++++++
.../AutofillSelectionMenuItemHelper.java | 4 +-
.../res/xml/accessibility_preferences.xml | 24 ++++++
.../selection/SelectActionMenuHelper.java | 20 ++---
.../SelectionPopupControllerImpl.java | 2 +-
.../selection/SmartSelectionClient.java | 4 +
.../browser/PendingSelectionMenu.java | 8 +-
.../browser/SelectionMenuItem.java | 73 ++++++++++++-------
.../SelectionActionMenuDelegate.java | 32 +++++---
16 files changed, 194 insertions(+), 67 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp
diff --git a/android_webview/java/src/org/chromium/android_webview/selection/SamsungSelectionActionMenuDelegate.java b/android_webview/java/src/org/chromium/android_webview/selection/SamsungSelectionActionMenuDelegate.java
--- a/android_webview/java/src/org/chromium/android_webview/selection/SamsungSelectionActionMenuDelegate.java
+++ b/android_webview/java/src/org/chromium/android_webview/selection/SamsungSelectionActionMenuDelegate.java
@@ -134,7 +134,7 @@ public class SamsungSelectionActionMenuDelegate extends AutofillSelectionActionM
.setIcon(null)
.setOrderAndCategory(
Menu.CATEGORY_SECONDARY,
- SelectionMenuItem.ItemGroupOffset.TEXT_PROCESSING_ITEMS)
+ SelectionMenuItem.ItemGroupOffset.TEXT_PROCESSING_ITEMS())
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
.setIntent(createManageAppsIntent())
.build());
@@ -167,7 +167,7 @@ public class SamsungSelectionActionMenuDelegate extends AutofillSelectionActionM
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
.setOrderAndCategory(
DefaultItem.PASTE, // Show after paste.
- SelectionMenuItem.ItemGroupOffset.DEFAULT_ITEMS)
+ SelectionMenuItem.ItemGroupOffset.DEFAULT_ITEMS())
.setIntent(
getTranslationActionIntent(selectedText, translateResolveInfo))
.build());
@@ -180,7 +180,7 @@ public class SamsungSelectionActionMenuDelegate extends AutofillSelectionActionM
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS)
.setOrderAndCategory(
Menu.FIRST, // Show as first item after primary assist item.
- SelectionMenuItem.ItemGroupOffset.ASSIST_ITEMS)
+ SelectionMenuItem.ItemGroupOffset.ASSIST_ITEMS())
.setIntent(
createWritingToolkitIntent(selectedText, isSelectionReadOnly))
.build());
@@ -239,6 +239,7 @@ public class SamsungSelectionActionMenuDelegate extends AutofillSelectionActionM
}
public static boolean shouldUseSamsungMenuItemOrdering() {
+ if ((true)) return false;
return Build.VERSION.SDK_INT <= MAXIMUM_BUILD_VERSION_CODE_SUPPORTED && isSamsungDevice();
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeHandler.java
@@ -173,9 +173,7 @@ public class ChromeActionModeHandler {
| ActionModeCallbackHelper.MENU_ITEM_SHARE;
// Disable options that expose additional Chrome functionality prior to the FRE being
// completed (i.e. creation of a new tab).
- if (FirstRunStatus.getFirstRunFlowComplete() && mShowWebSearch) {
- allowedActionModes |= ActionModeCallbackHelper.MENU_ITEM_WEB_SEARCH;
- }
+ allowedActionModes |= ActionModeCallbackHelper.MENU_ITEM_WEB_SEARCH;
mHelper.setAllowedMenuItems(allowedActionModes);
mHelper.onCreateActionMode(mode, menu);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -944,10 +944,17 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
@TabLaunchType int type,
@TabCreationState int creationState,
boolean markedForSelection) {
- if (type == TabLaunchType.FROM_LONGPRESS_BACKGROUND
- || type == TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP
- || (type == TabLaunchType.FROM_RECENT_TABS
- && !DeviceClassManager.enableAnimations())) {
+ boolean selectionPopupTabsForeground =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false);
+ boolean showToast = type == TabLaunchType.FROM_RECENT_TABS
+ && !DeviceClassManager.enableAnimations();
+ if (!showToast && !selectionPopupTabsForeground) {
+ showToast = !DeviceClassManager.enableAnimations() &&
+ (type == TabLaunchType.FROM_LONGPRESS_BACKGROUND
+ || type == TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP);
+ }
+ if (showToast) {
Toast.makeText(
ChromeTabbedActivity.this,
R.string.open_in_new_tab_toast,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java
@@ -253,6 +253,14 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
// Skip opening a new Tab if it doesn't make sense.
if (mTab.isClosing()) return false;
+ int tabLaunchType = TabLaunchType.FROM_LONGPRESS_FOREGROUND;
+ boolean selectionPopupTabsForeground =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false);
+ if (selectionPopupTabsForeground) {
+ tabLaunchType = TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP;
+ }
+
if (ChromeFeatureList.isEnabled(ChromeFeatureList.DOCUMENT_PICTURE_IN_PICTURE_API)
&& disposition == WindowOpenDisposition.NEW_PICTURE_IN_PICTURE) {
assertNonNull(pictureInPictureWindowOptions);
@@ -270,7 +278,7 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
mTab,
/* shouldPin= */ false,
webContents,
- TabLaunchType.FROM_LONGPRESS_FOREGROUND,
+ tabLaunchType,
targetUrl,
addTabToModel);
if (tab == null) return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerImpl.java
@@ -20,6 +20,7 @@ import androidx.annotation.Px;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.Callback;
+import org.chromium.base.ContextUtils;
import org.chromium.base.ObserverList;
import org.chromium.base.TraceEvent;
import org.chromium.base.supplier.MonotonicObservableSupplier;
@@ -243,11 +244,17 @@ public class LayoutManagerImpl
boolean willBeSelected = willAddedTabBeSelected(launchType, incognito);
float lastTapX = LocalizationUtils.isLayoutRtl() ? mHost.getWidth() * mPxToDp : 0.f;
float lastTapY = 0.f;
+ boolean selectionPopupTabsForeground =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false);
+ if (selectionPopupTabsForeground) {
+ willBeSelected = launchType != TabLaunchType.FROM_RESTORE_TABS_UI
+ || (!getTabModelSelector().isIncognitoSelected() && incognito);
+ }
if (launchType != TabLaunchType.FROM_CHROME_UI) {
lastTapX = mPxToDp * mLastTapX;
lastTapY = mPxToDp * mLastTapY;
}
-
tabCreated(
tabId,
getTabModelSelector().getCurrentTabId(),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
@@ -404,8 +404,13 @@ public class TabContextMenuItemDelegate implements ContextMenuItemDelegate {
public void onOpenImageInNewTab(GURL url, @Nullable Referrer referrer) {
LoadUrlParams loadUrlParams = new LoadUrlParams(url.getSpec());
loadUrlParams.setReferrer(referrer);
+ @TabLaunchType int type = TabLaunchType.FROM_LONGPRESS_BACKGROUND;
+ if (ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_tabs_foreground", false)) {
+ type = TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP;
+ }
mTabModelSelector.openNewTab(
- loadUrlParams, TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab, isIncognito());
+ loadUrlParams, type, mTab, isIncognito());
}
/**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -34,6 +34,7 @@ import androidx.core.view.WindowInsetsCompat;
import org.chromium.base.Callback;
import org.chromium.base.CallbackController;
+import org.chromium.base.ContextUtils;
import org.chromium.base.DeviceInfo;
import org.chromium.base.TraceEvent;
import org.chromium.base.lifetime.Destroyable;
@@ -1083,11 +1084,16 @@ public class RootUiCoordinator
TrackerFactory.getTrackerForProfile(tab.getProfile())
.notifyEvent(EventConstants.WEB_SEARCH_PERFORMED);
+ boolean selection_popup_web_search_to_group =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_web_search_to_group", false);
+
mTabModelSelectorSupplier
.get()
.openNewTab(
generateUrlParamsForSearch(tab, query),
- TabLaunchType.FROM_LONGPRESS_FOREGROUND,
+ selection_popup_web_search_to_group ? TabLaunchType.FROM_LONGPRESS_BACKGROUND_IN_GROUP
+ : TabLaunchType.FROM_LONGPRESS_FOREGROUND,
tab,
tab.isIncognito());
},
diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp
new file mode 100644
--- /dev/null
+++ b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Customize-selection-popup.grdp
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_CUSTOMIZE_SELECTON_POPUP_TITLE" desc="">
+ Customize selection popup
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_TABS_FOREGROUND_TITLE" desc="">
+ Opens tabs in foreground
+ </message>
+ <message name="IDS_SELECTION_POPUP_TABS_FOREGROUND_SUMMARY" desc="">
+ Immediately brings new open tabs to the foreground
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_TOP_TITLE" desc="">
+ Move web search to the top of items
+ </message>
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_TOP_SUMMARY" desc="">
+ Web search as first choice
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_GROUP_TITLE" desc="">
+ Web search in tab group
+ </message>
+ <message name="IDS_SELECTION_POPUP_WEB_SEARCH_TO_GROUP_SUMMARY" desc="">
+ Opens the search in a tab in the current group, if deactivated opens a new group
+ </message>
+
+ <message name="IDS_SELECTION_POPUP_SMART_TEXT_TITLE" desc="">
+ Enable smart text selection
+ </message>
+ <message name="IDS_SELECTION_POPUP_SMART_TEXT_SUMMARY" desc="">
+ Smart Text selection automatically augments the selected boundaries and classifies the selected text based on the context by sending selection together with its surrounding text
+ </message>
+</grit-part>
diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java
--- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java
+++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillSelectionMenuItemHelper.java
@@ -39,7 +39,7 @@ public class AutofillSelectionMenuItemHelper {
.setGroupId(R.id.select_action_menu_delegate_items)
.setOrderAndCategory(
Menu.FIRST,
- SelectionMenuItem.ItemGroupOffset.SECONDARY_ASSIST_ITEMS)
+ SelectionMenuItem.ItemGroupOffset.SECONDARY_ASSIST_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS
| MenuItem.SHOW_AS_ACTION_WITH_TEXT)
@@ -52,7 +52,7 @@ public class AutofillSelectionMenuItemHelper {
.setGroupId(R.id.select_action_menu_delegate_items)
.setOrderAndCategory(
Menu.CATEGORY_SECONDARY, // Show at end of section.
- SelectionMenuItem.ItemGroupOffset.SECONDARY_ASSIST_ITEMS)
+ SelectionMenuItem.ItemGroupOffset.SECONDARY_ASSIST_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_NEVER
| MenuItem.SHOW_AS_ACTION_WITH_TEXT)
diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
--- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
+++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
@@ -89,4 +89,28 @@ found in the LICENSE file.
android:key="disable_toolbar_swipeup"
android:title="@string/disable_toolbar_swipe_up" />
+ <PreferenceCategory
+ android:key="customize_selecton_popup_section"
+ android:title="@string/customize_selecton_popup_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_tabs_foreground"
+ android:summary="@string/selection_popup_tabs_foreground_summary"
+ android:title="@string/selection_popup_tabs_foreground_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_web_search_to_top"
+ android:summary="@string/selection_popup_web_search_to_top_summary"
+ android:title="@string/selection_popup_web_search_to_top_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_web_search_to_group"
+ android:summary="@string/selection_popup_web_search_to_group_summary"
+ android:title="@string/selection_popup_web_search_to_group_title" />
+
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="selection_popup_smart_text"
+ android:summary="@string/selection_popup_smart_text_summary"
+ android:title="@string/selection_popup_smart_text_title" />
+
</PreferenceScreen>
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java
@@ -169,7 +169,7 @@ public class SelectActionMenuHelper {
return new SelectionMenuItem.Builder(primaryAction.getTitle())
.setId(android.R.id.textAssist)
.setGroupId(R.id.select_action_menu_assist_items)
- .setOrderAndCategory(0, ItemGroupOffset.ASSIST_ITEMS)
+ .setOrderAndCategory(0, ItemGroupOffset.ASSIST_ITEMS())
.setIcon(getPrimaryActionIconForClassificationResult(classificationResult, context))
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
.build();
@@ -247,7 +247,7 @@ public class SelectActionMenuHelper {
.setGroupId(groupId)
.setIcon(icons == null ? null : icons.get(i))
.setOrderAndCategory(
- i - startIndex, ItemGroupOffset.SECONDARY_ASSIST_ITEMS)
+ i - startIndex, ItemGroupOffset.SECONDARY_ASSIST_ITEMS())
.setContentDescription(action.getContentDescription())
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
.build();
@@ -296,7 +296,7 @@ public class SelectActionMenuHelper {
.setId(Menu.NONE)
.setGroupId(R.id.select_action_menu_text_processing_items)
.setIcon(icon)
- .setOrderAndCategory(i, ItemGroupOffset.TEXT_PROCESSING_ITEMS)
+ .setOrderAndCategory(i, ItemGroupOffset.TEXT_PROCESSING_ITEMS())
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM)
.setIntent(intent)
.build());
@@ -341,7 +341,7 @@ public class SelectActionMenuHelper {
.setGroupId(R.id.select_action_menu_default_items)
.setIconAttr(android.R.attr.actionModeCutDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.CUT)
- .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS)
+ .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(true)
@@ -355,7 +355,7 @@ public class SelectActionMenuHelper {
.setGroupId(R.id.select_action_menu_default_items)
.setIconAttr(android.R.attr.actionModeCopyDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.COPY)
- .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS)
+ .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(true)
@@ -369,7 +369,7 @@ public class SelectActionMenuHelper {
.setGroupId(R.id.select_action_menu_default_items)
.setIconAttr(android.R.attr.actionModePasteDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.PASTE)
- .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS)
+ .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(true)
@@ -385,7 +385,7 @@ public class SelectActionMenuHelper {
.setId(R.id.select_action_menu_share)
.setGroupId(R.id.select_action_menu_default_items)
.setIconAttr(android.R.attr.actionModeShareDrawable)
- .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS)
+ .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(true)
@@ -399,7 +399,7 @@ public class SelectActionMenuHelper {
.setGroupId(R.id.select_action_menu_default_items)
.setIconAttr(android.R.attr.actionModeSelectAllDrawable)
.setAlphabeticShortcut(ItemKeyShortcuts.SELECT_ALL)
- .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS)
+ .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(true)
@@ -412,7 +412,7 @@ public class SelectActionMenuHelper {
new SelectionMenuItem.Builder(android.R.string.paste_as_plain_text)
.setId(android.R.id.pasteAsPlainText)
.setGroupId(R.id.select_action_menu_default_items)
- .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS)
+ .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(true);
@@ -432,7 +432,7 @@ public class SelectActionMenuHelper {
.setId(R.id.select_action_menu_web_search)
.setGroupId(R.id.select_action_menu_default_items)
.setIconAttr(android.R.attr.actionModeWebSearchDrawable)
- .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS)
+ .setOrderAndCategory(order, ItemGroupOffset.DEFAULT_ITEMS())
.setShowAsActionFlags(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT)
.setIsEnabled(true)
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
@@ -1149,7 +1149,7 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper
private boolean handleAssistMenuItemClick(int order) {
// Primary assist action is always the first action in the list so offset by 1.
- int index = 1 + order - SelectionMenuItem.ItemGroupOffset.SECONDARY_ASSIST_ITEMS;
+ int index = 1 + order - SelectionMenuItem.ItemGroupOffset.SECONDARY_ASSIST_ITEMS();
if (mClassificationResult == null
|| mClassificationResult.textClassification == null
|| mClassificationResult.textClassification.getActions().size() <= index) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
@@ -19,6 +19,7 @@ import org.jni_zero.JNINamespace;
import org.jni_zero.JniType;
import org.jni_zero.NativeMethods;
+import org.chromium.base.ContextUtils;
import org.chromium.base.ObserverList;
import org.chromium.base.UserData;
import org.chromium.build.annotations.Initializer;
@@ -81,6 +82,9 @@ public class SmartSelectionClient implements SelectionClient, UserData {
return null;
}
+ if (!ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_smart_text", false)) return null;
+
SmartSelectionClient client =
assumeNonNull(
webContents.getOrSetUserData(
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/PendingSelectionMenu.java b/content/public/android/java/src/org/chromium/content_public/browser/PendingSelectionMenu.java
--- a/content/public/android/java/src/org/chromium/content_public/browser/PendingSelectionMenu.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/PendingSelectionMenu.java
@@ -165,13 +165,13 @@ public final class PendingSelectionMenu {
@VisibleForTesting
public @LogicalGroup int determineGroup(SelectionMenuItem item) {
int order = item.order;
- if (order >= ItemGroupOffset.TEXT_PROCESSING_ITEMS) {
+ if (order >= ItemGroupOffset.TEXT_PROCESSING_ITEMS()) {
return LogicalGroup.TEXT_PROCESSING_ITEMS;
- } else if (order >= ItemGroupOffset.SECONDARY_ASSIST_ITEMS) {
+ } else if (order >= ItemGroupOffset.SECONDARY_ASSIST_ITEMS()) {
return LogicalGroup.SECONDARY_ASSIST_ITEMS;
- } else if (order >= ItemGroupOffset.DEFAULT_ITEMS) {
+ } else if (order >= ItemGroupOffset.DEFAULT_ITEMS()) {
return LogicalGroup.DEFAULT_ITEMS;
- } else if (order >= ItemGroupOffset.ASSIST_ITEMS) {
+ } else if (order >= ItemGroupOffset.ASSIST_ITEMS()) {
return LogicalGroup.ASSIST_ITEMS;
}
throw new IllegalStateException("Invalid order. Must be >= 0");
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java b/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java
--- a/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java
@@ -18,6 +18,7 @@ import androidx.annotation.IntDef;
import androidx.annotation.StringRes;
import androidx.appcompat.content.res.AppCompatResources;
+import org.chromium.base.ContextUtils;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
@@ -34,18 +35,38 @@ public final class SelectionMenuItem implements Comparable<SelectionMenuItem> {
* less than SECONDARY_ASSIST_ITEMS will appear in the default items section. Each section is
* separated by a divider in dropdown menus.
*/
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({
- ItemGroupOffset.ASSIST_ITEMS,
- ItemGroupOffset.DEFAULT_ITEMS,
- ItemGroupOffset.SECONDARY_ASSIST_ITEMS,
- ItemGroupOffset.TEXT_PROCESSING_ITEMS
- })
- public @interface ItemGroupOffset {
- int ASSIST_ITEMS = 0;
- int DEFAULT_ITEMS = 10;
- int SECONDARY_ASSIST_ITEMS = 20;
- int TEXT_PROCESSING_ITEMS = 30;
+ public static class ItemGroupOffset {
+ static int CHROMIUM_ASSIST_ITEMS = 1;
+ static int CHROMIUM_DEFAULT_ITEMS = 2;
+ static int CHROMIUM_SECONDARY_ASSIST_ITEMS = 3;
+ static int CHROMIUM_TEXT_PROCESSING_ITEMS = 4;
+
+ static int CROMITE_DEFAULT_ITEMS = 1;
+ static int CROMITE_ASSIST_ITEMS = 2;
+ static int CROMITE_SECONDARY_ASSIST_ITEMS = 3;
+ static int CROMITE_TEXT_PROCESSING_ITEMS = 4;
+
+ private static int GetValue(int a, int b) {
+ return !ContextUtils.getAppSharedPreferences().getBoolean(
+ "enable_accessibility", false)
+ ? a : b;
+ }
+
+ public static int ASSIST_ITEMS() {
+ return GetValue(CHROMIUM_ASSIST_ITEMS, CROMITE_ASSIST_ITEMS);
+ }
+
+ public static int DEFAULT_ITEMS() {
+ return GetValue(CHROMIUM_DEFAULT_ITEMS, CROMITE_DEFAULT_ITEMS);
+ }
+
+ public static int SECONDARY_ASSIST_ITEMS() {
+ return GetValue(CHROMIUM_SECONDARY_ASSIST_ITEMS, CROMITE_SECONDARY_ASSIST_ITEMS);
+ }
+
+ public static int TEXT_PROCESSING_ITEMS() {
+ return GetValue(CHROMIUM_TEXT_PROCESSING_ITEMS, CROMITE_TEXT_PROCESSING_ITEMS);
+ }
}
private final @AttrRes int mIconAttr;
@@ -210,25 +231,23 @@ public final class SelectionMenuItem implements Comparable<SelectionMenuItem> {
* @param order the order, must be >= 0.
* @param category the section of the menu in which this item should appear.
*/
- public Builder setOrderAndCategory(int order, @ItemGroupOffset int category) {
+ public Builder setOrderAndCategory(int order, int category) {
if (order < 0) {
throw new IllegalArgumentException("Invalid order. Must be >= 0");
}
// Make sure items don't spill over into the next category.
- mOrder =
- switch (category) {
- case ItemGroupOffset.ASSIST_ITEMS ->
- Math.min(order + category, ItemGroupOffset.DEFAULT_ITEMS - 1);
- case ItemGroupOffset.DEFAULT_ITEMS ->
- Math.min(
- order + category,
- ItemGroupOffset.SECONDARY_ASSIST_ITEMS - 1);
- case ItemGroupOffset.SECONDARY_ASSIST_ITEMS ->
- Math.min(
- order + category,
- ItemGroupOffset.TEXT_PROCESSING_ITEMS - 1);
- default -> order + category;
- };
+ if (category == ItemGroupOffset.ASSIST_ITEMS())
+ mOrder = Math.min(order + category, ItemGroupOffset.DEFAULT_ITEMS() - 1);
+ else if (category == ItemGroupOffset.DEFAULT_ITEMS())
+ mOrder = Math.min(
+ order + category,
+ ItemGroupOffset.SECONDARY_ASSIST_ITEMS() - 1);
+ else if (category == ItemGroupOffset.SECONDARY_ASSIST_ITEMS())
+ mOrder = Math.min(
+ order + category,
+ ItemGroupOffset.TEXT_PROCESSING_ITEMS() - 1);
+ else
+ mOrder = order + category;
return this;
}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java b/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java
--- a/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java
@@ -7,6 +7,7 @@ package org.chromium.content_public.browser.selection;
import android.content.pm.ResolveInfo;
import android.view.View;
+import org.chromium.base.ContextUtils;
import org.chromium.base.SelectionActionMenuClientWrapper.DefaultItem;
import org.chromium.base.SelectionActionMenuClientWrapper.MenuType;
import org.chromium.build.annotations.NullMarked;
@@ -23,15 +24,28 @@ import java.util.List;
@NullMarked
public interface SelectionActionMenuDelegate {
static @DefaultItem int[] getDefaultMenuItemOrder() {
- return new @DefaultItem int[] {
- DefaultItem.CUT,
- DefaultItem.COPY,
- DefaultItem.PASTE,
- DefaultItem.PASTE_AS_PLAIN_TEXT,
- DefaultItem.SHARE,
- DefaultItem.SELECT_ALL,
- DefaultItem.WEB_SEARCH
- };
+ if (!ContextUtils.getAppSharedPreferences().getBoolean(
+ "selection_popup_web_search_to_top", false)) {
+ return new @DefaultItem int[] {
+ DefaultItem.CUT,
+ DefaultItem.COPY,
+ DefaultItem.PASTE,
+ DefaultItem.PASTE_AS_PLAIN_TEXT,
+ DefaultItem.SHARE,
+ DefaultItem.SELECT_ALL,
+ DefaultItem.WEB_SEARCH
+ };
+ } else {
+ return new @DefaultItem int[] {
+ DefaultItem.WEB_SEARCH,
+ DefaultItem.CUT,
+ DefaultItem.COPY,
+ DefaultItem.PASTE,
+ DefaultItem.PASTE_AS_PLAIN_TEXT,
+ DefaultItem.SHARE,
+ DefaultItem.SELECT_ALL
+ };
+ }
}
/**
--