Skip to content

Commit

Permalink
Merge pull request #25310 from jagadeshjai/feature__toggle_for_show_u…
Browse files Browse the repository at this point in the history
…ndo_bar

[Android] Add an option to Show/Hide Undo bar when tab[s] closed.
  • Loading branch information
bsclifton authored Oct 21, 2024
2 parents 7c69785 + 2e337e7 commit 0d17590
Show file tree
Hide file tree
Showing 12 changed files with 109 additions and 0 deletions.
1 change: 1 addition & 0 deletions android/brave_java_sources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -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/BraveUndoBarControllerBase.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",
Expand Down
4 changes: 4 additions & 0 deletions android/java/apk_for_test.flags
Original file line number Diff line number Diff line change
Expand Up @@ -892,6 +892,10 @@
public <init>(...);
}

-keep class org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController {
*** showUndoBar(...);
}

-keep class org.chromium.chrome.browser.tabbed_mode.TabbedNavigationBarColorController {
*** mContext;
*** mTabModelSelector;
Expand Down
2 changes: 2 additions & 0 deletions android/java/org/chromium/base/BravePreferenceKeys.java
Original file line number Diff line number Diff line change
Expand Up @@ -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_WHEN_TABS_CLOSED = "show_undo_when_tabs_closed";

/*
* Checks if preference key is used in Brave.
* It's no op currently. We might reconsider
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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_WHEN_TABS_CLOSED = "show_undo_when_tabs_closed";

private BraveRewardsNativeWorker mBraveRewardsNativeWorker;

Expand Down Expand Up @@ -172,6 +173,17 @@ public void onActivityCreated(Bundle savedInstanceState) {
.setChecked(BraveMultiWindowUtils.shouldEnableMultiWindows());
}
}

ChromeSwitchPreference showUndoButtonOnTabClosed =
(ChromeSwitchPreference) findPreference(PREF_SHOW_UNDO_WHEN_TABS_CLOSED);
if (showUndoButtonOnTabClosed != null) {
showUndoButtonOnTabClosed.setOnPreferenceChangeListener(this);
((ChromeSwitchPreference) showUndoButtonOnTabClosed)
.setChecked(
ChromeSharedPreferences.getInstance()
.readBoolean(
BravePreferenceKeys.SHOW_UNDO_WHEN_TABS_CLOSED, true));
}
}

@Override
Expand Down Expand Up @@ -257,6 +269,10 @@ public void onDismiss() {
}
}
BraveMultiWindowUtils.updateEnableMultiWindows((boolean) newValue);
} else if (PREF_SHOW_UNDO_WHEN_TABS_CLOSED.equals(key)) {
ChromeSharedPreferences.getInstance()
.writeBoolean(
BravePreferenceKeys.SHOW_UNDO_WHEN_TABS_CLOSED, (boolean) newValue);
}
if (shouldRelaunch) {
BraveRelaunchUtils.askForRelaunch(getActivity());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/* 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 org.chromium.base.BravePreferenceKeys;
import org.chromium.base.BraveReflectionUtil;
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;

import java.util.List;

public class BraveUndoBarControllerBase implements SnackbarManager.SnackbarController {
public void showUndoBar(List<Tab> closedTabs, boolean isAllTabs) {
boolean showUndoBar =
ChromeSharedPreferences.getInstance()
.readBoolean(BravePreferenceKeys.SHOW_UNDO_WHEN_TABS_CLOSED, true);
if (!showUndoBar) {
if (closedTabs.isEmpty()) {
return;
}
Object actionData = closedTabs.size() == 1 ? closedTabs.get(0).getId() : closedTabs;
onDismissNoAction(actionData);
return;
}

BraveReflectionUtil.invokeMethod(
UndoBarController.class,
this,
"showUndoBar",
List.class,
closedTabs,
boolean.class,
isAllTabs);
}
}
4 changes: 4 additions & 0 deletions android/java/proguard.flags
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@
*** mReferenceButtonData;
}

-keep class org.chromium.chrome.browser.undo_tab_close_snackbar.UndoBarController {
*** showUndoBar(...);
}

-keep class org.chromium.chrome.browser.tabbed_mode.TabbedNavigationBarColorController {
*** getNavigationBarColor(...);
}
6 changes: 6 additions & 0 deletions android/java/res/xml/appearance_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@
android:title="@string/enable_multi_windows_title"
android:summary="@string/enable_multi_windows_summary" />

<org.chromium.components.browser_ui.settings.ChromeSwitchPreference
android:key="show_undo_when_tabs_closed"
android:title="@string/show_undo_when_tabs_closed"
android:summaryOn="@string/text_on"
android:summaryOff="@string/text_off" />

<Preference
android:fragment="org.chromium.chrome.browser.night_mode.settings.BraveThemePreferences"
android:key="ui_theme"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -830,6 +830,15 @@ public void testMethodsExist() throws Exception {
true,
int.class,
Context.class));
Assert.assertTrue(
methodExists(
"org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController",
"showUndoBar",
MethodModifier.REGULAR,
true,
void.class,
List.class,
boolean.class));
Assert.assertTrue(
methodExists(
"org/chromium/chrome/browser/notifications/NotificationPlatformBridge",
Expand Down
3 changes: 3 additions & 0 deletions browser/ui/android/strings/android_brave_strings.grd
Original file line number Diff line number Diff line change
Expand Up @@ -4063,6 +4063,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne
<message name="IDS_UPDATE_FILTER_LIST_FAIL_TEXT" desc="Text to notify users for the failure of updating filterlist">
Filter list could not be updated. Please try again
</message>
<message name="IDS_SHOW_UNDO_WHEN_TABS_CLOSED" desc="Menu item to show undo button when tabs are closed">
Show undo button when tabs are closed
</message>
</messages>
</release>
</grit>
1 change: 1 addition & 0 deletions build/android/bytecode/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ 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/BraveUndoBarControllerBaseClassAdapter.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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ public static ClassVisitor createAdapter(ClassVisitor chain) {
chain = new BraveToolbarManagerClassAdapter(chain);
chain = new BraveToolbarSwipeLayoutClassAdapter(chain);
chain = new BraveTopToolbarCoordinatorClassAdapter(chain);
chain = new BraveUndoBarControllerBaseClassAdapter(chain);
chain = new BraveVariationsSeedFetcherClassAdapter(chain);
chain = new BraveWebsiteClassAdapter(chain);
chain = new BraveWebsitePermissionsFetcherClassAdapter(chain);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/* 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 BraveUndoBarControllerBaseClassAdapter extends BraveClassVisitor {
static String sUndoBarController =
"org/chromium/chrome/browser/undo_tab_close_snackbar/UndoBarController";
static String sBraveUndoBarControllerBase =
"org/chromium/chrome/browser/undo_tab_close_snackbar/BraveUndoBarControllerBase";

public BraveUndoBarControllerBaseClassAdapter(ClassVisitor visitor) {
super(visitor);

changeSuperName(sUndoBarController, sBraveUndoBarControllerBase);

changeMethodOwner(sUndoBarController, "showUndoBar", sBraveUndoBarControllerBase);
}
}

0 comments on commit 0d17590

Please sign in to comment.