From b097f5cad4a9cb21c60818cd0ee1ed9eb1fed033 Mon Sep 17 00:00:00 2001 From: samartnik Date: Mon, 19 Sep 2022 17:27:52 -0400 Subject: [PATCH] [Android] Added check for Tab switcher on return flag --- android/brave_java_sources.gni | 1 + android/java/apk_for_test.flags | 4 ++++ .../chrome/browser/BraveFeatureUtil.java | 5 +++++ .../chromium/chrome/browser/BraveHelper.java | 4 ++++ .../chrome/browser/app/BraveActivity.java | 2 ++ .../tasks/BraveReturnToChromeUtil.java | 19 ++++++++++++++++ .../chromium/chrome/browser/BytecodeTest.java | 3 +++ build/android/bytecode/BUILD.gn | 1 + .../org/brave/bytecode/BraveClassAdapter.java | 1 + .../BraveReturnToChromeUtilClassAdapter.java | 22 +++++++++++++++++++ 10 files changed, 62 insertions(+) create mode 100644 android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java create mode 100644 build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 596b7db13f8e..6f8ed2623935 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -314,6 +314,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/sync/BraveSyncDevices.java", "../../brave/android/java/org/chromium/chrome/browser/sync/settings/BraveManageSyncSettings.java", "../../brave/android/java/org/chromium/chrome/browser/tabmodel/BraveTabCreator.java", + "../../brave/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java", "../../brave/android/java/org/chromium/chrome/browser/toolbar/BraveHomeButton.java", "../../brave/android/java/org/chromium/chrome/browser/toolbar/BraveIncognitoToggleTabLayout.java", "../../brave/android/java/org/chromium/chrome/browser/toolbar/BraveToolbarManager.java", diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index ba9056276c9e..f489969de27d 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -581,3 +581,7 @@ -keep class org.chromium.chrome.browser.crash.BravePureJavaExceptionReporter { public (...); } + +-keep class org.chromium.chrome.browser.tasks.ReturnToChromeUtil { + *** shouldShowTabSwitcher(...); +} diff --git a/android/java/org/chromium/chrome/browser/BraveFeatureUtil.java b/android/java/org/chromium/chrome/browser/BraveFeatureUtil.java index 6ed3dc49df0e..6f693685272a 100644 --- a/android/java/org/chromium/chrome/browser/BraveFeatureUtil.java +++ b/android/java/org/chromium/chrome/browser/BraveFeatureUtil.java @@ -7,9 +7,14 @@ import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; +import org.chromium.chrome.browser.flags.CachedFlag; +import org.chromium.chrome.browser.flags.ChromeFeatureList; @JNINamespace("chrome::android") public abstract class BraveFeatureUtil { + public static final CachedFlag sTabSwitcherOnReturn = + new CachedFlag(ChromeFeatureList.TAB_SWITCHER_ON_RETURN, false); + public static void enableFeature( String featureName, boolean enabled, boolean fallbackToDefault) { BraveFeatureUtilJni.get().enableFeature(featureName, enabled, fallbackToDefault); diff --git a/android/java/org/chromium/chrome/browser/BraveHelper.java b/android/java/org/chromium/chrome/browser/BraveHelper.java index e58d1c8454f5..d471342420b4 100644 --- a/android/java/org/chromium/chrome/browser/BraveHelper.java +++ b/android/java/org/chromium/chrome/browser/BraveHelper.java @@ -39,4 +39,8 @@ public static void maybeMigrateSettings() { BravePrefServiceBridge.getInstance().setDesktopModeEnabled(false); } } + + public static void cacheNativeFeatures() { + BraveFeatureUtil.sTabSwitcherOnReturn.cacheFeature(); + } } diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java index 07dd3d1c2ff6..cc21cd51c21a 100644 --- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java +++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java @@ -78,6 +78,7 @@ import org.chromium.chrome.browser.ApplicationLifetime; import org.chromium.chrome.browser.BraveAdFreeCalloutDialogFragment; import org.chromium.chrome.browser.BraveAdaptiveCaptchaUtils; +import org.chromium.chrome.browser.BraveFeatureUtil; import org.chromium.chrome.browser.BraveHelper; import org.chromium.chrome.browser.BraveRelaunchUtils; import org.chromium.chrome.browser.BraveRewardsHelper; @@ -758,6 +759,7 @@ public void finishNativeInitialization() { BraveVpnNativeWorker.getInstance().reloadPurchasedState(); BraveHelper.maybeMigrateSettings(); + BraveHelper.cacheNativeFeatures(); PrefChangeRegistrar mPrefChangeRegistrar = new PrefChangeRegistrar(); mPrefChangeRegistrar.addObserver(BravePref.SCHEDULED_CAPTCHA_ID, this); diff --git a/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java b/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java new file mode 100644 index 000000000000..f216b731c957 --- /dev/null +++ b/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java @@ -0,0 +1,19 @@ +/* Copyright (c) 2022 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.chromium.chrome.browser.tasks; + +import org.chromium.chrome.browser.BraveFeatureUtil; +import org.chromium.chrome.browser.flags.ChromeFeatureList; + +public final class BraveReturnToChromeUtil { + public static boolean shouldShowTabSwitcher(final long lastBackgroundedTimeMillis) { + if (!BraveFeatureUtil.sTabSwitcherOnReturn.isEnabled()) { + return false; + } + + return ReturnToChromeUtil.shouldShowTabSwitcher(lastBackgroundedTimeMillis); + } +} diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index 7192861399ef..8ab8df41cd7e 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -284,6 +284,7 @@ public void testClassesExist() throws Exception { Assert.assertTrue(classExists("org/chromium/chrome/browser/omnibox/LocationBarMediator")); Assert.assertTrue( classExists("org/chromium/chrome/browser/omnibox/BraveLocationBarMediator")); + Assert.assertTrue(classExists("org/chromium/chrome/browser/tasks/ReturnToChromeUtil")); } @Test @@ -420,6 +421,8 @@ public void testMethodsExist() throws Exception { "onAssistantVoiceSearchServiceChanged", false, null)); Assert.assertTrue(methodExists("org/chromium/chrome/browser/omnibox/LocationBarMediator", "shouldShowDeleteButton", false, null)); + Assert.assertTrue(methodExists("org/chromium/chrome/browser/tasks/ReturnToChromeUtil", + "shouldShowTabSwitcher", true, boolean.class, long.class)); } @Test diff --git a/build/android/bytecode/BUILD.gn b/build/android/bytecode/BUILD.gn index 425d71ee8268..c6aca59165aa 100644 --- a/build/android/bytecode/BUILD.gn +++ b/build/android/bytecode/BUILD.gn @@ -54,6 +54,7 @@ java_binary("java_bytecode_rewriter") { "//brave/build/android/bytecode/java/org/brave/bytecode/BravePureJavaExceptionReporterClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveQueryTileSectionClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveReaderModeManagerClassAdapter.java", + "//brave/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSearchEngineAdapterClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveSettingsLauncherImplClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveShareDelegateImplClassAdapter.java", diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index 6c5535b0a3f8..fd348b74e28e 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -54,6 +54,7 @@ public static ClassVisitor createAdapter(ClassVisitor chain) { chain = new BravePureJavaExceptionReporterClassAdapter(chain); chain = new BraveQueryTileSectionClassAdapter(chain); chain = new BraveReaderModeManagerClassAdapter(chain); + chain = new BraveReturnToChromeUtilClassAdapter(chain); chain = new BraveSearchEngineAdapterClassAdapter(chain); chain = new BraveSettingsLauncherImplClassAdapter(chain); chain = new BraveShareDelegateImplClassAdapter(chain); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java new file mode 100644 index 000000000000..6d2f8b26b4fc --- /dev/null +++ b/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java @@ -0,0 +1,22 @@ +/* Copyright (c) 2022 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.brave.bytecode; + +import org.objectweb.asm.ClassVisitor; + +public class BraveReturnToChromeUtilClassAdapter extends BraveClassVisitor { + static String sReturnToChromeUtilClassName = + "org/chromium/chrome/browser/tasks/ReturnToChromeUtil"; + static String sBraveReturnToChromeUtilClassName = + "org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil"; + + public BraveReturnToChromeUtilClassAdapter(ClassVisitor visitor) { + super(visitor); + + changeMethodOwner(sReturnToChromeUtilClassName, "shouldShowTabSwitcher", + sBraveReturnToChromeUtilClassName); + } +}