| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.fullscreen; | 5 package org.chromium.chrome.browser.fullscreen; |
| 6 | 6 |
| 7 import android.animation.Animator; | 7 import android.animation.Animator; |
| 8 import android.animation.AnimatorListenerAdapter; | 8 import android.animation.AnimatorListenerAdapter; |
| 9 import android.animation.ObjectAnimator; | 9 import android.animation.ObjectAnimator; |
| 10 import android.app.Activity; | 10 import android.app.Activity; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 import org.chromium.base.ApplicationStatus.ActivityStateListener; | 28 import org.chromium.base.ApplicationStatus.ActivityStateListener; |
| 29 import org.chromium.base.BaseChromiumApplication; | 29 import org.chromium.base.BaseChromiumApplication; |
| 30 import org.chromium.base.BaseChromiumApplication.WindowFocusChangedListener; | 30 import org.chromium.base.BaseChromiumApplication.WindowFocusChangedListener; |
| 31 import org.chromium.base.TraceEvent; | 31 import org.chromium.base.TraceEvent; |
| 32 import org.chromium.base.VisibleForTesting; | 32 import org.chromium.base.VisibleForTesting; |
| 33 import org.chromium.chrome.browser.Tab; | 33 import org.chromium.chrome.browser.Tab; |
| 34 import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree
nHtmlApiDelegate; | 34 import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree
nHtmlApiDelegate; |
| 35 import org.chromium.chrome.browser.tabmodel.TabModelSelector; | 35 import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
| 36 import org.chromium.content.browser.ContentViewCore; | 36 import org.chromium.content.browser.ContentViewCore; |
| 37 | 37 |
| 38 import java.lang.ref.WeakReference; |
| 38 import java.util.ArrayList; | 39 import java.util.ArrayList; |
| 39 import java.util.HashSet; | 40 import java.util.HashSet; |
| 40 | 41 |
| 41 /** | 42 /** |
| 42 * A class that manages control and content views to create the fullscreen mode. | 43 * A class that manages control and content views to create the fullscreen mode. |
| 43 */ | 44 */ |
| 44 public class ChromeFullscreenManager | 45 public class ChromeFullscreenManager |
| 45 extends FullscreenManager implements ActivityStateListener, WindowFocusC
hangedListener { | 46 extends FullscreenManager implements ActivityStateListener, WindowFocusC
hangedListener { |
| 46 // Minimum showtime of the toolbar (in ms). | 47 // Minimum showtime of the toolbar (in ms). |
| 47 private static final long MINIMUM_SHOW_DURATION_MS = 3000; | 48 private static final long MINIMUM_SHOW_DURATION_MS = 3000; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 if (mControlContainer.getVisibility() == visibility) return; | 143 if (mControlContainer.getVisibility() == visibility) return; |
| 143 // requestLayout is required to trigger a new gatherTransparentRegio
n(), which | 144 // requestLayout is required to trigger a new gatherTransparentRegio
n(), which |
| 144 // only occurs together with a layout and let's SurfaceFlinger trim
overlays. | 145 // only occurs together with a layout and let's SurfaceFlinger trim
overlays. |
| 145 // This may be almost equivalent to using View.GONE, but we still us
e View.INVISIBLE | 146 // This may be almost equivalent to using View.GONE, but we still us
e View.INVISIBLE |
| 146 // since drawing caches etc. won't be destroyed, and the layout may
be less expensive. | 147 // since drawing caches etc. won't be destroyed, and the layout may
be less expensive. |
| 147 mControlContainer.setVisibility(visibility); | 148 mControlContainer.setVisibility(visibility); |
| 148 mControlContainer.requestLayout(); | 149 mControlContainer.requestLayout(); |
| 149 } | 150 } |
| 150 }; | 151 }; |
| 151 | 152 |
| 153 // This static inner class holds a WeakReference to the outer object, to avo
id triggering the |
| 154 // lint HandlerLeak warning. |
| 155 private static class FullscreenHandler extends Handler { |
| 156 private final WeakReference<ChromeFullscreenManager> mChromeFullscreenMa
nager; |
| 157 |
| 158 public FullscreenHandler(ChromeFullscreenManager chromeFullscreenManager
) { |
| 159 mChromeFullscreenManager = new WeakReference<ChromeFullscreenManager
>( |
| 160 chromeFullscreenManager); |
| 161 } |
| 162 |
| 163 @Override |
| 164 public void handleMessage(Message msg) { |
| 165 if (msg == null) return; |
| 166 ChromeFullscreenManager chromeFullscreenManager = mChromeFullscreenM
anager.get(); |
| 167 if (chromeFullscreenManager == null) return; |
| 168 switch (msg.what) { |
| 169 case MSG_ID_CONTROLS_REQUEST_LAYOUT: |
| 170 chromeFullscreenManager.mControlContainer.requestLayout(); |
| 171 break; |
| 172 case MSG_ID_HIDE_CONTROLS: |
| 173 chromeFullscreenManager.update(false); |
| 174 break; |
| 175 default: |
| 176 assert false : "Unexpected message for ID: " + msg.what; |
| 177 break; |
| 178 } |
| 179 } |
| 180 } |
| 181 |
| 152 /** | 182 /** |
| 153 * Creates an instance of the fullscreen mode manager. | 183 * Creates an instance of the fullscreen mode manager. |
| 154 * @param activity The activity that supports fullscreen. | 184 * @param activity The activity that supports fullscreen. |
| 155 * @param controlContainer Container holding the controls (Toolbar). | 185 * @param controlContainer Container holding the controls (Toolbar). |
| 156 * @param enabled Whether fullscreen is globally enabled. | 186 * @param enabled Whether fullscreen is globally enabled. |
| 157 * @param modelSelector The model selector providing access to the current t
ab. | 187 * @param modelSelector The model selector providing access to the current t
ab. |
| 158 */ | 188 */ |
| 159 public ChromeFullscreenManager(Activity activity, View controlContainer, boo
lean enabled, | 189 public ChromeFullscreenManager(Activity activity, View controlContainer, boo
lean enabled, |
| 160 boolean persistentFullscreenSupported, TabModelSelector modelSelecto
r, | 190 boolean persistentFullscreenSupported, TabModelSelector modelSelecto
r, |
| 161 int resControlContainerHeight) { | 191 int resControlContainerHeight) { |
| 162 super(activity.getWindow(), modelSelector, enabled, persistentFullscreen
Supported); | 192 super(activity.getWindow(), modelSelector, enabled, persistentFullscreen
Supported); |
| 163 | 193 |
| 164 mActivity = activity; | 194 mActivity = activity; |
| 165 ApplicationStatus.registerStateListenerForActivity(this, activity); | 195 ApplicationStatus.registerStateListenerForActivity(this, activity); |
| 166 ((BaseChromiumApplication) activity.getApplication()) | 196 ((BaseChromiumApplication) activity.getApplication()) |
| 167 .registerWindowFocusChangedListener(this); | 197 .registerWindowFocusChangedListener(this); |
| 168 | 198 |
| 169 mWindow = activity.getWindow(); | 199 mWindow = activity.getWindow(); |
| 170 mHandler = new Handler() { | 200 mHandler = new FullscreenHandler(this); |
| 171 @Override | |
| 172 public void handleMessage(Message msg) { | |
| 173 if (msg == null) return; | |
| 174 switch (msg.what) { | |
| 175 case MSG_ID_CONTROLS_REQUEST_LAYOUT: | |
| 176 mControlContainer.requestLayout(); | |
| 177 break; | |
| 178 case MSG_ID_HIDE_CONTROLS: | |
| 179 update(false); | |
| 180 break; | |
| 181 default: | |
| 182 assert false : "Unexpected message for ID: " + msg.what; | |
| 183 break; | |
| 184 } | |
| 185 } | |
| 186 }; | |
| 187 setControlContainer(controlContainer); | 201 setControlContainer(controlContainer); |
| 188 Resources resources = mWindow.getContext().getResources(); | 202 Resources resources = mWindow.getContext().getResources(); |
| 189 mControlContainerHeight = resources.getDimensionPixelSize(resControlCont
ainerHeight); | 203 mControlContainerHeight = resources.getDimensionPixelSize(resControlCont
ainerHeight); |
| 190 mRendererContentOffset = mControlContainerHeight; | 204 mRendererContentOffset = mControlContainerHeight; |
| 191 mEnabled = enabled; | 205 mEnabled = enabled; |
| 192 updateControlOffset(); | 206 updateControlOffset(); |
| 193 } | 207 } |
| 194 | 208 |
| 195 /** | 209 /** |
| 196 * @return Whether or not fullscreen is enabled. | 210 * @return Whether or not fullscreen is enabled. |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 mControlAnimation.start(); | 737 mControlAnimation.start(); |
| 724 mCurrentAnimationIsShowing = show; | 738 mCurrentAnimationIsShowing = show; |
| 725 } | 739 } |
| 726 | 740 |
| 727 @Override | 741 @Override |
| 728 public void onContentViewScrollingStateChanged(boolean scrolling) { | 742 public void onContentViewScrollingStateChanged(boolean scrolling) { |
| 729 mContentViewScrolling = scrolling; | 743 mContentViewScrolling = scrolling; |
| 730 if (!scrolling) updateVisuals(); | 744 if (!scrolling) updateVisuals(); |
| 731 } | 745 } |
| 732 } | 746 } |
| OLD | NEW |