Commit e2513d16 authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Added FullscreenViewportInsetRangeChanged().

This callback can be used to notify FullscreenControllerObservers of
changes to the viewport inset range.  It can be used to trigger a
viewport adjustment for new toolbar heights.

Bug: 674649
Change-Id: I4ecdc374c1017716518118a27d4b9c5e0f1db48f
Reviewed-on: https://chromium-review.googlesource.com/c/1340953
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#613313}
parent b601dcd9
......@@ -5,7 +5,7 @@
#ifndef IOS_CLEAN_CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_CONTROLLER_OBSERVER_H_
#define IOS_CLEAN_CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_CONTROLLER_OBSERVER_H_
#include <CoreGraphics/CoreGraphics.h>
#import <UIKit/UIKit.h>
#include "base/macros.h"
......@@ -18,6 +18,11 @@ class FullscreenControllerObserver {
FullscreenControllerObserver() = default;
virtual ~FullscreenControllerObserver() = default;
// Invoked when the maximum or minimum viewport insets for |controller| have
// been updated.
virtual void FullscreenViewportInsetRangeChanged(
FullscreenController* controller) {}
// Invoked after a scrolling event has caused |controller| to calculate
// |progress|. A |progress| value of 1.0 denotes that the toolbar should be
// completely visible, while a |progress| value of 0.0 denotes that the
......
......@@ -52,6 +52,7 @@ class FullscreenMediator : public FullscreenModelObserver {
private:
// FullscreenModelObserver:
void FullscreenModelToolbarHeightsUpdated(FullscreenModel* model) override;
void FullscreenModelProgressUpdated(FullscreenModel* model) override;
void FullscreenModelEnabledStateChanged(FullscreenModel* model) override;
void FullscreenModelScrollEventStarted(FullscreenModel* model) override;
......
......@@ -63,6 +63,13 @@ void FullscreenMediator::Disconnect() {
controller_ = nullptr;
}
void FullscreenMediator::FullscreenModelToolbarHeightsUpdated(
FullscreenModel* model) {
for (auto& observer : observers_) {
observer.FullscreenViewportInsetRangeChanged(controller_);
}
}
void FullscreenMediator::FullscreenModelProgressUpdated(
FullscreenModel* model) {
DCHECK_EQ(model_, model);
......
......@@ -63,3 +63,22 @@ TEST_F(FullscreenMediatorTest, ObserveEnabledState) {
model().DecrementDisabledCounter();
EXPECT_TRUE(observer().enabled());
}
// Tests that changes to the model's toolbar heights are forwarded to observers.
TEST_F(FullscreenMediatorTest, ObserveViewportInsets) {
const CGFloat kExpandedHeight = 100.0;
const CGFloat kCollapsedHeight = 50.0;
const CGFloat kBottomHeight = 60.0;
model().SetExpandedToolbarHeight(kExpandedHeight);
model().SetCollapsedToolbarHeight(kCollapsedHeight);
model().SetBottomToolbarHeight(kBottomHeight);
EXPECT_TRUE(UIEdgeInsetsEqualToEdgeInsets(
observer().min_viewport_insets(),
UIEdgeInsetsMake(kCollapsedHeight, 0, 0, 0)));
EXPECT_TRUE(UIEdgeInsetsEqualToEdgeInsets(
observer().max_viewport_insets(),
UIEdgeInsetsMake(kExpandedHeight, 0, kBottomHeight, 0)));
EXPECT_TRUE(UIEdgeInsetsEqualToEdgeInsets(
observer().current_viewport_insets(),
UIEdgeInsetsMake(kExpandedHeight, 0, kBottomHeight, 0)));
}
......@@ -84,6 +84,10 @@ void FullscreenModel::SetCollapsedToolbarHeight(CGFloat height) {
DCHECK_GE(height, 0.0);
collapsed_toolbar_height_ = height;
ResetForNavigation();
ScopedIncrementer toolbar_height_incrementer(&observer_callback_count_);
for (auto& observer : observers_) {
observer.FullscreenModelToolbarHeightsUpdated(this);
}
}
CGFloat FullscreenModel::GetCollapsedToolbarHeight() const {
......@@ -96,6 +100,10 @@ void FullscreenModel::SetExpandedToolbarHeight(CGFloat height) {
DCHECK_GE(height, 0.0);
expanded_toolbar_height_ = height;
ResetForNavigation();
ScopedIncrementer toolbar_height_incrementer(&observer_callback_count_);
for (auto& observer : observers_) {
observer.FullscreenModelToolbarHeightsUpdated(this);
}
}
CGFloat FullscreenModel::GetExpandedToolbarHeight() const {
......@@ -108,6 +116,10 @@ void FullscreenModel::SetBottomToolbarHeight(CGFloat height) {
DCHECK_GE(height, 0.0);
bottom_toolbar_height_ = height;
ResetForNavigation();
ScopedIncrementer toolbar_height_incrementer(&observer_callback_count_);
for (auto& observer : observers_) {
observer.FullscreenModelToolbarHeightsUpdated(this);
}
}
CGFloat FullscreenModel::GetBottomToolbarHeight() const {
......
......@@ -17,6 +17,9 @@ class FullscreenModelObserver {
FullscreenModelObserver() = default;
virtual ~FullscreenModelObserver() = default;
// Invoked when |model|'s toolbar heights have been updated.
virtual void FullscreenModelToolbarHeightsUpdated(FullscreenModel* model) {}
// Invoked when |model|'s calculated progress() value is updated.
virtual void FullscreenModelProgressUpdated(FullscreenModel* model) {}
......
......@@ -10,6 +10,11 @@
// Test version of FullscreenControllerObserver.
class TestFullscreenControllerObserver : public FullscreenControllerObserver {
public:
UIEdgeInsets min_viewport_insets() const { return min_viewport_insets_; }
UIEdgeInsets max_viewport_insets() const { return max_viewport_insets_; }
UIEdgeInsets current_viewport_insets() const {
return current_viewport_insets_;
}
CGFloat progress() const { return progress_; }
bool enabled() const { return enabled_; }
FullscreenAnimator* animator() const { return animator_; }
......@@ -17,6 +22,8 @@ class TestFullscreenControllerObserver : public FullscreenControllerObserver {
private:
// FullscreenControllerObserver:
void FullscreenViewportInsetRangeChanged(
FullscreenController* controller) override;
void FullscreenProgressUpdated(FullscreenController* controller,
CGFloat progress) override;
void FullscreenEnabledStateChanged(FullscreenController* controller,
......@@ -26,6 +33,9 @@ class TestFullscreenControllerObserver : public FullscreenControllerObserver {
void FullscreenControllerWillShutDown(
FullscreenController* controller) override;
UIEdgeInsets min_viewport_insets_ = UIEdgeInsetsZero;
UIEdgeInsets max_viewport_insets_ = UIEdgeInsetsZero;
UIEdgeInsets current_viewport_insets_ = UIEdgeInsetsZero;
CGFloat progress_ = 0.0;
bool enabled_ = true;
__weak FullscreenAnimator* animator_ = nil;
......
......@@ -11,6 +11,13 @@
#error "This file requires ARC support."
#endif
void TestFullscreenControllerObserver::FullscreenViewportInsetRangeChanged(
FullscreenController* controller) {
min_viewport_insets_ = controller->GetMinViewportInsets();
max_viewport_insets_ = controller->GetMaxViewportInsets();
current_viewport_insets_ = controller->GetCurrentViewportInsets();
}
void TestFullscreenControllerObserver::FullscreenProgressUpdated(
FullscreenController* controller,
CGFloat progress) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment