Commit b04779b1 authored by Matt Simmons's avatar Matt Simmons Committed by Commit Bot

Add an intermediate TasksSurface layer.

R=yusufo@chromium.org

Bug: 985386
Change-Id: I3667a7881cc5c9b2046217a647603777593de0ed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1730865
Commit-Queue: Matt Simmons <mattsimmons@chromium.org>
Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#684116}
parent f9a85347
......@@ -13,6 +13,7 @@ import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil;
import org.chromium.chrome.browser.tasks.TasksSurface;
import org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcher;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider;
import org.chromium.chrome.browser.util.FeatureUtilities;
......@@ -24,15 +25,14 @@ import org.chromium.ui.modelutil.PropertyModel;
* surface and the bottom bar to switch between them.
*/
public class StartSurfaceCoordinator implements StartSurface {
private final GridTabSwitcher mGridTabSwitcher;
private final TasksSurface mTasksSurface;
private final StartSurfaceMediator mStartSurfaceMediator;
private BottomBarCoordinator mBottomBarCoordinator;
private ExploreSurfaceCoordinator mExploreSurfaceCoordinator;
private PropertyModel mPropertyModel;
public StartSurfaceCoordinator(ChromeActivity activity) {
mGridTabSwitcher =
TabManagementModuleProvider.getDelegate().createGridTabSwitcher(activity);
mTasksSurface = TabManagementModuleProvider.getDelegate().createTasksSurface(activity);
// Do not enable this feature when the bottom bar is enabled since it will
// overlap the start surface's bottom bar.
......@@ -45,7 +45,7 @@ public class StartSurfaceCoordinator implements StartSurface {
int bottomBarHeight =
ContextUtils.getApplicationContext().getResources().getDimensionPixelSize(
R.dimen.ss_bottom_bar_height);
mGridTabSwitcher.getTabGridDelegate().setBottomControlsHeight(bottomBarHeight);
mTasksSurface.getTabGridDelegate().setBottomControlsHeight(bottomBarHeight);
mPropertyModel = new PropertyModel(StartSurfaceProperties.ALL_KEYS);
mPropertyModel.set(BOTTOM_BAR_HEIGHT, bottomBarHeight);
......@@ -69,7 +69,7 @@ public class StartSurfaceCoordinator implements StartSurface {
activity, exploreSurfaceContainer, mPropertyModel);
}
mStartSurfaceMediator = new StartSurfaceMediator(mGridTabSwitcher.getGridController(),
mStartSurfaceMediator = new StartSurfaceMediator(mTasksSurface.getGridController(),
activity.getTabModelSelector(), mPropertyModel,
mExploreSurfaceCoordinator == null
? null
......@@ -79,8 +79,7 @@ public class StartSurfaceCoordinator implements StartSurface {
// Implements StartSurface.
@Override
public void setOnTabSelectingListener(StartSurface.OnTabSelectingListener listener) {
mGridTabSwitcher.setOnTabSelectingListener(
(GridTabSwitcher.OnTabSelectingListener) listener);
mTasksSurface.setOnTabSelectingListener(listener);
}
@Override
......@@ -90,6 +89,6 @@ public class StartSurfaceCoordinator implements StartSurface {
@Override
public GridTabSwitcher.TabGridDelegate getTabGridDelegate() {
return mGridTabSwitcher.getTabGridDelegate();
return mTasksSurface.getTabGridDelegate();
}
}
......@@ -20,6 +20,7 @@ android_library("java") {
no_build_hooks = true
java_files = [
"java/src/org/chromium/chrome/browser/tasks/TasksSurfaceCoordinator.java",
"java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtils.java",
"java/src/org/chromium/chrome/browser/tasks/tab_management/ClosableTabGridViewHolder.java",
"java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.java",
......
// Copyright 2019 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.tasks;
import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcher;
/**
* Interface for the Tasks-related Start Surface. The tasks surface displays information related to
* task management, such as the tab switcher, most visited tiles, and omnibox. Implemented by
* {@link TasksSurfaceCoordinator}.
*/
public interface TasksSurface {
/**
* Set the listener to get the {@link Layout#onTabSelecting} event from the Grid Tab Switcher.
* @param listener The {@link GridTabSwitcher.OnTabSelectingListener} to use.
*/
void setOnTabSelectingListener(GridTabSwitcher.OnTabSelectingListener listener);
/**
* @return Controller implementation for overview observation and visibility changes.
*/
GridTabSwitcher.GridController getGridController();
/**
* @return TabGridDelegate implementation to access the tab grid.
*/
GridTabSwitcher.TabGridDelegate getTabGridDelegate();
}
// Copyright 2019 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.tasks;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcher;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider;
/**
* Coordinator for displaying task-related surfaces (Grid Tab Switcher, MV Tiles, Omnibox, etc.).
* Concrete implementation of {@link TasksSurface}.
*/
public class TasksSurfaceCoordinator implements TasksSurface {
private final GridTabSwitcher mGridTabSwitcher;
private final LinearLayout mLayout;
private final FrameLayout mGridContainerLayout;
public TasksSurfaceCoordinator(ChromeActivity activity) {
mLayout = new LinearLayout(activity);
mLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
mLayout.setOrientation(LinearLayout.VERTICAL);
mGridContainerLayout = new FrameLayout(activity);
mGridContainerLayout.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
mLayout.addView(mGridContainerLayout);
activity.getCompositorViewHolder().addView(mLayout);
mGridTabSwitcher = TabManagementModuleProvider.getDelegate().createGridTabSwitcher(
activity, mGridContainerLayout);
}
@Override
public void setOnTabSelectingListener(GridTabSwitcher.OnTabSelectingListener listener) {
mGridTabSwitcher.setOnTabSelectingListener(listener);
}
@Override
public GridTabSwitcher.GridController getGridController() {
return mGridTabSwitcher.getGridController();
}
@Override
public GridTabSwitcher.TabGridDelegate getTabGridDelegate() {
return mGridTabSwitcher.getTabGridDelegate();
}
}
......@@ -9,6 +9,7 @@ import android.graphics.Bitmap;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.ViewGroup;
import org.chromium.base.Callback;
import org.chromium.base.VisibleForTesting;
......@@ -67,8 +68,8 @@ public class GridTabSwitcherCoordinator implements Destroyable, GridTabSwitcher,
ActivityLifecycleDispatcher lifecycleDispatcher, TabModelSelector tabModelSelector,
TabContentManager tabContentManager, CompositorViewHolder compositorViewHolder,
ChromeFullscreenManager fullscreenManager, TabCreatorManager tabCreatorManager,
MenuOrKeyboardActionController menuOrKeyboardActionController, Runnable backPress,
SnackbarManager.SnackbarManageable snackbarManageable) {
MenuOrKeyboardActionController menuOrKeyboardActionController,
SnackbarManager.SnackbarManageable snackbarManageable, @Nullable ViewGroup container) {
PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS);
mTabSelectionEditorCoordinator = new TabSelectionEditorCoordinator(
......@@ -104,10 +105,11 @@ public class GridTabSwitcherCoordinator implements Destroyable, GridTabSwitcher,
R.plurals.bottom_tab_grid_title_placeholder, numRelatedTabs, numRelatedTabs);
};
ViewGroup tabListContainerView = container != null ? container : compositorViewHolder;
mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context,
tabModelSelector, mMultiThumbnailCardProvider, titleProvider, true,
mMediator::getCreateGroupButtonOnClickListener, mMediator, null, null, null,
compositorViewHolder, compositorViewHolder.getDynamicResourceLoader(), true,
tabListContainerView, compositorViewHolder.getDynamicResourceLoader(), true,
COMPONENT_NAME);
mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel,
mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind);
......
......@@ -26,7 +26,6 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
......@@ -110,7 +109,6 @@ class GridTabSwitcherMediator implements GridTabSwitcher.GridController,
};
private final CompositorViewHolder mCompositorViewHolder;
private Layout mLayout;
private GridTabSwitcher.OnTabSelectingListener mOnTabSelectingListener;
private final TabSelectionEditorCoordinator
.TabSelectionEditorController mTabSelectionEditorController;
......
......@@ -11,7 +11,7 @@ import android.view.ViewGroup;
import org.chromium.chrome.tab_ui.R;
/**
* {@link TabGriViewHolder} for tab carousel. Owns the tab info card
* {@link TabGridViewHolder} for tab carousel. Owns the tab info card
* and the associated view hierarchy.
*/
final class TabCarouselViewHolder extends TabGridViewHolder {
......
......@@ -13,6 +13,7 @@ import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost;
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tasks.TasksSurface;
import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter;
import org.chromium.chrome.features.start_surface.StartSurface;
import org.chromium.components.module_installer.ModuleInterface;
......@@ -24,12 +25,20 @@ import org.chromium.components.module_installer.ModuleInterface;
@ModuleInterface(module = "tab_management",
impl = "org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegateImpl")
public interface TabManagementDelegate {
/**
* Create the {@link TasksSurface}
* @param activity The {@link ChromeActivity} that creates this surface.
* @return The {@TasksSurface}.
*/
TasksSurface createTasksSurface(ChromeActivity activity);
/**
* Create the {@link GridTabSwitcher}.
* @param activity The {@link ChromeActivity} creates this switcher.
* @param context The {@link Context} of this switcher.
* @param containerView The {@link ViewGroup} to add the switcher to.
* @return The {@link GridTabSwitcher}.
*/
GridTabSwitcher createGridTabSwitcher(ChromeActivity activity);
GridTabSwitcher createGridTabSwitcher(ChromeActivity context, ViewGroup containerView);
/**
* Create the {@link TabGroupUi}.
......
......@@ -18,6 +18,8 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost;
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.metrics.UmaSessionStats;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tasks.TasksSurface;
import org.chromium.chrome.browser.tasks.TasksSurfaceCoordinator;
import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter;
import org.chromium.chrome.features.start_surface.StartSurface;
import org.chromium.chrome.features.start_surface.StartSurfaceCoordinator;
......@@ -29,7 +31,12 @@ import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
@UsedByReflection("TabManagementModule")
public class TabManagementDelegateImpl implements TabManagementDelegate {
@Override
public GridTabSwitcher createGridTabSwitcher(ChromeActivity activity) {
public TasksSurface createTasksSurface(ChromeActivity activity) {
return new TasksSurfaceCoordinator(activity);
}
@Override
public GridTabSwitcher createGridTabSwitcher(ChromeActivity activity, ViewGroup containerView) {
if (UmaSessionStats.isMetricsServiceAvailable()) {
UmaSessionStats.registerSyntheticFieldTrial(
ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + SYNTHETIC_TRIAL_POSTFIX,
......@@ -38,7 +45,7 @@ public class TabManagementDelegateImpl implements TabManagementDelegate {
return new GridTabSwitcherCoordinator(activity, activity.getLifecycleDispatcher(),
activity.getTabModelSelector(), activity.getTabContentManager(),
activity.getCompositorViewHolder(), activity.getFullscreenManager(), activity,
activity.getMenuOrKeyboardActionController(), activity::onBackPressed, activity);
activity.getMenuOrKeyboardActionController(), activity, containerView);
}
@Override
......
......@@ -6,6 +6,7 @@ import(
"//chrome/android/features/start_surface/public/start_surface_public_java_sources.gni")
public_tab_management_java_sources = [
"//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurface.java",
"//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilter.java",
"//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcher.java",
"//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/SilenceLintErrors.java",
......
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