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; ...@@ -13,6 +13,7 @@ import org.chromium.base.ContextUtils;
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil; 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.GridTabSwitcher;
import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider; import org.chromium.chrome.browser.tasks.tab_management.TabManagementModuleProvider;
import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.util.FeatureUtilities;
...@@ -24,15 +25,14 @@ import org.chromium.ui.modelutil.PropertyModel; ...@@ -24,15 +25,14 @@ import org.chromium.ui.modelutil.PropertyModel;
* surface and the bottom bar to switch between them. * surface and the bottom bar to switch between them.
*/ */
public class StartSurfaceCoordinator implements StartSurface { public class StartSurfaceCoordinator implements StartSurface {
private final GridTabSwitcher mGridTabSwitcher; private final TasksSurface mTasksSurface;
private final StartSurfaceMediator mStartSurfaceMediator; private final StartSurfaceMediator mStartSurfaceMediator;
private BottomBarCoordinator mBottomBarCoordinator; private BottomBarCoordinator mBottomBarCoordinator;
private ExploreSurfaceCoordinator mExploreSurfaceCoordinator; private ExploreSurfaceCoordinator mExploreSurfaceCoordinator;
private PropertyModel mPropertyModel; private PropertyModel mPropertyModel;
public StartSurfaceCoordinator(ChromeActivity activity) { public StartSurfaceCoordinator(ChromeActivity activity) {
mGridTabSwitcher = mTasksSurface = TabManagementModuleProvider.getDelegate().createTasksSurface(activity);
TabManagementModuleProvider.getDelegate().createGridTabSwitcher(activity);
// Do not enable this feature when the bottom bar is enabled since it will // Do not enable this feature when the bottom bar is enabled since it will
// overlap the start surface's bottom bar. // overlap the start surface's bottom bar.
...@@ -45,7 +45,7 @@ public class StartSurfaceCoordinator implements StartSurface { ...@@ -45,7 +45,7 @@ public class StartSurfaceCoordinator implements StartSurface {
int bottomBarHeight = int bottomBarHeight =
ContextUtils.getApplicationContext().getResources().getDimensionPixelSize( ContextUtils.getApplicationContext().getResources().getDimensionPixelSize(
R.dimen.ss_bottom_bar_height); R.dimen.ss_bottom_bar_height);
mGridTabSwitcher.getTabGridDelegate().setBottomControlsHeight(bottomBarHeight); mTasksSurface.getTabGridDelegate().setBottomControlsHeight(bottomBarHeight);
mPropertyModel = new PropertyModel(StartSurfaceProperties.ALL_KEYS); mPropertyModel = new PropertyModel(StartSurfaceProperties.ALL_KEYS);
mPropertyModel.set(BOTTOM_BAR_HEIGHT, bottomBarHeight); mPropertyModel.set(BOTTOM_BAR_HEIGHT, bottomBarHeight);
...@@ -69,7 +69,7 @@ public class StartSurfaceCoordinator implements StartSurface { ...@@ -69,7 +69,7 @@ public class StartSurfaceCoordinator implements StartSurface {
activity, exploreSurfaceContainer, mPropertyModel); activity, exploreSurfaceContainer, mPropertyModel);
} }
mStartSurfaceMediator = new StartSurfaceMediator(mGridTabSwitcher.getGridController(), mStartSurfaceMediator = new StartSurfaceMediator(mTasksSurface.getGridController(),
activity.getTabModelSelector(), mPropertyModel, activity.getTabModelSelector(), mPropertyModel,
mExploreSurfaceCoordinator == null mExploreSurfaceCoordinator == null
? null ? null
...@@ -79,8 +79,7 @@ public class StartSurfaceCoordinator implements StartSurface { ...@@ -79,8 +79,7 @@ public class StartSurfaceCoordinator implements StartSurface {
// Implements StartSurface. // Implements StartSurface.
@Override @Override
public void setOnTabSelectingListener(StartSurface.OnTabSelectingListener listener) { public void setOnTabSelectingListener(StartSurface.OnTabSelectingListener listener) {
mGridTabSwitcher.setOnTabSelectingListener( mTasksSurface.setOnTabSelectingListener(listener);
(GridTabSwitcher.OnTabSelectingListener) listener);
} }
@Override @Override
...@@ -90,6 +89,6 @@ public class StartSurfaceCoordinator implements StartSurface { ...@@ -90,6 +89,6 @@ public class StartSurfaceCoordinator implements StartSurface {
@Override @Override
public GridTabSwitcher.TabGridDelegate getTabGridDelegate() { public GridTabSwitcher.TabGridDelegate getTabGridDelegate() {
return mGridTabSwitcher.getTabGridDelegate(); return mTasksSurface.getTabGridDelegate();
} }
} }
...@@ -20,6 +20,7 @@ android_library("java") { ...@@ -20,6 +20,7 @@ android_library("java") {
no_build_hooks = true no_build_hooks = true
java_files = [ 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_groups/TabGroupUtils.java",
"java/src/org/chromium/chrome/browser/tasks/tab_management/ClosableTabGridViewHolder.java", "java/src/org/chromium/chrome/browser/tasks/tab_management/ClosableTabGridViewHolder.java",
"java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherCoordinator.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; ...@@ -9,6 +9,7 @@ import android.graphics.Bitmap;
import android.graphics.Rect; import android.graphics.Rect;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.view.ViewGroup;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
...@@ -67,8 +68,8 @@ public class GridTabSwitcherCoordinator implements Destroyable, GridTabSwitcher, ...@@ -67,8 +68,8 @@ public class GridTabSwitcherCoordinator implements Destroyable, GridTabSwitcher,
ActivityLifecycleDispatcher lifecycleDispatcher, TabModelSelector tabModelSelector, ActivityLifecycleDispatcher lifecycleDispatcher, TabModelSelector tabModelSelector,
TabContentManager tabContentManager, CompositorViewHolder compositorViewHolder, TabContentManager tabContentManager, CompositorViewHolder compositorViewHolder,
ChromeFullscreenManager fullscreenManager, TabCreatorManager tabCreatorManager, ChromeFullscreenManager fullscreenManager, TabCreatorManager tabCreatorManager,
MenuOrKeyboardActionController menuOrKeyboardActionController, Runnable backPress, MenuOrKeyboardActionController menuOrKeyboardActionController,
SnackbarManager.SnackbarManageable snackbarManageable) { SnackbarManager.SnackbarManageable snackbarManageable, @Nullable ViewGroup container) {
PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS); PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS);
mTabSelectionEditorCoordinator = new TabSelectionEditorCoordinator( mTabSelectionEditorCoordinator = new TabSelectionEditorCoordinator(
...@@ -104,10 +105,11 @@ public class GridTabSwitcherCoordinator implements Destroyable, GridTabSwitcher, ...@@ -104,10 +105,11 @@ public class GridTabSwitcherCoordinator implements Destroyable, GridTabSwitcher,
R.plurals.bottom_tab_grid_title_placeholder, numRelatedTabs, numRelatedTabs); R.plurals.bottom_tab_grid_title_placeholder, numRelatedTabs, numRelatedTabs);
}; };
ViewGroup tabListContainerView = container != null ? container : compositorViewHolder;
mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context, mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context,
tabModelSelector, mMultiThumbnailCardProvider, titleProvider, true, tabModelSelector, mMultiThumbnailCardProvider, titleProvider, true,
mMediator::getCreateGroupButtonOnClickListener, mMediator, null, null, null, mMediator::getCreateGroupButtonOnClickListener, mMediator, null, null, null,
compositorViewHolder, compositorViewHolder.getDynamicResourceLoader(), true, tabListContainerView, compositorViewHolder.getDynamicResourceLoader(), true,
COMPONENT_NAME); COMPONENT_NAME);
mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel, mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel,
mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind); mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind);
......
...@@ -26,7 +26,6 @@ import org.chromium.base.metrics.RecordHistogram; ...@@ -26,7 +26,6 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.compositor.CompositorViewHolder; 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.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager;
...@@ -110,7 +109,6 @@ class GridTabSwitcherMediator implements GridTabSwitcher.GridController, ...@@ -110,7 +109,6 @@ class GridTabSwitcherMediator implements GridTabSwitcher.GridController,
}; };
private final CompositorViewHolder mCompositorViewHolder; private final CompositorViewHolder mCompositorViewHolder;
private Layout mLayout;
private GridTabSwitcher.OnTabSelectingListener mOnTabSelectingListener; private GridTabSwitcher.OnTabSelectingListener mOnTabSelectingListener;
private final TabSelectionEditorCoordinator private final TabSelectionEditorCoordinator
.TabSelectionEditorController mTabSelectionEditorController; .TabSelectionEditorController mTabSelectionEditorController;
......
...@@ -11,7 +11,7 @@ import android.view.ViewGroup; ...@@ -11,7 +11,7 @@ import android.view.ViewGroup;
import org.chromium.chrome.tab_ui.R; 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. * and the associated view hierarchy.
*/ */
final class TabCarouselViewHolder extends TabGridViewHolder { final class TabCarouselViewHolder extends TabGridViewHolder {
......
...@@ -13,6 +13,7 @@ import org.chromium.chrome.browser.compositor.layouts.Layout; ...@@ -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.LayoutRenderHost;
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.tabmodel.TabModel; 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.browser.tasks.tab_groups.TabGroupModelFilter;
import org.chromium.chrome.features.start_surface.StartSurface; import org.chromium.chrome.features.start_surface.StartSurface;
import org.chromium.components.module_installer.ModuleInterface; import org.chromium.components.module_installer.ModuleInterface;
...@@ -24,12 +25,20 @@ import org.chromium.components.module_installer.ModuleInterface; ...@@ -24,12 +25,20 @@ import org.chromium.components.module_installer.ModuleInterface;
@ModuleInterface(module = "tab_management", @ModuleInterface(module = "tab_management",
impl = "org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegateImpl") impl = "org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegateImpl")
public interface TabManagementDelegate { 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}. * 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}. * @return The {@link GridTabSwitcher}.
*/ */
GridTabSwitcher createGridTabSwitcher(ChromeActivity activity); GridTabSwitcher createGridTabSwitcher(ChromeActivity context, ViewGroup containerView);
/** /**
* Create the {@link TabGroupUi}. * Create the {@link TabGroupUi}.
......
...@@ -18,6 +18,8 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; ...@@ -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.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.metrics.UmaSessionStats; import org.chromium.chrome.browser.metrics.UmaSessionStats;
import org.chromium.chrome.browser.tabmodel.TabModel; 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.browser.tasks.tab_groups.TabGroupModelFilter;
import org.chromium.chrome.features.start_surface.StartSurface; import org.chromium.chrome.features.start_surface.StartSurface;
import org.chromium.chrome.features.start_surface.StartSurfaceCoordinator; import org.chromium.chrome.features.start_surface.StartSurfaceCoordinator;
...@@ -29,7 +31,12 @@ import org.chromium.chrome.features.start_surface.StartSurfaceLayout; ...@@ -29,7 +31,12 @@ import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
@UsedByReflection("TabManagementModule") @UsedByReflection("TabManagementModule")
public class TabManagementDelegateImpl implements TabManagementDelegate { public class TabManagementDelegateImpl implements TabManagementDelegate {
@Override @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()) { if (UmaSessionStats.isMetricsServiceAvailable()) {
UmaSessionStats.registerSyntheticFieldTrial( UmaSessionStats.registerSyntheticFieldTrial(
ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + SYNTHETIC_TRIAL_POSTFIX, ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + SYNTHETIC_TRIAL_POSTFIX,
...@@ -38,7 +45,7 @@ public class TabManagementDelegateImpl implements TabManagementDelegate { ...@@ -38,7 +45,7 @@ public class TabManagementDelegateImpl implements TabManagementDelegate {
return new GridTabSwitcherCoordinator(activity, activity.getLifecycleDispatcher(), return new GridTabSwitcherCoordinator(activity, activity.getLifecycleDispatcher(),
activity.getTabModelSelector(), activity.getTabContentManager(), activity.getTabModelSelector(), activity.getTabContentManager(),
activity.getCompositorViewHolder(), activity.getFullscreenManager(), activity, activity.getCompositorViewHolder(), activity.getFullscreenManager(), activity,
activity.getMenuOrKeyboardActionController(), activity::onBackPressed, activity); activity.getMenuOrKeyboardActionController(), activity, containerView);
} }
@Override @Override
......
...@@ -6,6 +6,7 @@ import( ...@@ -6,6 +6,7 @@ import(
"//chrome/android/features/start_surface/public/start_surface_public_java_sources.gni") "//chrome/android/features/start_surface/public/start_surface_public_java_sources.gni")
public_tab_management_java_sources = [ 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_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/GridTabSwitcher.java",
"//chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/SilenceLintErrors.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