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

Unified Diff: ios/chrome/browser/ui/fullscreen_controller.h

Issue 2590473002: Upstream Chrome on iOS source code [5/11]. (Closed)
Patch Set: Created 4 years 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: ios/chrome/browser/ui/fullscreen_controller.h
diff --git a/ios/chrome/browser/ui/fullscreen_controller.h b/ios/chrome/browser/ui/fullscreen_controller.h
new file mode 100644
index 0000000000000000000000000000000000000000..63e6aa075236fae8646da92d1cc24d0b4746ed1b
--- /dev/null
+++ b/ios/chrome/browser/ui/fullscreen_controller.h
@@ -0,0 +1,137 @@
+// Copyright 2013 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.
+
+#ifndef IOS_CHROME_BROWSER_UI_FULLSCREEN_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_FULLSCREEN_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/web/public/web_state/crw_web_controller_observer.h"
+#import "ios/web/public/web_state/crw_web_view_scroll_view_proxy.h"
+
+namespace ios_internal {
+// Duration of the toolbar animation.
+const NSTimeInterval kToolbarAnimationDuration = 0.3;
+} // namespace ios_internal
+
+@class CRWWebViewScrollViewProxy;
+@class FullScreenController;
+
+namespace web {
+class NavigationManager;
+}
+
+// Notification when the application is set up for testing.
+extern NSString* const kSetupForTestingWillCloseAllTabsNotification;
+
+@protocol FullScreenControllerDelegate<NSObject>
+
+@required
+// Called every time the header view needs to be moved in place according to
+// the offset. The offset is a value between 0.0 (fully visible) and
+// headerHeight (fully hidden). If animate is YES it is preferable for the
+// delegate to slide the view in place instead of simply snapping it there. If
+// animate is NO the view tracks touches on the screen and as such should be
+// immediate.
+- (void)fullScreenController:(FullScreenController*)fullscreenController
+ drawHeaderViewFromOffset:(CGFloat)headerOffset
+ animate:(BOOL)animate;
+
+// Called when there is a need to move the header in place and scroll the
+// webViewProxy's scroll view at the same time. Should always be animated.
+// Only happens during a call to -setHeaderHeight:visible:onScrollView:. If
+// |changeTopContentPadding| is YES, then in addition to scrolling, delegate
+// should also update webViewProxy's topContentPadding.
+- (void)fullScreenController:(FullScreenController*)fullScreenController
+ drawHeaderViewFromOffset:(CGFloat)headerOffset
+ onWebViewProxy:(id<CRWWebViewProxy>)webViewProxy
+ changeTopContentPadding:(BOOL)changeTopContentPadding
+ scrollingToOffset:(CGFloat)contentOffset;
+
+// Called to retrieve the current height of the header. Only called from
+// -setHeaderVisible:, so that method needs to be explicitly called when the
+// height changes.
+- (CGFloat)headerHeight;
+
+// Tests if the session ID matches the current tab.
+- (BOOL)isTabWithIDCurrent:(NSString*)sessionID;
+
+// Current offset of the header. A value between 0.0 (fully visible) and
+// headerHeight (fully hidden).
+- (CGFloat)currentHeaderOffset;
+
+@end
+
+// This class will track a scrollview to make a header disappear on scroll down
+// and reappear on scroll up. This class expects the scrollview to have the
+// FullScreenController instance set as an observer right after the call to
+// -initWithDelegate:scrollView:
+//
+// It also assumes the header is a view rendering itself on top of the scroll
+// view, the delegate will simply move it out of view as needed. The delegate is
+// called every time the header view needs to be moved.
+@interface FullScreenController
+ : NSObject<CRWWebControllerObserver, CRWWebViewScrollViewProxyObserver>
+
+// If set to YES this slightly alters the behaviour on drag down to pull the
+// header to visible on the fist pixel moved. If set to NO (the default) there
+// is a slight threshold before activating.
+@property(nonatomic, assign) BOOL immediateDragDown;
+
+// Designated initializer.
+- (id)initWithDelegate:(id<FullScreenControllerDelegate>)delegate
+ navigationManager:(web::NavigationManager*)navigationManager
+ sessionID:(NSString*)sessionID;
+
+// Used to clear state maintained by the controller and de-register from
+// notifications. After this call the controller cease to function and will
+// clear its delegate.
+- (void)invalidate;
+
+// Shows or hides the header as directed by |visible|. If necessary the delegate
+// will be called synchronously with the desired offset and animate set to YES.
+// This method can be called when it is desirable to show or hide the header
+// programmatically. It must be called when the header size changes.
+- (void)moveHeaderToRestingPosition:(BOOL)visible;
+
+// Disabling full screen will pull the header to visible and keep it there no
+// matter what the scrollview is doing.
+- (void)disableFullScreen;
+// Enabling fullscreen will reverse the effect of a call to -disableFullScreen.
+// The toolbar will stay on screen until a move pushes it out.
+- (void)enableFullScreen;
+
+// Skip next attempt to correct the scroll offset for the toolbar height. This
+// is necessary when programatically scrolling down the y offset.
+- (void)shouldSkipNextScrollOffsetForHeader;
+
+// Update the insets during animation. When |forceUpdate| is set to NO, a faster
+// workaround implemention is used to update the content's offset. That
+// implemention does not cause a full update. |forceUpdate| should only be set
+// to |NO| when -setToolbarInsetsForHeaderOffset is called
+// in quick succession during scroll callbacks.
+- (void)setToolbarInsetsForHeaderOffset:(CGFloat)headerOffset
+ forceUpdate:(BOOL)forceUpdate;
+
+// Set the content offset of the underlying UIScrollView so that the content
+// is not hidden by the header. The header will be moved to its visible position
+// without animation if it is not already fully visible.
+- (void)moveContentBelowHeader;
+@end
+
+@interface FullScreenController (UsedForTesting)
+// Enables/Disables the FullScreenController in tests. The unit tests do not set
+// the delegate which is crucial for methods to work on the controller.
+// This a temporary solution.
+// TODO(shreyasv): Find a better solution/remove this when FullScreenController
+// moves to Tab.
++ (void)setEnabledForTests:(BOOL)enabled;
+// Sets the hide omnibox delay. If set to 0.0, the omnibox is hidden
+// synchronously.
++ (void)setHideOmniboxDelaySeconds:(double)hideOmniboxDelaySeconds;
+// Resets the hide omnibox delay to its default value.
++ (void)resetHideOmniboxDelaySeconds;
+@end
+
+#endif // IOS_CHROME_BROWSER_UI_FULLSCREEN_CONTROLLER_H_

Powered by Google App Engine
This is Rietveld 408576698