Commit e9dd7489 authored by Yusuf Ozuysal's avatar Yusuf Ozuysal Committed by Commit Bot

Adjust control height at top and bottom for Grid Tab Switcher

This moves away from a constant margin at top to read values from the
fullscreen manager. This way we fix Duet+Grid and also leave any other
users of TabList on their own to set the margins as needed. (The strip
mode for example won't use any margins at all).

BUG=934070

Change-Id: I810ced611eb0358757ed0f706f1c67a845b669f2
Reviewed-on: https://chromium-review.googlesource.com/c/1496436Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Commit-Queue: Yusuf Ozuysal <yusufo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#636685}
parent e883aea6
...@@ -9,6 +9,5 @@ ...@@ -9,6 +9,5 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:layout_marginTop="@dimen/control_container_height"
android:visibility="invisible" android:visibility="invisible"
android:background="@color/modern_primary_color"/> android:background="@color/modern_primary_color"/>
...@@ -733,7 +733,7 @@ public class ChromeTabbedActivity ...@@ -733,7 +733,7 @@ public class ChromeTabbedActivity
if (FeatureUtilities.isGridTabSwitcherEnabled(this)) { if (FeatureUtilities.isGridTabSwitcherEnabled(this)) {
mGridTabSwitcherCoordinator = new GridTabSwitcherCoordinator(this, mGridTabSwitcherCoordinator = new GridTabSwitcherCoordinator(this,
getLifecycleDispatcher(), getToolbarManager(), getTabModelSelector(), getLifecycleDispatcher(), getToolbarManager(), getTabModelSelector(),
getTabContentManager(), getCompositorViewHolder()); getTabContentManager(), getCompositorViewHolder(), getFullscreenManager());
mOverviewModeController.overrideOverviewModeController( mOverviewModeController.overrideOverviewModeController(
mGridTabSwitcherCoordinator.getOverviewModeController()); mGridTabSwitcherCoordinator.getOverviewModeController());
} }
......
...@@ -9,6 +9,7 @@ import android.content.Context; ...@@ -9,6 +9,7 @@ import android.content.Context;
import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeController; import org.chromium.chrome.browser.compositor.layouts.OverviewModeController;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.Destroyable; import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
...@@ -29,7 +30,7 @@ public class GridTabSwitcherCoordinator implements Destroyable { ...@@ -29,7 +30,7 @@ public class GridTabSwitcherCoordinator implements Destroyable {
public GridTabSwitcherCoordinator(Context context, public GridTabSwitcherCoordinator(Context context,
ActivityLifecycleDispatcher lifecycleDispatcher, ToolbarManager toolbarManager, ActivityLifecycleDispatcher lifecycleDispatcher, ToolbarManager toolbarManager,
TabModelSelector tabModelSelector, TabContentManager tabContentManager, TabModelSelector tabModelSelector, TabContentManager tabContentManager,
CompositorViewHolder compositorViewHolder) { CompositorViewHolder compositorViewHolder, ChromeFullscreenManager fullscreenManager) {
PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS); PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS);
mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context, mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context,
...@@ -38,7 +39,8 @@ public class GridTabSwitcherCoordinator implements Destroyable { ...@@ -38,7 +39,8 @@ public class GridTabSwitcherCoordinator implements Destroyable {
mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel, mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel,
mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind); mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind);
mMediator = new GridTabSwitcherMediator(this, containerViewModel, tabModelSelector); mMediator = new GridTabSwitcherMediator(
this, containerViewModel, tabModelSelector, fullscreenManager);
mLifecycleDispatcher = lifecycleDispatcher; mLifecycleDispatcher = lifecycleDispatcher;
mLifecycleDispatcher.register(this); mLifecycleDispatcher.register(this);
......
...@@ -5,12 +5,16 @@ ...@@ -5,12 +5,16 @@
package org.chromium.chrome.browser.tasks.tab_list_ui; package org.chromium.chrome.browser.tasks.tab_list_ui;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.BOTTOM_CONTROLS_HEIGHT;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.INITIAL_SCROLL_INDEX; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.INITIAL_SCROLL_INDEX;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.TOP_CONTROLS_HEIGHT;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeController; import org.chromium.chrome.browser.compositor.layouts.OverviewModeController;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
...@@ -38,6 +42,24 @@ class GridTabSwitcherMediator ...@@ -38,6 +42,24 @@ class GridTabSwitcherMediator
private final TabModelSelectorTabModelObserver mTabModelObserver; private final TabModelSelectorTabModelObserver mTabModelObserver;
private final TabModelSelectorObserver mTabModelSelectorObserver; private final TabModelSelectorObserver mTabModelSelectorObserver;
private final List<OverviewModeObserver> mObservers = new ArrayList<>(); private final List<OverviewModeObserver> mObservers = new ArrayList<>();
private final ChromeFullscreenManager mFullscreenManager;
private final ChromeFullscreenManager.FullscreenListener mFullscreenListener =
new ChromeFullscreenManager.FullscreenListener() {
@Override
public void onContentOffsetChanged(int offset) {}
@Override
public void onControlsOffsetChanged(
int topOffset, int bottomOffset, boolean needsAnimate) {}
@Override
public void onToggleOverlayVideoMode(boolean enabled) {}
@Override
public void onBottomControlsHeightChanged(int bottomControlsHeight) {
mContainerViewModel.set(BOTTOM_CONTROLS_HEIGHT, bottomControlsHeight);
}
};
/** /**
* In cases where a didSelectTab was due to closing a tab or switching models with a toggle, * In cases where a didSelectTab was due to closing a tab or switching models with a toggle,
...@@ -51,12 +73,15 @@ class GridTabSwitcherMediator ...@@ -51,12 +73,15 @@ class GridTabSwitcherMediator
* @param containerViewModel The {@link PropertyModel} to keep state on the View containing the * @param containerViewModel The {@link PropertyModel} to keep state on the View containing the
* grid. * grid.
* @param tabModelSelector {@link TabModelSelector} to observer for model and selection changes. * @param tabModelSelector {@link TabModelSelector} to observer for model and selection changes.
* @param fullscreenManager {@link FullscreenManager} to use.
*/ */
GridTabSwitcherMediator(GridTabSwitcherCoordinator coordinator, GridTabSwitcherMediator(GridTabSwitcherCoordinator coordinator,
PropertyModel containerViewModel, TabModelSelector tabModelSelector) { PropertyModel containerViewModel, TabModelSelector tabModelSelector,
ChromeFullscreenManager fullscreenManager) {
mCoordinator = coordinator; mCoordinator = coordinator;
mContainerViewModel = containerViewModel; mContainerViewModel = containerViewModel;
mTabModelSelector = tabModelSelector; mTabModelSelector = tabModelSelector;
mFullscreenManager = fullscreenManager;
mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() { mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() {
@Override @Override
...@@ -94,9 +119,14 @@ class GridTabSwitcherMediator ...@@ -94,9 +119,14 @@ class GridTabSwitcherMediator
} }
}; };
mFullscreenManager.addListener(mFullscreenListener);
mContainerViewModel.set(VISIBILITY_LISTENER, this); mContainerViewModel.set(VISIBILITY_LISTENER, this);
mContainerViewModel.set(IS_INCOGNITO, mTabModelSelector.getCurrentModel().isIncognito()); mContainerViewModel.set(IS_INCOGNITO, mTabModelSelector.getCurrentModel().isIncognito());
mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, true); mContainerViewModel.set(ANIMATE_VISIBILITY_CHANGES, true);
mContainerViewModel.set(TOP_CONTROLS_HEIGHT, fullscreenManager.getTopControlsHeight());
mContainerViewModel.set(
BOTTOM_CONTROLS_HEIGHT, fullscreenManager.getBottomControlsHeight());
} }
private void setVisibility(boolean isVisible) { private void setVisibility(boolean isVisible) {
...@@ -174,6 +204,7 @@ class GridTabSwitcherMediator ...@@ -174,6 +204,7 @@ class GridTabSwitcherMediator
*/ */
public void destroy() { public void destroy() {
mTabModelSelector.removeObserver(mTabModelSelectorObserver); mTabModelSelector.removeObserver(mTabModelSelectorObserver);
mFullscreenManager.removeListener(mFullscreenListener);
mTabModelObserver.destroy(); mTabModelObserver.destroy();
} }
} }
...@@ -5,11 +5,15 @@ ...@@ -5,11 +5,15 @@
package org.chromium.chrome.browser.tasks.tab_list_ui; package org.chromium.chrome.browser.tasks.tab_list_ui;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.ANIMATE_VISIBILITY_CHANGES;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.BOTTOM_CONTROLS_HEIGHT;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.INITIAL_SCROLL_INDEX; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.INITIAL_SCROLL_INDEX;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.TOP_CONTROLS_HEIGHT;
import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER;
import android.widget.FrameLayout;
import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
...@@ -36,6 +40,14 @@ class TabGridContainerViewBinder { ...@@ -36,6 +40,14 @@ class TabGridContainerViewBinder {
view.setVisibilityListener(model.get(VISIBILITY_LISTENER)); view.setVisibilityListener(model.get(VISIBILITY_LISTENER));
} else if (INITIAL_SCROLL_INDEX == propertyKey) { } else if (INITIAL_SCROLL_INDEX == propertyKey) {
view.scrollToPosition(model.get(INITIAL_SCROLL_INDEX)); view.scrollToPosition(model.get(INITIAL_SCROLL_INDEX));
} else if (TOP_CONTROLS_HEIGHT == propertyKey) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
params.topMargin = model.get(TOP_CONTROLS_HEIGHT);
view.requestLayout();
} else if (BOTTOM_CONTROLS_HEIGHT == propertyKey) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
params.bottomMargin = model.get(BOTTOM_CONTROLS_HEIGHT);
view.requestLayout();
} }
} }
} }
...@@ -24,6 +24,13 @@ class TabListContainerProperties { ...@@ -24,6 +24,13 @@ class TabListContainerProperties {
public static final PropertyModel.WritableBooleanPropertyKey ANIMATE_VISIBILITY_CHANGES = public static final PropertyModel.WritableBooleanPropertyKey ANIMATE_VISIBILITY_CHANGES =
new PropertyModel.WritableBooleanPropertyKey(); new PropertyModel.WritableBooleanPropertyKey();
public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {IS_VISIBLE, IS_INCOGNITO, public static final PropertyModel.WritableIntPropertyKey TOP_CONTROLS_HEIGHT =
VISIBILITY_LISTENER, INITIAL_SCROLL_INDEX, ANIMATE_VISIBILITY_CHANGES}; new PropertyModel.WritableIntPropertyKey();
public static final PropertyModel.WritableIntPropertyKey BOTTOM_CONTROLS_HEIGHT =
new PropertyModel.WritableIntPropertyKey();
public static final PropertyKey[] ALL_KEYS =
new PropertyKey[] {IS_VISIBLE, IS_INCOGNITO, VISIBILITY_LISTENER, INITIAL_SCROLL_INDEX,
ANIMATE_VISIBILITY_CHANGES, TOP_CONTROLS_HEIGHT, BOTTOM_CONTROLS_HEIGHT};
} }
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