v118 patches

moved method for changing native flag value from java due to changes in v118
This commit is contained in:
Carmelo Messina
2023-10-11 11:46:55 +01:00
committed by uazo
parent 6e1f921142
commit 642aea61ae
3 changed files with 196 additions and 72 deletions
@@ -5,6 +5,7 @@ Subject: Add setting to invert tap and long tap
Reverses single tap to long tap in android for accessibility reasons.
The feature can be activated from the accessibility settings.
Need: bromite-build-utils.patch
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
chrome/android/java/res/values/ids.xml | 1 +
@@ -46,7 +47,7 @@ diff --git a/chrome/android/java/res/values/ids.xml b/chrome/android/java/res/va
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
@@ -126,6 +126,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
@@ -130,6 +130,24 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
mSnackbarManager.showSnackbar(mSnackbar);
}
@@ -58,7 +59,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s
+
+ @Override
+ public void setEnabled(boolean value) {
+ CachedFeatureFlags.setFlagEnabled(ChromeFeatureList.SHOW_ALWAYS_CONTEXT_MENU_ON_LINKS,
+ CromiteNativeUtils.setFlagEnabled(ChromeFeatureList.SHOW_ALWAYS_CONTEXT_MENU_ON_LINKS,
+ "show-always-context-menu-on-links", value);
+ }
+ }
@@ -9,6 +9,7 @@ The bottom bar will also be colored as the navigation bar to make the interface
more pleasant and fixes upstream bug 1285311.
Support for tablet mode is also included.
Need: bromite-build-utils.patch
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
@@ -25,7 +26,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../tab_management/TabListCoordinator.java | 81 +++++++++++++++++++
.../tab_management/TabListRecyclerView.java | 19 ++++-
.../tab_management/TabSwitcherMediator.java | 16 ++++
.../ChromeAccessibilitySettingsDelegate.java | 52 ++++++++++++
.../ChromeAccessibilitySettingsDelegate.java | 50 ++++++++++++
.../chrome/browser/app/ChromeActivity.java | 13 +++
.../compositor/CompositorViewHolder.java | 9 +++
.../layouts/LayoutManagerChrome.java | 18 ++++-
@@ -56,7 +57,6 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
chrome/browser/flag_descriptions.cc | 4 +
chrome/browser/flag_descriptions.h | 3 +
.../flags/android/chrome_feature_list.cc | 2 +
.../browser/flags/CachedFeatureFlags.java | 18 +++++
.../chrome/browser/flags/CachedFlag.java | 6 ++
.../browser/flags/ChromeFeatureList.java | 5 ++
chrome/browser/prefs/browser_prefs.cc | 2 +-
@@ -64,11 +64,11 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../ui/appmenu/AppMenuHandlerImpl.java | 11 +++
.../omnibox/LocationBarCoordinator.java | 6 +-
...mniboxSuggestionsDropdownEmbedderImpl.java | 14 +++-
.../browser/omnibox/UrlBarCoordinator.java | 10 +++
.../browser/omnibox/UrlBarCoordinator.java | 9 +++
.../suggestions/AutocompleteCoordinator.java | 16 +++-
.../suggestions/AutocompleteMediator.java | 7 +-
.../DropdownItemViewInfoListManager.java | 15 +++-
.../OmniboxSuggestionsDropdown.java | 31 ++++++-
.../OmniboxSuggestionsDropdown.java | 39 ++++++++-
.../OmniboxSuggestionsDropdownEmbedder.java | 9 +++
.../strings/android_chrome_strings.grd | 6 ++
chrome/browser/ui/android/toolbar/BUILD.gn | 1 +
@@ -87,7 +87,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../accessibility/AccessibilitySettings.java | 16 ++++
.../AccessibilitySettingsDelegate.java | 6 ++
.../render_widget_host_view_android.cc | 3 +
75 files changed, 884 insertions(+), 63 deletions(-)
74 files changed, 871 insertions(+), 63 deletions(-)
diff --git a/cc/base/features.cc b/cc/base/features.cc
--- a/cc/base/features.cc
@@ -633,13 +633,11 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
@@ -15,6 +15,14 @@ import org.chromium.components.browser_ui.accessibility.PageZoomUtils;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.content_public.browser.BrowserContextHandle;
@@ -21,6 +21,12 @@ import org.chromium.chrome.browser.flags.CromiteNativeUtils;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
+import android.app.Activity;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.CachedFeatureFlags;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
@@ -648,7 +646,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s
/** The Chrome implementation of AccessibilitySettingsDelegate. */
public class ChromeAccessibilitySettingsDelegate implements AccessibilitySettingsDelegate {
private static class ReaderForAccessibilityDelegate implements BooleanPreferenceDelegate {
@@ -35,6 +43,12 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
@@ -41,6 +47,12 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
}
}
@@ -661,7 +659,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s
private final Profile mProfile;
/**
@@ -74,6 +88,44 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
@@ -80,6 +92,44 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
return new ForceTabletUIDelegate();
}
@@ -673,7 +671,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s
+
+ @Override
+ public void setEnabled(boolean value) {
+ CachedFeatureFlags.setFlagEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM,
+ CromiteNativeUtils.setFlagEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM,
+ "move-top-toolbar-to-bottom", value);
+ }
+ }
@@ -1754,41 +1752,6 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
&kNotificationPermissionVariant,
&kNotificationPermissionBottomSheet,
&kOfflineIndicatorV2,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
@@ -188,6 +188,23 @@ public class CachedFeatureFlags {
return value;
}
+ /**
+ * Allows the modification of the flag value on the java side.
+ * Currently only the feature flag with on / off values is managed.
+ *
+ * @param featureName the feature name from ChromeFeatureList.
+ * @param flagName the flag name name from about_flags.cc.
+ */
+ public static void setFlagEnabled(String featureName, String flagName, Boolean newValue) {
+ CachedFeatureFlagsJni.get().setEnabled(flagName, newValue);
+
+ CachedFlag cachedFlag = ChromeFeatureList.sAllCachedFlags.get(featureName);
+ String preferenceName = cachedFlag.getSharedPreferenceKey();
+
+ SharedPreferencesManager.getInstance().writeBoolean(preferenceName, newValue);
+ cachedFlag.setValueReturnedOverride(newValue);
+ }
+
@AnyThread
static double getConsistentDoubleValue(String preferenceName, double defaultValue) {
CachedFlagsSafeMode.getInstance().onFlagChecked();
@@ -235,6 +252,7 @@ public class CachedFeatureFlags {
@NativeMethods
interface Natives {
+ void setEnabled(String featureName, boolean newValue);
void setAdBlockFiltersURL(String url);
String getAdBlockFiltersURL();
}
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java
@@ -2027,26 +1990,25 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java
@@ -25,6 +25,9 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
@@ -25,6 +25,10 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.CachedFeatureFlags;
+import android.view.WindowManager;
+
/**
* Coordinates the interactions with the UrlBar text component.
*/
@@ -234,6 +237,13 @@ public class UrlBarCoordinator implements UrlBarEditingTextStateProvider, UrlFoc
@@ -234,6 +238,11 @@ public class UrlBarCoordinator implements UrlBarEditingTextStateProvider, UrlFoc
// to show or hide keyboard anyway. This may happen when we schedule keyboard hide, and
// receive a second request to hide the keyboard instantly.
if (showKeyboard) {
+ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) {
+ // probably due to an android bug, fix the size rather than pan the view.
+ // with the pan the bar may not always follow the focus if not at the first input by the user
+ setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE, /* delay */ false);
+ } else {
+ setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN, /* delay */ false);
+ mWindowDelegate.setWindowSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ }
mKeyboardVisibilityDelegate.showKeyboard(mUrlBar);
} else {
@@ -2179,17 +2141,18 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java
@@ -35,6 +35,9 @@ import org.chromium.chrome.browser.util.KeyNavigationUtil;
@@ -35,6 +35,10 @@ import org.chromium.chrome.browser.util.KeyNavigationUtil;
import org.chromium.components.browser_ui.styles.ChromeColors;
import org.chromium.ui.base.ViewUtils;
+import android.graphics.Rect;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.CachedFeatureFlags;
+
/** A widget for showing a list of omnibox suggestions. */
public class OmniboxSuggestionsDropdown extends RecyclerView {
/**
@@ -188,7 +191,8 @@ public class OmniboxSuggestionsDropdown extends RecyclerView {
@@ -188,7 +192,8 @@ public class OmniboxSuggestionsDropdown extends RecyclerView {
* Constructs a new list designed for containing omnibox suggestions.
* @param context Context used for contained views.
*/
@@ -2199,7 +2162,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
super(context, null, android.R.attr.dropDownListViewStyle);
setFocusable(true);
setFocusableInTouchMode(true);
@@ -199,13 +203,25 @@ public class OmniboxSuggestionsDropdown extends RecyclerView {
@@ -199,13 +204,25 @@ public class OmniboxSuggestionsDropdown extends RecyclerView {
setItemAnimator(null);
mLayoutScrollListener = new SuggestionLayoutScrollListener(context);
@@ -2226,7 +2189,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
ViewCompat.setPaddingRelative(this, 0, 0, 0, paddingBottom);
mStandardBgColor = shouldShowModernizeVisualUpdate
@@ -340,8 +356,15 @@ public class OmniboxSuggestionsDropdown extends RecyclerView {
@@ -340,8 +357,16 @@ public class OmniboxSuggestionsDropdown extends RecyclerView {
try (TraceEvent tracing = TraceEvent.scoped("OmniboxSuggestionsList.Measure");
TimingMetric metric = OmniboxMetrics.recordSuggestionListMeasureTime()) {
OmniboxAlignment omniboxAlignment = mEmbedder.getCurrentAlignment();
@@ -2237,13 +2200,27 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
+ top = 0;
+ }
+ maybeUpdateLayoutParams(top);
+ boolean useAlignmentSpecifiedHeight = false;
+ boolean useAlignmentSpecifiedHeight =
+ !ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled();
+ int availableViewportHeight = useAlignmentSpecifiedHeight
+ ? omniboxAlignment.height
+ : calculateAvailableViewportHeight() - top;
int desiredWidth = omniboxAlignment.width;
adjustHorizontalPosition();
notifyObserversIfViewportHeightChanged(availableViewportHeight);
@@ -353,6 +378,12 @@ public class OmniboxSuggestionsDropdown extends RecyclerView {
}
}
+ private int calculateAvailableViewportHeight() {
+ Rect mTempRect = new Rect();
+ mEmbedder.getWindowDelegate().getWindowVisibleDisplayFrame(mTempRect);
+ return mTempRect.height();
+ }
+
private void maybeUpdateLayoutParams(int topMargin) {
// Update the layout params to ensure the parent correctly positions the suggestions
// under the anchor view.
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdownEmbedder.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdownEmbedder.java
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdownEmbedder.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdownEmbedder.java
+158 -12
View File
@@ -3,23 +3,31 @@ Date: Fri, 9 Jun 2023 15:11:46 +0000
Subject: bromite build utils
---
build/android/gyp/java_cpp_enum.py | 36 ++++++--
build/android/gyp/util/build_utils.py | 25 +++++-
build/bromite/bromite_utils.gni | 69 ++++++++++++++
build/bromite/gyp/cpp_bromite_include.py | 35 ++++++++
build/bromite/gyp/cpp_bromite_include.pydeps | 9 ++
build/bromite/gyp/java_bromite_impl.py | 94 ++++++++++++++++++++
build/bromite/gyp/java_bromite_impl.pydeps | 9 ++
build/config/BUILDCONFIG.gn | 1 +
build/config/android/rules.gni | 6 +-
tools/grit/grit/grd_reader.py | 27 ++++--
tools/grit/preprocess_if_expr.py | 32 ++++++-
11 files changed, 329 insertions(+), 14 deletions(-)
build/android/gyp/java_cpp_enum.py | 36 +++++--
build/android/gyp/util/build_utils.py | 25 ++++-
build/bromite/bromite_utils.gni | 69 ++++++++++++++
build/bromite/gyp/cpp_bromite_include.py | 35 +++++++
build/bromite/gyp/cpp_bromite_include.pydeps | 9 ++
build/bromite/gyp/java_bromite_impl.py | 94 +++++++++++++++++++
build/bromite/gyp/java_bromite_impl.pydeps | 9 ++
build/config/BUILDCONFIG.gn | 1 +
build/config/android/rules.gni | 6 +-
.../ChromeAccessibilitySettingsDelegate.java | 6 ++
chrome/browser/flags/BUILD.gn | 10 +-
.../flags/android/cromite_native_utils.cc | 27 ++++++
.../flags/android/cromite_native_utils.h | 14 +++
.../browser/flags/CromiteNativeUtils.java | 32 +++++++
tools/grit/grit/grd_reader.py | 27 +++++-
tools/grit/preprocess_if_expr.py | 32 ++++++-
16 files changed, 416 insertions(+), 16 deletions(-)
create mode 100644 build/bromite/bromite_utils.gni
create mode 100644 build/bromite/gyp/cpp_bromite_include.py
create mode 100644 build/bromite/gyp/cpp_bromite_include.pydeps
create mode 100644 build/bromite/gyp/java_bromite_impl.py
create mode 100644 build/bromite/gyp/java_bromite_impl.pydeps
create mode 100755 chrome/browser/flags/android/cromite_native_utils.cc
create mode 100755 chrome/browser/flags/android/cromite_native_utils.h
create mode 100755 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java
diff --git a/build/android/gyp/java_cpp_enum.py b/build/android/gyp/java_cpp_enum.py
--- a/build/android/gyp/java_cpp_enum.py
@@ -425,6 +433,144 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
outputs = [ _srcjar_path ]
}
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
@@ -15,6 +15,12 @@ import org.chromium.components.browser_ui.accessibility.PageZoomUtils;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.content_public.browser.BrowserContextHandle;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.CachedFeatureFlags;
+import org.chromium.chrome.browser.flags.CromiteNativeUtils;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
+
/** The Chrome implementation of AccessibilitySettingsDelegate. */
public class ChromeAccessibilitySettingsDelegate implements AccessibilitySettingsDelegate {
private static class ReaderForAccessibilityDelegate implements BooleanPreferenceDelegate {
diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn
--- a/chrome/browser/flags/BUILD.gn
+++ b/chrome/browser/flags/BUILD.gn
@@ -5,7 +5,8 @@
import("//build/config/android/rules.gni")
android_library("java") {
- sources = [
+ sources = [ "android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java" ]
+ sources += [
"android/java/src/org/chromium/chrome/browser/flags/AllCachedFieldTrialParameters.java",
"android/java/src/org/chromium/chrome/browser/flags/BooleanCachedFieldTrialParameter.java",
"android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java",
@@ -41,7 +42,8 @@ android_library("java") {
}
generate_jni("jni_headers") {
- sources = [
+ sources = [ "android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java" ]
+ sources += [
"android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureMap.java",
"android/java/src/org/chromium/chrome/browser/flags/ChromeSessionState.java",
]
@@ -49,6 +51,10 @@ generate_jni("jni_headers") {
static_library("flags_android") {
sources = [
+ "android/cromite_native_utils.cc",
+ "android/cromite_native_utils.h",
+ ]
+ sources += [
"android/chrome_session_state.cc",
"android/chrome_session_state.h",
]
diff --git a/chrome/browser/flags/android/cromite_native_utils.cc b/chrome/browser/flags/android/cromite_native_utils.cc
new file mode 100755
--- /dev/null
+++ b/chrome/browser/flags/android/cromite_native_utils.cc
@@ -0,0 +1,27 @@
+#include "chrome/browser/flags/android/cromite_native_utils.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/flags/jni_headers/CromiteNativeUtils_jni.h"
+#include "components/flags_ui/pref_service_flags_storage.h"
+
+#include "base/android/jni_string.h"
+
+using base::android::JavaParamRef;
+
+static void JNI_CromiteNativeUtils_SetEnabled(JNIEnv* env,
+ const JavaParamRef<jstring>& featureName, jboolean isEnabled) {
+ flags_ui::PrefServiceFlagsStorage flags_storage(
+ g_browser_process->local_state());
+ std::set<std::string> entries = flags_storage.GetFlags();
+
+ auto internal_name = base::android::ConvertJavaStringToUTF8(env, featureName);
+ entries.erase(internal_name);
+ entries.erase(internal_name + "@1"); // enabled
+ entries.erase(internal_name + "@2"); // disabled
+
+ if (isEnabled)
+ entries.insert(internal_name + "@1");
+
+ flags_storage.SetFlags(entries);
+ flags_storage.CommitPendingWrites();
+}
diff --git a/chrome/browser/flags/android/cromite_native_utils.h b/chrome/browser/flags/android/cromite_native_utils.h
new file mode 100755
--- /dev/null
+++ b/chrome/browser/flags/android/cromite_native_utils.h
@@ -0,0 +1,14 @@
+#ifndef CHROME_BROWSER_FLAGS_ANDROID_CROMITE_NATIVE_UTILS_H_
+#define CHROME_BROWSER_FLAGS_ANDROID_CROMITE_NATIVE_UTILS_H_
+
+#include <jni.h>
+
+#include "base/feature_list.h"
+
+namespace chrome {
+namespace android {
+
+} // namespace android
+} // namespace chrome
+
+#endif // CHROME_BROWSER_FLAGS_ANDROID_CROMITE_NATIVE_UTILS_H_
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java
new file mode 100755
--- /dev/null
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java
@@ -0,0 +1,32 @@
+package org.chromium.chrome.browser.flags;
+
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.NativeMethods;
+
+public class CromiteNativeUtils {
+ /**
+ * Allows the modification of the flag value on the java side.
+ * Currently only the feature flag with on / off values is managed.
+ *
+ * @param featureName the feature name from ChromeFeatureList.
+ * @param flagName the flag name name from about_flags.cc.
+ */
+ public static void setFlagEnabled(String featureName, String flagName, Boolean newValue) {
+ CromiteNativeUtilsJni.get().setEnabled(flagName, newValue);
+
+ CachedFlag cachedFlag = ChromeFeatureList.sAllCachedFlags.get(featureName);
+ String preferenceName = cachedFlag.getSharedPreferenceKey();
+
+ SharedPreferencesManager.getInstance().writeBoolean(preferenceName, newValue);
+ cachedFlag.setValueReturnedOverride(newValue);
+ }
+
+ @NativeMethods
+ interface Natives {
+ void setEnabled(String featureName, boolean newValue);
+ }
+}
diff --git a/tools/grit/grit/grd_reader.py b/tools/grit/grit/grd_reader.py
--- a/tools/grit/grit/grd_reader.py
+++ b/tools/grit/grit/grd_reader.py