| 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.app.Activity; | 7 import android.app.Activity; |
| 8 import android.content.res.Resources; | 8 import android.content.res.Resources; |
| 9 import android.view.Gravity; | 9 import android.view.Gravity; |
| 10 import android.view.MotionEvent; | 10 import android.view.MotionEvent; |
| 11 import android.view.View; | 11 import android.view.View; |
| 12 import android.view.ViewGroup; | 12 import android.view.ViewGroup; |
| 13 import android.view.ViewGroup.LayoutParams; | 13 import android.view.ViewGroup.LayoutParams; |
| 14 import android.view.Window; | 14 import android.view.Window; |
| 15 import android.widget.FrameLayout; | 15 import android.widget.FrameLayout; |
| 16 | 16 |
| 17 import org.chromium.base.ActivityState; | 17 import org.chromium.base.ActivityState; |
| 18 import org.chromium.base.ApplicationStatus; | 18 import org.chromium.base.ApplicationStatus; |
| 19 import org.chromium.base.ApplicationStatus.ActivityStateListener; | 19 import org.chromium.base.ApplicationStatus.ActivityStateListener; |
| 20 import org.chromium.base.BaseChromiumApplication; | 20 import org.chromium.base.BaseChromiumApplication; |
| 21 import org.chromium.base.BaseChromiumApplication.WindowFocusChangedListener; | 21 import org.chromium.base.BaseChromiumApplication.WindowFocusChangedListener; |
| 22 import org.chromium.base.ThreadUtils; |
| 22 import org.chromium.base.TraceEvent; | 23 import org.chromium.base.TraceEvent; |
| 23 import org.chromium.base.library_loader.LibraryLoader; | 24 import org.chromium.base.library_loader.LibraryLoader; |
| 24 import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree
nHtmlApiDelegate; | 25 import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree
nHtmlApiDelegate; |
| 25 import org.chromium.chrome.browser.tab.Tab; | 26 import org.chromium.chrome.browser.tab.Tab; |
| 26 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; | 27 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; |
| 27 import org.chromium.chrome.browser.tabmodel.TabModelSelector; | 28 import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
| 28 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver; | 29 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver; |
| 29 import org.chromium.chrome.browser.util.ViewUtils; | 30 import org.chromium.chrome.browser.util.ViewUtils; |
| 30 import org.chromium.chrome.browser.widget.ControlContainer; | 31 import org.chromium.chrome.browser.widget.ControlContainer; |
| 31 import org.chromium.content.browser.ContentVideoView; | 32 import org.chromium.content.browser.ContentVideoView; |
| 32 import org.chromium.content.browser.ContentViewCore; | 33 import org.chromium.content.browser.ContentViewCore; |
| 33 import org.chromium.content_public.common.BrowserControlsState; | 34 import org.chromium.content_public.common.BrowserControlsState; |
| 34 | 35 |
| 35 import java.util.ArrayList; | 36 import java.util.ArrayList; |
| 36 | 37 |
| 37 /** | 38 /** |
| 38 * A class that manages control and content views to create the fullscreen mode. | 39 * A class that manages control and content views to create the fullscreen mode. |
| 39 */ | 40 */ |
| 40 public class ChromeFullscreenManager | 41 public class ChromeFullscreenManager |
| 41 extends FullscreenManager implements ActivityStateListener, WindowFocusC
hangedListener { | 42 extends FullscreenManager implements ActivityStateListener, WindowFocusC
hangedListener { |
| 42 | 43 |
| 44 // The amount of time to delay the control show request after returning to a
once visible |
| 45 // activity. This delay is meant to allow Android to run its Activity focus
ing animation and |
| 46 // have the controls scroll back in smoothly once that has finished. |
| 47 private static final long ACTIVITY_RETURN_SHOW_REQUEST_DELAY_MS = 100; |
| 48 |
| 43 private final Activity mActivity; | 49 private final Activity mActivity; |
| 44 private final Window mWindow; | 50 private final Window mWindow; |
| 45 private final BrowserStateBrowserControlsVisibilityDelegate mBrowserVisibili
tyDelegate; | 51 private final BrowserStateBrowserControlsVisibilityDelegate mBrowserVisibili
tyDelegate; |
| 46 private final boolean mIsBottomControls; | 52 private final boolean mIsBottomControls; |
| 47 | 53 |
| 48 private ControlContainer mControlContainer; | 54 private ControlContainer mControlContainer; |
| 49 private int mTopControlContainerHeight; | 55 private int mTopControlContainerHeight; |
| 50 private int mBottomControlContainerHeight; | 56 private int mBottomControlContainerHeight; |
| 51 private TabModelSelector mTabModelSelector; | 57 private TabModelSelector mTabModelSelector; |
| 52 private TabModelSelectorTabModelObserver mTabModelObserver; | 58 private TabModelSelectorTabModelObserver mTabModelObserver; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 /** | 188 /** |
| 183 * @return The visibility delegate that allows browser UI to control the bro
wser control | 189 * @return The visibility delegate that allows browser UI to control the bro
wser control |
| 184 * visibility. | 190 * visibility. |
| 185 */ | 191 */ |
| 186 public BrowserStateBrowserControlsVisibilityDelegate getBrowserVisibilityDel
egate() { | 192 public BrowserStateBrowserControlsVisibilityDelegate getBrowserVisibilityDel
egate() { |
| 187 return mBrowserVisibilityDelegate; | 193 return mBrowserVisibilityDelegate; |
| 188 } | 194 } |
| 189 | 195 |
| 190 @Override | 196 @Override |
| 191 public void setTab(Tab tab) { | 197 public void setTab(Tab tab) { |
| 198 Tab previousTab = getTab(); |
| 192 super.setTab(tab); | 199 super.setTab(tab); |
| 193 mBrowserVisibilityDelegate.setTab(getTab()); | 200 mBrowserVisibilityDelegate.setTab(getTab()); |
| 194 if (tab != null) mBrowserVisibilityDelegate.showControlsTransient(); | 201 if (tab != null && previousTab != getTab()) { |
| 202 mBrowserVisibilityDelegate.showControlsTransient(); |
| 203 } |
| 195 } | 204 } |
| 196 | 205 |
| 197 @Override | 206 @Override |
| 198 public void onActivityStateChange(Activity activity, int newState) { | 207 public void onActivityStateChange(Activity activity, int newState) { |
| 199 if (newState == ActivityState.STOPPED) { | 208 if (newState == ActivityState.STOPPED) { |
| 200 // Exit fullscreen in onStop to ensure the system UI flags are set c
orrectly when | 209 // Exit fullscreen in onStop to ensure the system UI flags are set c
orrectly when |
| 201 // showing again (on JB MR2+ builds, the omnibox would be covered by
the | 210 // showing again (on JB MR2+ builds, the omnibox would be covered by
the |
| 202 // notification bar when this was done in onStart()). | 211 // notification bar when this was done in onStart()). |
| 203 setPersistentFullscreenMode(false); | 212 setPersistentFullscreenMode(false); |
| 204 } else if (newState == ActivityState.STARTED) { | 213 } else if (newState == ActivityState.STARTED) { |
| 205 mBrowserVisibilityDelegate.showControlsTransient(); | 214 ThreadUtils.postOnUiThreadDelayed(new Runnable() { |
| 215 @Override |
| 216 public void run() { |
| 217 mBrowserVisibilityDelegate.showControlsTransient(); |
| 218 } |
| 219 }, ACTIVITY_RETURN_SHOW_REQUEST_DELAY_MS); |
| 206 } else if (newState == ActivityState.DESTROYED) { | 220 } else if (newState == ActivityState.DESTROYED) { |
| 207 ApplicationStatus.unregisterActivityStateListener(this); | 221 ApplicationStatus.unregisterActivityStateListener(this); |
| 208 ((BaseChromiumApplication) mWindow.getContext().getApplicationContex
t()) | 222 ((BaseChromiumApplication) mWindow.getContext().getApplicationContex
t()) |
| 209 .unregisterWindowFocusChangedListener(this); | 223 .unregisterWindowFocusChangedListener(this); |
| 210 | 224 |
| 211 mTabModelObserver.destroy(); | 225 mTabModelObserver.destroy(); |
| 212 } | 226 } |
| 213 } | 227 } |
| 214 | 228 |
| 215 @Override | 229 @Override |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 updateVisuals(); | 640 updateVisuals(); |
| 627 } | 641 } |
| 628 } | 642 } |
| 629 | 643 |
| 630 @Override | 644 @Override |
| 631 public void onContentViewScrollingStateChanged(boolean scrolling) { | 645 public void onContentViewScrollingStateChanged(boolean scrolling) { |
| 632 mContentViewScrolling = scrolling; | 646 mContentViewScrolling = scrolling; |
| 633 if (!scrolling) updateVisuals(); | 647 if (!scrolling) updateVisuals(); |
| 634 } | 648 } |
| 635 } | 649 } |
| OLD | NEW |