Index: chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerDocument.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerDocument.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerDocument.java |
deleted file mode 100644 |
index 35979938c7186e4a4aae50a11b21002f8f3f02db..0000000000000000000000000000000000000000 |
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerDocument.java |
+++ /dev/null |
@@ -1,450 +0,0 @@ |
-// Copyright 2015 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.compositor.layouts; |
- |
-import android.annotation.TargetApi; |
-import android.content.Context; |
-import android.graphics.RectF; |
-import android.os.Build; |
-import android.util.SparseArray; |
-import android.view.MotionEvent; |
-import android.view.ViewGroup; |
- |
-import org.chromium.chrome.browser.ChromeMobileApplication; |
-import org.chromium.chrome.browser.Tab; |
-import org.chromium.chrome.browser.UrlConstants; |
-import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.ContextualSearchPanel; |
-import org.chromium.chrome.browser.compositor.layouts.components.LayoutTab; |
-import org.chromium.chrome.browser.compositor.layouts.components.VirtualView; |
-import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.CascadeEventFilter; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.ContextualSearchEventFilter; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeEventFilter; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeEventFilter.ScrollDirection; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.EmptyEdgeSwipeHandler; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; |
-import org.chromium.chrome.browser.compositor.layouts.eventfilter.GestureHandler; |
-import org.chromium.chrome.browser.compositor.layouts.phone.ContextualSearchLayout; |
-import org.chromium.chrome.browser.compositor.overlays.SceneOverlay; |
-import org.chromium.chrome.browser.contextualsearch.ContextualSearchManagementDelegate; |
-import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager.ContextualSearchContentViewDelegate; |
-import org.chromium.chrome.browser.contextualsearch.ContextualSearchStaticEventFilter; |
-import org.chromium.chrome.browser.contextualsearch.ContextualSearchStaticEventFilter.ContextualSearchTapHandler; |
-import org.chromium.chrome.browser.device.DeviceClassManager; |
-import org.chromium.chrome.browser.dom_distiller.ReaderModeEdgeSwipeHandler; |
-import org.chromium.chrome.browser.dom_distiller.ReaderModePanel; |
-import org.chromium.chrome.browser.dom_distiller.ReaderModeStaticEventFilter; |
-import org.chromium.chrome.browser.dom_distiller.ReaderModeStaticEventFilter.ReaderModePanelSelector; |
-import org.chromium.chrome.browser.dom_distiller.ReaderModeStaticEventFilter.ReaderModeTapHandler; |
-import org.chromium.chrome.browser.fullscreen.FullscreenManager; |
-import org.chromium.chrome.browser.tab.ChromeTab; |
-import org.chromium.chrome.browser.tabmodel.TabCreatorManager; |
-import org.chromium.chrome.browser.tabmodel.TabModel; |
-import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
-import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver; |
-import org.chromium.chrome.browser.tabmodel.TabModelUtils; |
-import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelSelector; |
-import org.chromium.chrome.browser.util.FeatureUtilities; |
-import org.chromium.content.browser.ContentViewCore; |
-import org.chromium.ui.resources.dynamics.DynamicResourceLoader; |
- |
-import java.util.List; |
- |
-/** |
- * A {@link Layout} controller for a simple document use case. This class is responsible for |
- * driving all {@link Layout}s that get shown via the {@link LayoutManager}. |
- */ |
-public class LayoutManagerDocument extends LayoutManager |
- implements ContextualSearchTapHandler, ContextualSearchContentViewDelegate, |
- ReaderModeTapHandler { |
- // Layouts |
- /** A {@link Layout} used for showing a normal web page. */ |
- protected final StaticLayout mStaticLayout; |
- /** A {@link Layout} used for when the contextual search panel is up. */ |
- protected final ContextualSearchLayout mContextualSearchLayout; |
- |
- // Event Filters |
- private final EdgeSwipeEventFilter mStaticEdgeEventFilter; |
- private final ContextualSearchEventFilter mContextualSearchEventFilter; |
- private final EdgeSwipeHandler mToolbarSwipeHandler; |
- |
- // Event Filter Handlers |
- /** A {@link GestureHandler} that will delegate all events to {@link #getActiveLayout()}. */ |
- protected final GestureHandler mGestureHandler; |
- private final EdgeSwipeHandler mContextualSearchEdgeSwipeHandler; |
- private final EdgeSwipeHandler mReaderModeEdgeSwipeHandler; |
- |
- // Internal State |
- private final SparseArray<LayoutTab> mTabCache = new SparseArray<LayoutTab>(); |
- private final ContextualSearchPanel mContextualSearchPanel; |
- /** A delegate for interacting with the Contextual Search manager. */ |
- protected ContextualSearchManagementDelegate mContextualSearchDelegate; |
- |
- @SuppressWarnings("unused") private TabModelSelectorTabObserver mTabModelSelectorTabObserver; |
- private final ReaderModePanelSelector mReaderModePanelSelector; |
- |
- /** |
- * Creates a {@link LayoutManagerDocument} instance. |
- * @param host A {@link LayoutManagerHost} instance. |
- */ |
- public LayoutManagerDocument(LayoutManagerHost host) { |
- super(host); |
- Context context = host.getContext(); |
- LayoutRenderHost renderHost = host.getLayoutRenderHost(); |
- |
- mContextualSearchPanel = new ContextualSearchPanel(context, this); |
- |
- mReaderModePanelSelector = new ReaderModePanelSelector() { |
- @Override |
- public ReaderModePanel getActiveReaderModePanel() { |
- if (mStaticLayout == null || !mStaticLayout.isActive()) return null; |
- return mStaticLayout.getReaderModePanel(); |
- } |
- }; |
- |
- // Build Event Filter Handlers |
- mContextualSearchEdgeSwipeHandler = new ContextualSearchEdgeSwipeHandler(this); |
- mReaderModeEdgeSwipeHandler = new ReaderModeEdgeSwipeHandler( |
- mReaderModePanelSelector, this); |
- mGestureHandler = new GestureHandlerLayoutDelegate(this); |
- mToolbarSwipeHandler = new ToolbarSwipeHandler(this); |
- |
- // Build Event Filters |
- mStaticEdgeEventFilter = |
- new EdgeSwipeEventFilter(context, this, new StaticEdgeSwipeHandler()); |
- mContextualSearchEventFilter = new ContextualSearchEventFilter( |
- context, this, mGestureHandler, mContextualSearchPanel); |
- EventFilter contextualSearchStaticEventFilter = new ContextualSearchStaticEventFilter( |
- context, this, mContextualSearchPanel, mContextualSearchEdgeSwipeHandler, this); |
- EventFilter readerModeStaticEventFilter = new ReaderModeStaticEventFilter( |
- context, this, mReaderModePanelSelector, mReaderModeEdgeSwipeHandler, this); |
- EventFilter staticCascadeEventFilter = new CascadeEventFilter(context, this, |
- new EventFilter[] {readerModeStaticEventFilter, contextualSearchStaticEventFilter, |
- mStaticEdgeEventFilter}); |
- |
- // Build Layouts |
- mStaticLayout = new StaticLayout( |
- context, this, renderHost, staticCascadeEventFilter, mContextualSearchPanel); |
- mContextualSearchLayout = new ContextualSearchLayout( |
- context, this, renderHost, mContextualSearchEventFilter, mContextualSearchPanel); |
- |
- // Set up layout parameters |
- mStaticLayout.setLayoutHandlesTabLifecycles(true); |
- |
- setNextLayout(null); |
- } |
- |
- @Override |
- public void init(TabModelSelector selector, TabCreatorManager creator, |
- TabContentManager content, ViewGroup androidContentContainer, |
- ContextualSearchManagementDelegate contextualSearchDelegate, |
- DynamicResourceLoader dynamicResourceLoader) { |
- // Save state |
- mContextualSearchDelegate = contextualSearchDelegate; |
- |
- // Initialize Event Filters |
- mStaticEdgeEventFilter.setTabModelSelector(selector); |
- mContextualSearchEventFilter.setManagementDelegate(contextualSearchDelegate); |
- |
- // Initialize Layouts |
- mStaticLayout.setTabModelSelector(selector, content); |
- mContextualSearchLayout.setTabModelSelector(selector, content); |
- |
- // Initialize Contextual Search Panel |
- mContextualSearchPanel.setManagementDelegate(contextualSearchDelegate); |
- mContextualSearchPanel.setDynamicResourceLoader(dynamicResourceLoader); |
- |
- // Set back flow communication |
- if (contextualSearchDelegate != null) { |
- contextualSearchDelegate.setContextualSearchPanelDelegate(mContextualSearchPanel); |
- } |
- |
- mTabModelSelectorTabObserver = new TabModelSelectorTabObserver(selector) { |
- @Override |
- public void onContentChanged(Tab tab) { |
- initLayoutTabFromHost(tab.getId()); |
- } |
- |
- @Override |
- public void onBackgroundColorChanged(Tab tab, int color) { |
- initLayoutTabFromHost(tab.getId()); |
- } |
- }; |
- |
- super.init(selector, creator, content, androidContentContainer, contextualSearchDelegate, |
- dynamicResourceLoader); |
- } |
- |
- @Override |
- public void destroy() { |
- super.destroy(); |
- |
- if (mStaticLayout != null) mStaticLayout.destroy(); |
- if (mContextualSearchLayout != null) mContextualSearchLayout.destroy(); |
- if (mTabModelSelectorTabObserver != null) mTabModelSelectorTabObserver.destroy(); |
- } |
- |
- @Override |
- public void getVirtualViews(List<VirtualView> views) { |
- // Nothing to do here yet. |
- } |
- |
- @Override |
- protected void onViewportChanged(RectF viewportDp) { |
- super.onViewportChanged(viewportDp); |
- for (int i = 0; i < mTabCache.size(); i++) { |
- // This assumes that the content width/height is always the size of the host. |
- mTabCache.valueAt(i).setContentSize(viewportDp.width(), viewportDp.height()); |
- } |
- } |
- |
- /** |
- * @return The {@link EdgeSwipeHandler} responsible for processing swipe events for the toolbar. |
- */ |
- @Override |
- public EdgeSwipeHandler getTopSwipeHandler() { |
- return mToolbarSwipeHandler; |
- } |
- |
- /** |
- * Clears all content associated with {@code tabId} from the internal caches. |
- * @param tabId The id of the tab to clear. |
- */ |
- protected void emptyCachesExcept(int tabId) { |
- LayoutTab tab = mTabCache.get(tabId); |
- mTabCache.clear(); |
- if (tab != null) mTabCache.put(tabId, tab); |
- } |
- |
- /** |
- * Adds the {@link SceneOverlay} across all {@link Layout}s owned by this class. |
- * @param helper A {@link SceneOverlay} instance. |
- */ |
- protected void addGlobalSceneOverlay(SceneOverlay helper) { |
- mStaticLayout.addSceneOverlay(helper); |
- mContextualSearchLayout.addSceneOverlay(helper); |
- } |
- |
- /** |
- * @param tabId The id of the tab represented by a {@link LayoutTab}. |
- * @return A {@link LayoutTab} if one exists or {@code null} if none can be found. |
- */ |
- protected LayoutTab getExistingLayoutTab(int tabId) { |
- return mTabCache.get(tabId); |
- } |
- |
- @Override |
- protected Layout getDefaultLayout() { |
- return mStaticLayout; |
- } |
- |
- @Override |
- public void initLayoutTabFromHost(final int tabId) { |
- if (getTabModelSelector() == null || getActiveLayout() == null) return; |
- |
- TabModelSelector selector = getTabModelSelector(); |
- ChromeTab tab = ChromeTab.fromTab(selector.getTabById(tabId)); |
- if (tab == null) return; |
- |
- LayoutTab layoutTab = mTabCache.get(tabId); |
- if (layoutTab == null) return; |
- |
- String url = tab.getUrl(); |
- boolean isNativePage = url != null && url.startsWith(UrlConstants.CHROME_NATIVE_SCHEME); |
- boolean canUseLiveTexture = |
- tab.getContentViewCore() != null && !tab.isShowingSadTab() && !isNativePage; |
- layoutTab.initFromHost(tab.getBackgroundColor(), tab.getFallbackTextureId(), |
- tab.shouldStall(), canUseLiveTexture); |
- |
- mHost.requestRender(); |
- } |
- |
- @Override |
- public LayoutTab createLayoutTab(int id, boolean incognito, boolean showCloseButton, |
- boolean isTitleNeeded, float maxContentWidth, float maxContentHeight) { |
- LayoutTab tab = mTabCache.get(id); |
- if (tab == null) { |
- tab = new LayoutTab(id, incognito, mLastContentWidthDp, mLastContentHeightDp, |
- showCloseButton, isTitleNeeded); |
- mTabCache.put(id, tab); |
- } else { |
- tab.init(mLastContentWidthDp, mLastContentHeightDp, showCloseButton, isTitleNeeded); |
- } |
- if (maxContentWidth > 0.f) tab.setMaxContentWidth(maxContentWidth); |
- if (maxContentHeight > 0.f) tab.setMaxContentHeight(maxContentHeight); |
- |
- return tab; |
- } |
- |
- @Override |
- public void releaseTabLayout(int id) { |
- mTabCache.remove(id); |
- } |
- |
- @Override |
- public boolean onInterceptTouchEvent(MotionEvent e, boolean isKeyboardShowing) { |
- boolean intercepted = super.onInterceptTouchEvent(e, isKeyboardShowing); |
- if (intercepted) getActiveLayout().unstallImmediately(); |
- return intercepted; |
- } |
- |
- /** |
- * Should be called when the user presses the back button on the phone. |
- * @return Whether or not the back button was consumed by the active {@link Layout}. |
- */ |
- @Override |
- public boolean onBackPressed() { |
- return getActiveLayout() != null && getActiveLayout().onBackPressed(); |
- } |
- |
- @Override |
- public void handleTapContextualSearchBar(long time, float x, float y) { |
- if (getActiveLayout() == mContextualSearchLayout) return; |
- if (mContextualSearchDelegate == null) return; |
- |
- // When not in compatibility mode, tapping on the Search Bar will expand the Panel, |
- // therefore we must start showing the ContextualSearchLayout. |
- // TODO(pedrosimonetti): once we implement the close button, a tap in the Panel might |
- // trigger the Panel to close, not expand, so in that case we don't want to show the |
- // ContextualSearchLayout. Coordinate with dtrainor@ to solve this. It might be |
- // necessary for the ContextualSearchPanel to be able to trigger the display of the |
- // ContextualSearchLayout. |
- if (!mContextualSearchDelegate.isRunningInCompatibilityMode()) { |
- showContextualSearchLayout(true); |
- } |
- |
- mContextualSearchPanel.handleClick(time, x, y); |
- } |
- |
- @Override |
- public void setContextualSearchContentViewCore(ContentViewCore contentViewCore) { |
- mHost.onContentViewCoreAdded(contentViewCore); |
- } |
- |
- @Override |
- public void releaseContextualSearchContentViewCore() { |
- if (getTabModelSelector() == null) return; |
- Tab tab = getTabModelSelector().getCurrentTab(); |
- if (tab != null) tab.updateFullscreenEnabledState(); |
- } |
- |
- private void showContextualSearchLayout(boolean animate) { |
- mContextualSearchDelegate.preserveBasePageSelectionOnNextLossOfFocus(); |
- startShowing(mContextualSearchLayout, animate); |
- } |
- |
- private class StaticEdgeSwipeHandler extends EmptyEdgeSwipeHandler { |
- @Override |
- public void swipeStarted(ScrollDirection direction, float x, float y) { |
- } |
- |
- @Override |
- public boolean isSwipeEnabled(ScrollDirection direction) { |
- FullscreenManager fullscreenManager = mHost.getFullscreenManager(); |
- return direction == ScrollDirection.DOWN && fullscreenManager != null |
- && fullscreenManager.getPersistentFullscreenMode(); |
- } |
- } |
- |
- private class ContextualSearchEdgeSwipeHandler extends EdgeSwipeHandlerLayoutDelegate { |
- public ContextualSearchEdgeSwipeHandler(LayoutProvider provider) { |
- super(provider); |
- } |
- |
- @Override |
- public void swipeStarted(ScrollDirection direction, float x, float y) { |
- if (isCompatabilityMode()) { |
- mContextualSearchDelegate.openResolvedSearchUrlInNewTab(); |
- return; |
- } |
- |
- if (getActiveLayout() != mContextualSearchLayout) { |
- showContextualSearchLayout(false); |
- } |
- |
- super.swipeStarted(direction, x, y); |
- } |
- |
- @Override |
- public boolean isSwipeEnabled(ScrollDirection direction) { |
- return direction == ScrollDirection.UP && mContextualSearchDelegate != null; |
- } |
- |
- private boolean isCompatabilityMode() { |
- return mContextualSearchDelegate != null |
- && mContextualSearchDelegate.isRunningInCompatibilityMode(); |
- } |
- } |
- |
- /** |
- * A {@link EdgeSwipeHandler} meant to respond to edge events for the toolbar. |
- */ |
- private class ToolbarSwipeHandler extends EdgeSwipeHandlerLayoutDelegate { |
- private ScrollDirection mLastScroll; |
- |
- /** |
- * Creates an instance of the {@link ToolbarSwipeHandler}. |
- * @param provider A {@link LayoutProvider} instance. |
- */ |
- public ToolbarSwipeHandler(LayoutProvider provider) { |
- super(provider); |
- } |
- |
- @Override |
- public void swipeStarted(ScrollDirection direction, float x, float y) { |
- super.swipeStarted(direction, x, y); |
- mLastScroll = direction; |
- } |
- |
- @Override |
- public void swipeFinished() { |
- super.swipeFinished(); |
- changeTabs(); |
- } |
- |
- @Override |
- public void swipeFlingOccurred(float x, float y, float tx, float ty, float vx, float vy) { |
- super.swipeFlingOccurred(x, y, tx, ty, vx, vy); |
- changeTabs(); |
- } |
- |
- @TargetApi(Build.VERSION_CODES.LOLLIPOP) |
- private void changeTabs() { |
- DocumentTabModelSelector selector = |
- ChromeMobileApplication.getDocumentTabModelSelector(); |
- TabModel tabModel = selector.getCurrentModel(); |
- int currentIndex = tabModel.index(); |
- if (mLastScroll == ScrollDirection.LEFT) { |
- if (currentIndex < tabModel.getCount() - 1) { |
- TabModelUtils.setIndex(tabModel, currentIndex + 1); |
- } |
- } else { |
- if (currentIndex > 0) { |
- TabModelUtils.setIndex(tabModel, currentIndex - 1); |
- } |
- } |
- } |
- |
- @Override |
- public boolean isSwipeEnabled(ScrollDirection direction) { |
- FullscreenManager manager = mHost.getFullscreenManager(); |
- if (getActiveLayout() != mStaticLayout |
- || !DeviceClassManager.enableToolbarSwipe( |
- FeatureUtilities.isDocumentMode(mHost.getContext())) |
- || (manager != null && manager.getPersistentFullscreenMode())) { |
- return false; |
- } |
- |
- return direction == ScrollDirection.LEFT || direction == ScrollDirection.RIGHT; |
- } |
- } |
- |
- @Override |
- public void handleTapReaderModeBar(long time, float x, float y) { |
- ReaderModePanel activePanel = mReaderModePanelSelector.getActiveReaderModePanel(); |
- if (activePanel != null) activePanel.handleClick(time, x, y); |
- } |
-} |