Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(652)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/readermode/ReaderModePanel.java

Issue 2883643002: Clean up ReaderMode OverlayPanel classes (Closed)
Patch Set: remove extra enum Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/readermode/ReaderModePanel.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/readermode/ReaderModePanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/readermode/ReaderModePanel.java
deleted file mode 100644
index 9959500caf925e7b67c4494ca2bc17609eec81a8..0000000000000000000000000000000000000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/readermode/ReaderModePanel.java
+++ /dev/null
@@ -1,373 +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.bottombar.readermode;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.RectF;
-
-import org.chromium.base.ActivityState;
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.compositor.LayerTitleCache;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayContentDelegate;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayContentProgressObserver;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContent;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContentViewDelegate;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager;
-import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager.PanelPriority;
-import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
-import org.chromium.chrome.browser.compositor.scene_layer.ReaderModeSceneLayer;
-import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer;
-import org.chromium.chrome.browser.dom_distiller.DomDistillerTabUtils;
-import org.chromium.chrome.browser.dom_distiller.ReaderModeManagerDelegate;
-import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler;
-import org.chromium.chrome.browser.rappor.RapporServiceBridge;
-import org.chromium.components.navigation_interception.NavigationParams;
-import org.chromium.content.browser.ContentViewCore;
-import org.chromium.content_public.browser.WebContents;
-import org.chromium.ui.resources.ResourceManager;
-
-/**
- * The panel containing reader mode.
- */
-public class ReaderModePanel extends OverlayPanel {
-
- /** The compositor layer used for drawing the panel. */
- private ReaderModeSceneLayer mSceneLayer;
-
- /** Delegate for calling functions on the ReaderModeManager. */
- private ReaderModeManagerDelegate mManagerDelegate;
-
- /** Delegate for passing the current ContentViewCore to the layout manager. */
- private OverlayPanelContentViewDelegate mContentViewDelegate;
-
- /** The opacity of the panel bar text. */
- private float mReaderBarTextOpacity;
-
- /** If the timer for counting how long a user has been reading is running. */
- private boolean mTimerRunning;
-
- /** The start time in ms of the current timer. */
- private long mStartTime;
-
- // ============================================================================================
- // Constructor
- // ============================================================================================
-
- /**
- * @param context The current Android {@link Context}.
- * @param updateHost The {@link LayoutUpdateHost} used to request updates in the Layout.
- * @param panelManager The {@link OverlayPanelManager} used to control panel show/hide.
- * @param contentViewDelegate Notifies the activity that a ContentViewCore has been created.
- */
- public ReaderModePanel(Context context, LayoutUpdateHost updateHost,
- OverlayPanelManager panelManager, OverlayPanelContentViewDelegate contentViewDelegate) {
- super(context, updateHost, panelManager);
- mSceneLayer = createNewReaderModeSceneLayer();
- mContentViewDelegate = contentViewDelegate;
- }
-
- @Override
- public OverlayPanelContent createNewOverlayPanelContent() {
- OverlayContentDelegate delegate = new OverlayContentDelegate() {
- /**
- * Track if a navigation/load is the first one for this content.
- */
- private boolean mIsInitialLoad = true;
-
- @Override
- public void onContentViewCreated(ContentViewCore contentView) {
- mContentViewDelegate.setOverlayPanelContentViewCore(contentView);
-
- WebContents distilledWebContents = contentView.getWebContents();
- if (distilledWebContents == null) {
- closePanel(StateChangeReason.UNKNOWN, false);
- return;
- }
-
- WebContents sourceWebContents = mManagerDelegate.getBasePageWebContents();
- if (sourceWebContents == null) {
- closePanel(StateChangeReason.UNKNOWN, false);
- return;
- }
-
- DomDistillerTabUtils.distillAndView(sourceWebContents, distilledWebContents);
- }
-
- @Override
- public void onContentViewDestroyed() {
- mContentViewDelegate.releaseOverlayPanelContentViewCore();
- mIsInitialLoad = true;
- }
-
- @Override
- public boolean shouldInterceptNavigation(ExternalNavigationHandler externalNavHandler,
- NavigationParams navigationParams) {
- // The initial load will be the distilled content; don't try to open a new tab if
- // this is the case. All other navigations on distilled pages will come from link
- // clicks.
- if (mIsInitialLoad) {
- mIsInitialLoad = false;
- return true;
- }
- if (!navigationParams.isExternalProtocol) {
- mManagerDelegate.createNewTab(navigationParams.url);
- return false;
- }
- return true;
- }
- };
-
- return new OverlayPanelContent(delegate, new OverlayContentProgressObserver(), mActivity);
- }
-
- // ============================================================================================
- // Scene Overlay
- // ============================================================================================
-
- /**
- * Create a new scene layer for this panel. This should be overridden by tests as necessary.
- */
- protected ReaderModeSceneLayer createNewReaderModeSceneLayer() {
- return new ReaderModeSceneLayer(mContext.getResources().getDisplayMetrics().density);
- }
-
- @Override
- public SceneOverlayLayer getUpdatedSceneOverlayTree(RectF viewport, RectF visibleViewport,
- LayerTitleCache layerTitleCache, ResourceManager resourceManager, float yOffset) {
- mSceneLayer.update(resourceManager, this, getBarTextViewId(), mReaderBarTextOpacity);
-
- return mSceneLayer;
- }
-
- @Override
- public boolean updateOverlay(long time, long dt) {
- // This will cause the ContentViewCore to size itself appropriately for the panel (includes
- // browser controls height).
- updateBrowserControlsState();
-
- return super.updateOverlay(time, dt);
- }
-
- // ============================================================================================
- // Manager Integration
- // ============================================================================================
-
- /**
- * Sets the {@code ReaderModeManagerDelegate} associated with this panel.
- * @param delegate The {@code ReaderModeManagerDelegate}.
- */
- public void setManagerDelegate(ReaderModeManagerDelegate delegate) {
- // TODO(mdjones): This looks similar to setManagementDelegate in ContextualSearchPanel,
- // consider moving this to OverlayPanel.
- if (mManagerDelegate != delegate) {
- mManagerDelegate = delegate;
- if (mManagerDelegate != null) {
- setChromeActivity(mManagerDelegate.getChromeActivity());
- }
- }
- }
-
- // ============================================================================================
- // Generic Event Handling
- // ============================================================================================
-
- @Override
- public void handleBarClick(long time, float x, float y) {
- super.handleBarClick(time, x, y);
- if (isCoordinateInsideCloseButton(x)) {
- closePanel(StateChangeReason.CLOSE_BUTTON, true);
- } else {
- maximizePanel(StateChangeReason.SEARCH_BAR_TAP);
- }
- }
-
- @Override
- public boolean onInterceptBarClick() {
- // TODO(mdjones): Handle compatibility mode here (promote to tab on tap).
- return false;
- }
-
- // ============================================================================================
- // Panel base methods
- // ============================================================================================
-
- @Override
- public void destroyComponents() {
- super.destroyComponents();
- destroyReaderModeBarControl();
- }
-
- @Override
- public PanelPriority getPriority() {
- return PanelPriority.MEDIUM;
- }
-
- @Override
- public boolean canBeSuppressed() {
- return true;
- }
-
- @Override
- protected boolean isSupportedState(PanelState state) {
- return state != PanelState.EXPANDED;
- }
-
- @Override
- protected float getThresholdToNextState() {
- return 0.30f;
- }
-
- @Override
- protected void updatePanelForCloseOrPeek(float percent) {
- super.updatePanelForCloseOrPeek(percent);
-
- // Do not update the panel text if the panel was closed immediately.
- if (percent < 0.01f) return;
-
- getReaderModeBarControl().setBarText(R.string.reader_view_text);
- mReaderBarTextOpacity = 1.0f;
- }
-
- @Override
- protected void updatePanelForMaximization(float percent) {
- super.updatePanelForMaximization(percent);
- if (percent < 0.5f) {
- mReaderBarTextOpacity = 1.0f - 2.0f * percent;
- getReaderModeBarControl().setBarText(R.string.reader_view_text);
- } else {
- mReaderBarTextOpacity = 2.0f * (percent - 0.5f);
- getReaderModeBarControl().setBarText(R.string.reader_mode_maximized_title);
- }
- }
-
- @Override
- protected void maximizePanel(StateChangeReason reason) {
- // Extend animation time by 150ms.
- super.animatePanelToState(PanelState.MAXIMIZED, reason, BASE_ANIMATION_DURATION_MS + 150);
- }
-
- @Override
- protected void onAnimationFinished() {
- super.onAnimationFinished();
- boolean animatingToOpenState = getPanelState() == PanelState.MAXIMIZED;
- // Start or stop the timer for how long the user has been reading.
- if (!mTimerRunning && animatingToOpenState) {
- mStartTime = System.currentTimeMillis();
- mTimerRunning = true;
- if (mManagerDelegate != null && mManagerDelegate.getBasePageWebContents() != null) {
- String url = mManagerDelegate.getBasePageWebContents().getUrl();
- RapporServiceBridge.sampleDomainAndRegistryFromURL(
- "DomDistiller.OpenPanel", url);
- }
- } else if (mTimerRunning && !animatingToOpenState) {
- onTimerEnded();
- }
- }
-
- @Override
- public void peekPanel(StateChangeReason reason) {
- super.peekPanel(reason);
- if (mManagerDelegate == null) return;
- mManagerDelegate.onPanelShown();
- }
-
- @Override
- public void closePanel(StateChangeReason reason, boolean animate) {
- super.closePanel(reason, animate);
- if (mTimerRunning) {
- onTimerEnded();
- }
- }
-
- @Override
- protected void onClosed(StateChangeReason reason) {
- super.onClosed(reason);
- if (mSceneLayer != null) mSceneLayer.hideTree();
- if (mManagerDelegate == null) return;
- mManagerDelegate.onClosed(reason);
- }
-
- /**
- * Record the time spent in Reader Mode.
- */
- private void onTimerEnded() {
- mTimerRunning = false;
- long totalTime = System.currentTimeMillis() - mStartTime;
- if (mStartTime <= 0 || totalTime < 0) return;
- mManagerDelegate.recordTimeSpentInReader(totalTime);
- }
-
- @Override
- public float getOffsetY() {
- // Do not attempt to auto-hide the reader mode bar if the toolbar is less than a certain
- // height.
- boolean shouldAutoHide = getToolbarHeight() >= getBarHeightPeeking();
- // This will cause the reader mode bar to behave like the browser controls; sliding out of
- // view as the page scrolls.
- return super.getOffsetY() + (shouldAutoHide ? getBrowserControlsOffsetDp() : 0.0f);
- }
-
- @Override
- public void onLayoutChanged(float width, float height, float visibleViewportOffsetY) {
- if (width != getWidth()) destroyReaderModeBarControl();
-
- super.onLayoutChanged(width, height, visibleViewportOffsetY);
- }
-
- @Override
- protected float calculateBasePageDesiredOffset() {
- return -getToolbarHeight();
- }
-
- @Override
- public void onActivityStateChange(Activity activity, int newState) {
- // If the activity is only resuming, don't do anything.
- if (newState == ActivityState.RESUMED) return;
- super.onActivityStateChange(activity, newState);
- }
-
- // ============================================================================================
- // ReaderModeBarControl
- // ============================================================================================
-
- private ReaderModeBarControl mReaderModeBarControl;
-
- /**
- * @return The Id of the Search Term View.
- */
- public int getBarTextViewId() {
- return getReaderModeBarControl().getViewId();
- }
-
- /**
- * Creates the ReaderModeBarControl, if needed. The Views are set to INVISIBLE, because
- * they won't actually be displayed on the screen (their snapshots will be displayed instead).
- */
- protected ReaderModeBarControl getReaderModeBarControl() {
- assert mContainerView != null;
- assert mResourceLoader != null;
-
- if (mReaderModeBarControl == null) {
- mReaderModeBarControl =
- new ReaderModeBarControl(this, mContext, mContainerView, mResourceLoader);
- }
-
- assert mReaderModeBarControl != null;
- return mReaderModeBarControl;
- }
-
- /**
- * Destroys the ReaderModeBarControl.
- */
- protected void destroyReaderModeBarControl() {
- if (mReaderModeBarControl != null) {
- mReaderModeBarControl.destroy();
- mReaderModeBarControl = null;
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698