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 @@
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginTop="@dimen/control_container_height"
android:visibility="invisible"
android:background="@color/modern_primary_color"/>
......@@ -733,7 +733,7 @@ public class ChromeTabbedActivity
if (FeatureUtilities.isGridTabSwitcherEnabled(this)) {
mGridTabSwitcherCoordinator = new GridTabSwitcherCoordinator(this,
getLifecycleDispatcher(), getToolbarManager(), getTabModelSelector(),
getTabContentManager(), getCompositorViewHolder());
getTabContentManager(), getCompositorViewHolder(), getFullscreenManager());
mOverviewModeController.overrideOverviewModeController(
mGridTabSwitcherCoordinator.getOverviewModeController());
}
......
......@@ -9,6 +9,7 @@ import android.content.Context;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeController;
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.lifecycle.Destroyable;
import org.chromium.chrome.browser.tabmodel.TabModel;
......@@ -29,7 +30,7 @@ public class GridTabSwitcherCoordinator implements Destroyable {
public GridTabSwitcherCoordinator(Context context,
ActivityLifecycleDispatcher lifecycleDispatcher, ToolbarManager toolbarManager,
TabModelSelector tabModelSelector, TabContentManager tabContentManager,
CompositorViewHolder compositorViewHolder) {
CompositorViewHolder compositorViewHolder, ChromeFullscreenManager fullscreenManager) {
PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS);
mTabGridCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.GRID, context,
......@@ -38,7 +39,8 @@ public class GridTabSwitcherCoordinator implements Destroyable {
mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel,
mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind);
mMediator = new GridTabSwitcherMediator(this, containerViewModel, tabModelSelector);
mMediator = new GridTabSwitcherMediator(
this, containerViewModel, tabModelSelector, fullscreenManager);
mLifecycleDispatcher = lifecycleDispatcher;
mLifecycleDispatcher.register(this);
......
......@@ -5,12 +5,16 @@
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.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.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.TOP_CONTROLS_HEIGHT;
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.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.TabModel;
......@@ -38,6 +42,24 @@ class GridTabSwitcherMediator
private final TabModelSelectorTabModelObserver mTabModelObserver;
private final TabModelSelectorObserver mTabModelSelectorObserver;
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,
......@@ -51,12 +73,15 @@ class GridTabSwitcherMediator
* @param containerViewModel The {@link PropertyModel} to keep state on the View containing the
* grid.
* @param tabModelSelector {@link TabModelSelector} to observer for model and selection changes.
* @param fullscreenManager {@link FullscreenManager} to use.
*/
GridTabSwitcherMediator(GridTabSwitcherCoordinator coordinator,
PropertyModel containerViewModel, TabModelSelector tabModelSelector) {
PropertyModel containerViewModel, TabModelSelector tabModelSelector,
ChromeFullscreenManager fullscreenManager) {
mCoordinator = coordinator;
mContainerViewModel = containerViewModel;
mTabModelSelector = tabModelSelector;
mFullscreenManager = fullscreenManager;
mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() {
@Override
......@@ -94,9 +119,14 @@ class GridTabSwitcherMediator
}
};
mFullscreenManager.addListener(mFullscreenListener);
mContainerViewModel.set(VISIBILITY_LISTENER, this);
mContainerViewModel.set(IS_INCOGNITO, mTabModelSelector.getCurrentModel().isIncognito());
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) {
......@@ -174,6 +204,7 @@ class GridTabSwitcherMediator
*/
public void destroy() {
mTabModelSelector.removeObserver(mTabModelSelectorObserver);
mFullscreenManager.removeListener(mFullscreenListener);
mTabModelObserver.destroy();
}
}
......@@ -5,11 +5,15 @@
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.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.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.TOP_CONTROLS_HEIGHT;
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.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
......@@ -36,6 +40,14 @@ class TabGridContainerViewBinder {
view.setVisibilityListener(model.get(VISIBILITY_LISTENER));
} else if (INITIAL_SCROLL_INDEX == propertyKey) {
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 {
public static final PropertyModel.WritableBooleanPropertyKey ANIMATE_VISIBILITY_CHANGES =
new PropertyModel.WritableBooleanPropertyKey();
public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {IS_VISIBLE, IS_INCOGNITO,
VISIBILITY_LISTENER, INITIAL_SCROLL_INDEX, ANIMATE_VISIBILITY_CHANGES};
public static final PropertyModel.WritableIntPropertyKey TOP_CONTROLS_HEIGHT =
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