Commit 2336b655 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Chromium LUCI CQ

Toolbar: Move BottomControls to modularized target

This CL moves the classes for BottomControls MVC component plus
its layout xml to chrome/browser/ui/android/toolbar/.

Following dependencies on chrome_java were removed:

- ShareDelegate - was not in use.
- TabGroupUi - split to BottomControlsContentDelegate and extend
               from it.


Bug: 1127732
Change-Id: I40a630eba6924b65a3b90b8ab95f2814dacb70d4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2610411
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarMei Liang <meiliang@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841911}
parent 5e5678ff
......@@ -767,7 +767,6 @@ chrome_java_resources = [
"java/res/layout/bookmark_widget.xml",
"java/res/layout/bookmark_widget_icons_only.xml",
"java/res/layout/bookmark_widget_item.xml",
"java/res/layout/bottom_control_container.xml",
"java/res/layout/chip_view_menu_item.xml",
"java/res/layout/clear_browsing_data_button.xml",
"java/res/layout/clear_browsing_data_tabs.xml",
......
......@@ -1389,10 +1389,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java",
"java/src/org/chromium/chrome/browser/toolbar/ToolbarProgressBar.java",
"java/src/org/chromium/chrome/browser/toolbar/ToolbarTabControllerImpl.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsProperties.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsViewBinder.java",
"java/src/org/chromium/chrome/browser/toolbar/load_progress/LoadProgressCoordinator.java",
"java/src/org/chromium/chrome/browser/toolbar/load_progress/LoadProgressMediator.java",
"java/src/org/chromium/chrome/browser/toolbar/load_progress/LoadProgressProperties.java",
......
......@@ -205,6 +205,7 @@ android_library("java") {
"//chrome/browser/ui/android/favicon:java",
"//chrome/browser/ui/android/strings:ui_strings_grd",
"//chrome/browser/ui/android/theme:java",
"//chrome/browser/ui/android/toolbar:java",
"//chrome/browser/ui/messages/android:java",
"//chrome/browser/util:java",
"//components/browser_ui/android/bottomsheet:java",
......
......@@ -8,6 +8,7 @@ include_rules = [
"+chrome/browser/tabpersistence/android/java",
"+chrome/browser/ui/android/favicon/java",
"+chrome/browser/ui/android/theme/java",
"+chrome/browser/ui/android/toolbar/java",
"+chrome/browser/ui/messages/android/java",
"+components/browser_ui/styles/android",
"+components/browser_ui/widget/android",
......
......@@ -4,29 +4,15 @@
package org.chromium.chrome.browser.tasks.tab_management;
import android.app.Activity;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.toolbar.bottom.BottomControlsCoordinator;
import org.chromium.chrome.browser.toolbar.bottom.BottomControlsContentDelegate;
/**
* Interface for the Tab Groups related UI. This UI manages its own visibility through {@link
* BottomControlsCoordinator.BottomControlsVisibilityController}.
*/
public interface TabGroupUi {
/**
* Called by the ToolbarManager when the system back button is pressed.
* @return Whether or not the TabGroupUi consumed the event.
* Interface for the Tab Groups related UI.
*/
boolean onBackPressed();
void initializeWithNative(Activity activity,
BottomControlsCoordinator.BottomControlsVisibilityController visibilityController);
public interface TabGroupUi extends BottomControlsContentDelegate {
/**
* @return {@link Supplier} that provides dialog visibility.
*/
Supplier<Boolean> getTabGridDialogVisibilitySupplier();
void destroy();
}
......@@ -236,9 +236,6 @@
<dimen name="tablet_toolbar_start_padding">4dp</dimen>
<dimen name="toolbar_optional_button_animation_translation">10dp</dimen>
<!-- Bottom controls dimensions -->
<dimen name="bottom_controls_height">@dimen/min_touch_target_size</dimen>
<!-- Start surface toolbar dimensions -->
<dimen name="start_surface_toolbar_button_padding_to_button">8dp</dimen>
<dimen name="start_surface_toolbar_button_padding_to_edge">16dp</dimen>
......
......@@ -1529,12 +1529,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
if (TabUiFeatureUtilities.isTabGroupsAndroidEnabled()) {
dialogVisibilitySupplier = () -> {
assert mStartSurfaceSupplier.get() != null;
assert getToolbarManager().getBottomControlsCoordinator() != null;
assert getToolbarManager().getTabGroupUi() != null;
// Return true if dialog from either tab switcher or tab strip is visible.
Supplier<Boolean> tabGroupUiDialogVisibilitySupplier =
getToolbarManager()
.getBottomControlsCoordinator()
.getTabGridDialogVisibilitySupplier();
getToolbarManager().getTabGroupUi().getTabGridDialogVisibilitySupplier();
Supplier<Boolean> tabSwitcherDialogVisibilitySupplier =
mStartSurfaceSupplier.get().getTabGridDialogVisibilitySupplier();
boolean isDialogVisible = false;
......
......@@ -10,8 +10,10 @@ include_rules = [
specific_include_rules = {
'ToolbarManager.java': [
"+chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management",
"+chrome/android/java/src/org/chromium/chrome/browser",
"-chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java",
"+chrome/browser/ui/android/toolbar",
],
'ToolbarButtonInProductHelpController.java': [
"+chrome/android/java/src/org/chromium/chrome/browser",
......
......@@ -18,6 +18,7 @@ import android.view.View.OnAttachStateChangeListener;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.ViewStub;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -90,11 +91,14 @@ import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
import org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil;
import org.chromium.chrome.browser.tasks.tab_management.TabGroupUi;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider;
import org.chromium.chrome.browser.theme.ThemeColorProvider;
import org.chromium.chrome.browser.theme.ThemeColorProvider.ThemeColorObserver;
import org.chromium.chrome.browser.theme.ThemeColorProvider.TintObserver;
import org.chromium.chrome.browser.theme.TopUiThemeColorProvider;
import org.chromium.chrome.browser.toolbar.bottom.BottomControlsCoordinator;
import org.chromium.chrome.browser.toolbar.bottom.ScrollingBottomViewResourceFrameLayout;
import org.chromium.chrome.browser.toolbar.load_progress.LoadProgressCoordinator;
import org.chromium.chrome.browser.toolbar.menu_button.MenuButtonCoordinator;
import org.chromium.chrome.browser.toolbar.top.ActionModeController;
......@@ -183,7 +187,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
private FindToolbarManager mFindToolbarManager;
private LayoutManagerImpl mLayoutManager;
private final ObservableSupplier<ShareDelegate> mShareDelegateSupplier;
private TabObserver mTabObserver;
private BookmarkBridge.BookmarkModelObserver mBookmarksObserver;
......@@ -253,6 +256,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
private ObservableSupplierImpl<Boolean> mOverlayPanelVisibilitySupplier =
new ObservableSupplierImpl<>();
private TabGroupUi mTabGroupUi;
private static class TabObscuringCallback implements Callback<Boolean> {
private final TabObscuringHandler mTabObscuringHandler;
/** A token held while the toolbar/omnibox is obscuring all visible tabs. */
......@@ -350,7 +355,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
mFullscreenManager = fullscreenManager;
mActionBarDelegate = new ViewShiftingActionBarDelegate(activity.getSupportActionBar(),
controlContainer, activity.findViewById(R.id.action_bar_black_background));
mShareDelegateSupplier = shareDelegateSupplier;
mCanAnimateNativeBrowserControls = canAnimateNativeBrowserControls;
mScrimCoordinator = scrimCoordinator;
mTabModelSelectorSupplier = tabModelSelectorSupplier;
......@@ -996,19 +1000,24 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
* Enable the bottom controls.
*/
public void enableBottomControls() {
View root = ((ViewStub) mActivity.findViewById(R.id.bottom_controls_stub)).inflate();
mTabGroupUi = TabManagementModuleProvider.getDelegate().createTabGroupUi(
root.findViewById(R.id.bottom_container_slot), mAppThemeColorProvider,
mScrimCoordinator, mOmniboxFocusStateSupplier);
mBottomControlsCoordinatorSupplier.set(
new BottomControlsCoordinator(mActivity, mWindowAndroid, mLayoutManager,
mCompositorViewHolder.getResourceManager(), mBrowserControlsSizer,
mFullscreenManager, mActivity.findViewById(R.id.bottom_controls_stub),
mAppThemeColorProvider, mShareDelegateSupplier, mScrimCoordinator,
mOmniboxFocusStateSupplier, mOverlayPanelVisibilitySupplier));
mFullscreenManager, (ScrollingBottomViewResourceFrameLayout) root,
mAppThemeColorProvider, mTabGroupUi, mOverlayPanelVisibilitySupplier));
}
/**
* @return The coordinator for the bottom controls if it exists.
* TODO(https://crbug.com/1164216): Remove this getter in favor of extracting tab group
* feature details from ChromeTabbedActivity directly.
* @return The coordinator for the tab group UI if it exists.
*/
public BottomControlsCoordinator getBottomControlsCoordinator() {
return mBottomControlsCoordinatorSupplier.get();
public TabGroupUi getTabGroupUi() {
return mTabGroupUi;
}
/**
......
......@@ -18,6 +18,11 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/toolbar/ToolbarProgressBarAnimatingView.java",
"java/src/org/chromium/chrome/browser/toolbar/ToolbarTabController.java",
"java/src/org/chromium/chrome/browser/toolbar/VoiceToolbarButtonController.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsContentDelegate.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsCoordinator.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsProperties.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsViewBinder.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewResourceFrameLayout.java",
"java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewSceneLayer.java",
"java/src/org/chromium/chrome/browser/toolbar/top/ActionModeController.java",
......@@ -47,6 +52,7 @@ android_library("java") {
"//third_party/android_deps:android_support_v7_appcompat_java",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//ui/android:ui_full_java",
"//ui/android:ui_utils_java",
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
resources_package = "org.chromium.chrome.browser.toolbar"
......@@ -63,6 +69,7 @@ android_resources("java_resources") {
"java/res/drawable-xhdpi/btn_toolbar_home.png",
"java/res/drawable-xxhdpi/btn_toolbar_home.png",
"java/res/drawable-xxxhdpi/btn_toolbar_home.png",
"java/res/layout/bottom_control_container.xml",
"java/res/layout/control_container.xml",
"java/res/values-sw600dp/dimens.xml",
"java/res/values/dimens.xml",
......
......@@ -6,4 +6,7 @@
<resources>
<!-- Tab Strip Dimensions -->
<dimen name="tab_strip_height">0dp</dimen>
<!-- Bottom controls dimensions -->
<dimen name="bottom_controls_height">@dimen/min_touch_target_size</dimen>
</resources>
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.toolbar.bottom;
import android.app.Activity;
/**
* Interface for the bottom controls content UI. This UI delegates various operations to
* the implementation. This UI manages its own visibility through
* {@link BottomControlsCoordinator.BottomControlsVisibilityController}.
*/
public interface BottomControlsContentDelegate {
/**
* Called by the ToolbarManager when the system back button is pressed.
* @return Whether or not the TabGroupUi consumed the event.
*/
boolean onBackPressed();
/**
* Initialize the delegate on native initialization.
* @param activity Activity for the delegate.
* @param visibilityController Bottom controls visibility controller.
*/
void initializeWithNative(Activity activity,
BottomControlsCoordinator.BottomControlsVisibilityController visibilityController);
/** Destroy the delegate. */
void destroy();
}
......@@ -8,24 +8,17 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import androidx.annotation.Nullable;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.browser_controls.BrowserControlsSizer;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.layouts.LayoutManager;
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.tasks.tab_management.TabGroupUi;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import org.chromium.chrome.browser.theme.ThemeColorProvider;
import org.chromium.chrome.browser.toolbar.R;
import org.chromium.chrome.browser.toolbar.bottom.BottomControlsViewBinder.ViewHolder;
import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
......@@ -50,8 +43,8 @@ public class BottomControlsCoordinator {
/** The mediator that handles events from outside the bottom controls. */
private final BottomControlsMediator mMediator;
/** The coordinator for the split toolbar's bottom toolbar component. */
private @Nullable TabGroupUi mTabGroupUi;
/** The Delegate for the split toolbar's bottom toolbar component UI operation. */
private @Nullable BottomControlsContentDelegate mContentDelegate;
/**
* Build the coordinator that manages the bottom controls.
......@@ -62,10 +55,7 @@ public class BottomControlsCoordinator {
* @param fullscreenManager A {@link FullscreenManager} to listen for fullscreen changes.
* @param stub The bottom controls {@link ViewStub} to inflate.
* @param themeColorProvider The {@link ThemeColorProvider} for the bottom toolbar.
* @param shareDelegateSupplier The supplier for the {@link ShareDelegate} the bottom controls
* should use to share content.
* @param scrimCoordinator The {@link ScrimCoordinator} to control scrim view.
* @param omniboxFocusStateSupplier Supplier to access the focus state of the omnibox.
* @param contentDelegate Delegate for bottom controls UI operations.
* @param overlayPanelVisibilitySupplier Notifies overlay panel visibility event.
* @param resourceManager A {@link ResourceManager} for loading textures into the compositor.
* @param layoutManager A {@link LayoutManagerImpl} to attach overlays to.
......@@ -73,15 +63,10 @@ public class BottomControlsCoordinator {
@SuppressLint("CutPasteId") // Not actually cut and paste since it's View vs ViewGroup.
public BottomControlsCoordinator(Activity activity, WindowAndroid windowAndroid,
LayoutManager layoutManager, ResourceManager resourceManager,
BrowserControlsSizer controlsSizer, FullscreenManager fullscreenManager, ViewStub stub,
ThemeColorProvider themeColorProvider,
ObservableSupplier<ShareDelegate> shareDelegateSupplier,
ScrimCoordinator scrimCoordinator,
ObservableSupplier<Boolean> omniboxFocusStateSupplier,
BrowserControlsSizer controlsSizer, FullscreenManager fullscreenManager,
ScrollingBottomViewResourceFrameLayout root, ThemeColorProvider themeColorProvider,
BottomControlsContentDelegate contentDelegate,
ObservableSupplier<Boolean> overlayPanelVisibilitySupplier) {
final ScrollingBottomViewResourceFrameLayout root =
(ScrollingBottomViewResourceFrameLayout) stub.inflate();
PropertyModel model = new PropertyModel(BottomControlsProperties.ALL_KEYS);
ScrollingBottomViewSceneLayer sceneLayer =
......@@ -103,12 +88,7 @@ public class BottomControlsCoordinator {
resourceManager.getDynamicResourceLoader().registerResource(
root.getId(), root.getResourceAdapter());
if (TabUiFeatureUtilities.isTabGroupsAndroidEnabled()
|| TabUiFeatureUtilities.isConditionalTabStripEnabled()) {
mTabGroupUi = TabManagementModuleProvider.getDelegate().createTabGroupUi(
root.findViewById(R.id.bottom_container_slot), themeColorProvider,
scrimCoordinator, omniboxFocusStateSupplier);
}
mContentDelegate = contentDelegate;
Toast.setGlobalExtraYOffset(
root.getResources().getDimensionPixelSize(bottomControlsHeightId));
......@@ -119,8 +99,8 @@ public class BottomControlsCoordinator {
sceneLayer.setIsVisible(mMediator.isCompositedViewVisible());
layoutManager.addSceneOverlay(sceneLayer);
if (mTabGroupUi != null) {
mTabGroupUi.initializeWithNative(activity, mMediator::setBottomControlsVisible);
if (mContentDelegate != null) {
mContentDelegate.initializeWithNative(activity, mMediator::setBottomControlsVisible);
}
}
......@@ -143,24 +123,14 @@ public class BottomControlsCoordinator {
* @return Whether or not the back press event is consumed here.
*/
public boolean onBackPressed() {
return mTabGroupUi != null && mTabGroupUi.onBackPressed();
return mContentDelegate != null && mContentDelegate.onBackPressed();
}
/**
* Clean up any state when the bottom controls component is destroyed.
*/
public void destroy() {
if (mTabGroupUi != null) mTabGroupUi.destroy();
if (mContentDelegate != null) mContentDelegate.destroy();
mMediator.destroy();
}
/**
* @return {@link Supplier} that provides dialog visibility.
*/
public Supplier<Boolean> getTabGridDialogVisibilitySupplier() {
if (mTabGroupUi == null) {
return null;
}
return mTabGroupUi.getTabGridDialogVisibilitySupplier();
}
}
......@@ -6,7 +6,7 @@ package org.chromium.chrome.browser.toolbar.bottom;
import android.view.View;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.toolbar.R;
import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment