diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index c32e8118d04..ed38f90b020 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -437,6 +437,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/toolbar/top/BraveTopToolbarCoordinator.java", "../../brave/android/java/org/chromium/chrome/browser/ui/messages/infobar/BraveSimpleConfirmInfoBarBuilder.java", "../../brave/android/java/org/chromium/chrome/browser/ui/system/BraveStatusBarColorController.java", + "../../brave/android/java/org/chromium/chrome/browser/undo_tab_close_snackbar/BraveUndoBarController.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/BravePackageReplacedBroadcastReceiver.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/BraveUpgradeJobIntentServiceImpl.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/NotificationIntent.java", diff --git a/android/java/org/chromium/base/BravePreferenceKeys.java b/android/java/org/chromium/base/BravePreferenceKeys.java index 71e7567de41..59bdfbfdbfb 100644 --- a/android/java/org/chromium/base/BravePreferenceKeys.java +++ b/android/java/org/chromium/base/BravePreferenceKeys.java @@ -79,6 +79,8 @@ public final class BravePreferenceKeys { public static final String DAY_ZERO_EXPT_FLAG = "day_zero_expt_flag"; + public static final String SHOW_UNDO_ON_TAB_CLOSED = "show_undo_on_tab_closed"; + /* * Checks if preference key is used in Brave. * It's no op currently. We might reconsider diff --git a/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java b/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java index adccd04cd4c..e815d468c7b 100644 --- a/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java +++ b/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java @@ -50,6 +50,7 @@ public class AppearancePreferences extends BravePreferenceFragment public static final String PREF_BRAVE_ENABLE_TAB_GROUPS = "brave_enable_tab_groups"; public static final String PREF_BRAVE_ENABLE_SPEEDREADER = "brave_enable_speedreader"; public static final String PREF_ENABLE_MULTI_WINDOWS = "enable_multi_windows"; + public static final String PREF_SHOW_UNDO_ON_TAB_CLOSED = "show_undo_on_tab_closed"; private BraveRewardsNativeWorker mBraveRewardsNativeWorker; @@ -172,6 +173,17 @@ public class AppearancePreferences extends BravePreferenceFragment .setChecked(BraveMultiWindowUtils.shouldEnableMultiWindows()); } } + + ChromeSwitchPreference showUndoButtonOnTabClosed = + (ChromeSwitchPreference) findPreference(PREF_SHOW_UNDO_ON_TAB_CLOSED); + if (showUndoButtonOnTabClosed != null) { + showUndoButtonOnTabClosed.setOnPreferenceChangeListener(this); + ((ChromeSwitchPreference) showUndoButtonOnTabClosed) + .setChecked( + ChromeSharedPreferences.getInstance() + .readBoolean( + BravePreferenceKeys.SHOW_UNDO_ON_TAB_CLOSED, true)); + } } @Override @@ -257,6 +269,9 @@ public class AppearancePreferences extends BravePreferenceFragment } } BraveMultiWindowUtils.updateEnableMultiWindows((boolean) newValue); + } else if (PREF_SHOW_UNDO_ON_TAB_CLOSED.equals(key)) { + ChromeSharedPreferences.getInstance() + .writeBoolean(BravePreferenceKeys.SHOW_UNDO_ON_TAB_CLOSED, (boolean) newValue); } if (shouldRelaunch) { BraveRelaunchUtils.askForRelaunch(getActivity()); diff --git a/android/java/org/chromium/chrome/browser/undo_tab_close_snackbar/BraveUndoBarController.java b/android/java/org/chromium/chrome/browser/undo_tab_close_snackbar/BraveUndoBarController.java new file mode 100644 index 00000000000..beeaaff5fcd --- /dev/null +++ b/android/java/org/chromium/chrome/browser/undo_tab_close_snackbar/BraveUndoBarController.java @@ -0,0 +1,40 @@ +/* Copyright (c) 2024 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 https://mozilla.org/MPL/2.0/. */ + +package org.chromium.chrome.browser.undo_tab_close_snackbar; + +import android.content.Context; + +import androidx.annotation.Nullable; + +import org.chromium.base.BravePreferenceKeys; +import org.chromium.base.supplier.Supplier; +import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarManageable; + +import java.util.List; + +public class BraveUndoBarController extends UndoBarController { + public BraveUndoBarController( + Context context, + TabModelSelector selector, + SnackbarManageable snackbarManageable, + @Nullable Supplier dialogVisibilitySupplier) { + super(context, selector, snackbarManageable, dialogVisibilitySupplier); + } + + @Override + protected void showUndoBar(List closedTabs, boolean isAllTabs) { + boolean should_show_undo_bar = + ChromeSharedPreferences.getInstance() + .readBoolean(BravePreferenceKeys.SHOW_UNDO_ON_TAB_CLOSED, true); + if (!should_show_undo_bar) { + return; + } + super.showUndoBar(closedTabs, isAllTabs); + } +} diff --git a/android/java/res/xml/appearance_preferences.xml b/android/java/res/xml/appearance_preferences.xml index 09caf59bcc4..3d1beea26ec 100644 --- a/android/java/res/xml/appearance_preferences.xml +++ b/android/java/res/xml/appearance_preferences.xml @@ -49,6 +49,12 @@ android:title="@string/enable_multi_windows_title" android:summary="@string/enable_multi_windows_summary" /> + + Filter list could not be updated. Please try again + + Show undo button on tab closed + diff --git a/build/android/bytecode/BUILD.gn b/build/android/bytecode/BUILD.gn index bee93c788d7..1497cf3ce43 100644 --- a/build/android/bytecode/BUILD.gn +++ b/build/android/bytecode/BUILD.gn @@ -120,6 +120,8 @@ java_binary("java_bytecode_rewriter") { "//brave/build/android/bytecode/java/org/brave/bytecode/BraveToolbarManagerClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveToolbarSwipeLayoutClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveTopToolbarCoordinatorClassAdapter.java", + "//brave/build/android/bytecode/java/org/brave/bytecode/BraveTranslateCompactInfoBarBaseClassAdapter.java", + "//brave/build/android/bytecode/java/org/brave/bytecode/BraveUndoBarControllerClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveVariationsSeedFetcherClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveWebsiteClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveWebsitePermissionsFetcherClassAdapter.java", diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index 27f27758831..bd1fc3c5749 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -122,6 +122,7 @@ public class BraveClassAdapter { chain = new BraveVariationsSeedFetcherClassAdapter(chain); chain = new BraveWebsiteClassAdapter(chain); chain = new BraveWebsitePermissionsFetcherClassAdapter(chain); + chain = new BraveUndoBarControllerClassAdapter(chain); return chain; } } diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveUndoBarControllerClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveUndoBarControllerClassAdapter.java new file mode 100644 index 00000000000..6a8e885fc68 --- /dev/null +++ b/build/android/bytecode/java/org/brave/bytecode/BraveUndoBarControllerClassAdapter.java @@ -0,0 +1,21 @@ +/* Copyright (c) 2024 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 https://mozilla.org/MPL/2.0/. */ + +package org.brave.bytecode; + +import org.objectweb.asm.ClassVisitor; + +public class BraveUndoBarControllerClassAdapter extends BraveClassVisitor { + static String sUndoBarControllerClassName = + "org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController"; + static String sBraveUndoBarControllerClassName = + "org/chromium/chrome/browser/undo_tab_close_snackbar/BraveUndoBarController"; + + public BraveUndoBarControllerClassAdapter(ClassVisitor visitor) { + super(visitor); + + redirectConstructor(sUndoBarControllerClassName, sBraveUndoBarControllerClassName); + } +} diff --git a/patches/chrome-android-java-src-org-chromium-chrome-browser-undo_tab_close_snackbar-UndoBarController.java.patch b/patches/chrome-android-java-src-org-chromium-chrome-browser-undo_tab_close_snackbar-UndoBarController.java.patch new file mode 100644 index 00000000000..01f52d63708 --- /dev/null +++ b/patches/chrome-android-java-src-org-chromium-chrome-browser-undo_tab_close_snackbar-UndoBarController.java.patch @@ -0,0 +1,13 @@ +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java b/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java +index b0367689a7a34a3cfc39d7c16433df338a7f23bb..939198410e3f56b1ff67b3c12f0016de1c983448 100644 +--- a/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController.java +@@ -154,7 +154,7 @@ public class UndoBarController implements SnackbarManager.SnackbarController { + * @param closedTabs A list of tabs that were closed. + * @param isAllTabs Whether all tabs were closed. + */ +- private void showUndoBar(List closedTabs, boolean isAllTabs) { ++ protected void showUndoBar(List closedTabs, boolean isAllTabs) { + if (closedTabs.isEmpty()) return; + + boolean singleTab = closedTabs.size() == 1;