| Index: content/browser/android/overscroll_controller_android.cc
|
| diff --git a/content/browser/android/overscroll_controller_android.cc b/content/browser/android/overscroll_controller_android.cc
|
| index 4548cf33ce20fba36a0dd46aecc0d50726730678..02e2c01383eb6ac8df2773b62e5b6a614db82343 100644
|
| --- a/content/browser/android/overscroll_controller_android.cc
|
| +++ b/content/browser/android/overscroll_controller_android.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/command_line.h"
|
| #include "cc/layers/layer.h"
|
| #include "cc/output/compositor_frame_metadata.h"
|
| +#include "content/browser/android/content_view_core_impl.h"
|
| #include "content/browser/android/edge_effect.h"
|
| #include "content/browser/android/edge_effect_l.h"
|
| #include "content/browser/web_contents/web_contents_impl.h"
|
| @@ -17,6 +18,7 @@
|
| #include "content/public/common/content_switches.h"
|
| #include "third_party/WebKit/public/web/WebInputEvent.h"
|
| #include "ui/android/resources/resource_manager.h"
|
| +#include "ui/android/window_android.h"
|
| #include "ui/android/window_android_compositor.h"
|
| #include "ui/base/l10n/l10n_util_android.h"
|
|
|
| @@ -26,10 +28,6 @@ namespace {
|
| // Used for conditional creation of EdgeEffect types for the overscroll glow.
|
| const int kAndroidLSDKVersion = 21;
|
|
|
| -// Default offset in dips from the top of the view beyond which the refresh
|
| -// action will be activated.
|
| -const int kDefaultRefreshDragTargetDips = 64;
|
| -
|
| // If the glow effect alpha is greater than this value, the refresh effect will
|
| // be suppressed. This value was experimentally determined to provide a
|
| // reasonable balance between avoiding accidental refresh activation and
|
| @@ -79,37 +77,26 @@ scoped_ptr<OverscrollGlow> CreateGlowEffect(OverscrollGlowClient* client,
|
| }
|
|
|
| scoped_ptr<OverscrollRefresh> CreateRefreshEffect(
|
| - ui::WindowAndroidCompositor* compositor,
|
| - OverscrollRefreshClient* client,
|
| - float dpi_scale) {
|
| + OverscrollRefreshHandler* handler) {
|
| if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kDisablePullToRefreshEffect)) {
|
| return nullptr;
|
| }
|
|
|
| - return make_scoped_ptr(new OverscrollRefresh(
|
| - &compositor->GetResourceManager(), client,
|
| - kDefaultRefreshDragTargetDips * dpi_scale, l10n_util::IsLayoutRtl()));
|
| + return make_scoped_ptr(new OverscrollRefresh(handler));
|
| }
|
|
|
| } // namespace
|
|
|
| OverscrollControllerAndroid::OverscrollControllerAndroid(
|
| - WebContents* web_contents,
|
| - ui::WindowAndroidCompositor* compositor,
|
| - float dpi_scale)
|
| - : compositor_(compositor),
|
| - dpi_scale_(dpi_scale),
|
| + ContentViewCoreImpl* content_view_core)
|
| + : compositor_(content_view_core->GetWindowAndroid()->GetCompositor()),
|
| + dpi_scale_(content_view_core->GetDpiScale()),
|
| enabled_(true),
|
| - glow_effect_(CreateGlowEffect(this, dpi_scale)),
|
| - refresh_effect_(CreateRefreshEffect(compositor, this, dpi_scale)),
|
| - triggered_refresh_active_(false),
|
| - is_fullscreen_(static_cast<WebContentsImpl*>(web_contents)
|
| - ->IsFullscreenForCurrentTab()) {
|
| - DCHECK(web_contents);
|
| - DCHECK(compositor);
|
| - if (refresh_effect_)
|
| - Observe(web_contents);
|
| + glow_effect_(CreateGlowEffect(this, dpi_scale_)),
|
| + refresh_effect_(CreateRefreshEffect(content_view_core)),
|
| + is_fullscreen_(false) {
|
| + DCHECK(compositor_);
|
| }
|
|
|
| OverscrollControllerAndroid::~OverscrollControllerAndroid() {
|
| @@ -134,7 +121,6 @@ bool OverscrollControllerAndroid::WillHandleGestureEvent(
|
| }
|
|
|
| bool handled = false;
|
| - bool maybe_needs_animate = false;
|
| switch (event.type) {
|
| case blink::WebInputEvent::GestureScrollBegin:
|
| refresh_effect_->OnScrollBegin();
|
| @@ -144,21 +130,19 @@ bool OverscrollControllerAndroid::WillHandleGestureEvent(
|
| gfx::Vector2dF scroll_delta(event.data.scrollUpdate.deltaX,
|
| event.data.scrollUpdate.deltaY);
|
| scroll_delta.Scale(dpi_scale_);
|
| - maybe_needs_animate = true;
|
| handled = refresh_effect_->WillHandleScrollUpdate(scroll_delta);
|
| } break;
|
|
|
| case blink::WebInputEvent::GestureScrollEnd:
|
| refresh_effect_->OnScrollEnd(gfx::Vector2dF());
|
| - maybe_needs_animate = true;
|
| break;
|
|
|
| case blink::WebInputEvent::GestureFlingStart: {
|
| - gfx::Vector2dF scroll_velocity(event.data.flingStart.velocityX,
|
| - event.data.flingStart.velocityY);
|
| - scroll_velocity.Scale(dpi_scale_);
|
| - refresh_effect_->OnScrollEnd(scroll_velocity);
|
| if (refresh_effect_->IsActive()) {
|
| + gfx::Vector2dF scroll_velocity(event.data.flingStart.velocityX,
|
| + event.data.flingStart.velocityY);
|
| + scroll_velocity.Scale(dpi_scale_);
|
| + refresh_effect_->OnScrollEnd(scroll_velocity);
|
| // TODO(jdduke): Figure out a cleaner way of suppressing a fling.
|
| // It's important that the any downstream code sees a scroll-ending
|
| // event (in this case GestureFlingStart) if it has seen a scroll begin.
|
| @@ -171,7 +155,6 @@ bool OverscrollControllerAndroid::WillHandleGestureEvent(
|
| modified_event.data.flingStart.velocityX = .01f;
|
| modified_event.data.flingStart.velocityY = .01f;
|
| }
|
| - maybe_needs_animate = true;
|
| } break;
|
|
|
| case blink::WebInputEvent::GesturePinchBegin:
|
| @@ -182,9 +165,6 @@ bool OverscrollControllerAndroid::WillHandleGestureEvent(
|
| break;
|
| }
|
|
|
| - if (maybe_needs_animate && refresh_effect_->IsActive())
|
| - SetNeedsAnimate();
|
| -
|
| return handled;
|
| }
|
|
|
| @@ -242,12 +222,7 @@ bool OverscrollControllerAndroid::Animate(base::TimeTicks current_time,
|
| if (!enabled_)
|
| return false;
|
|
|
| - bool needs_animate = false;
|
| - if (refresh_effect_)
|
| - needs_animate |= refresh_effect_->Animate(current_time, parent_layer);
|
| - if (glow_effect_)
|
| - needs_animate |= glow_effect_->Animate(current_time, parent_layer);
|
| - return needs_animate;
|
| + return glow_effect_->Animate(current_time, parent_layer);
|
| }
|
|
|
| void OverscrollControllerAndroid::OnFrameMetadataUpdated(
|
| @@ -265,13 +240,13 @@ void OverscrollControllerAndroid::OnFrameMetadataUpdated(
|
| gfx::ScaleVector2d(frame_metadata.root_scroll_offset, scale_factor);
|
|
|
| if (refresh_effect_) {
|
| - refresh_effect_->UpdateDisplay(viewport_size, content_scroll_offset,
|
| - frame_metadata.root_overflow_y_hidden);
|
| + refresh_effect_->OnFrameUpdated(content_scroll_offset,
|
| + frame_metadata.root_overflow_y_hidden);
|
| }
|
|
|
| if (glow_effect_) {
|
| - glow_effect_->UpdateDisplay(viewport_size, content_size,
|
| - content_scroll_offset);
|
| + glow_effect_->OnFrameUpdated(viewport_size, content_size,
|
| + content_scroll_offset);
|
| }
|
| }
|
|
|
| @@ -291,15 +266,6 @@ void OverscrollControllerAndroid::Disable() {
|
| }
|
| }
|
|
|
| -void OverscrollControllerAndroid::DidNavigateMainFrame(
|
| - const LoadCommittedDetails& details,
|
| - const FrameNavigateParams& params) {
|
| - // Once the main frame has navigated, there's little need to further animate
|
| - // the reload effect. Note that the effect will naturally time out should the
|
| - // reload be interruped for any reason.
|
| - triggered_refresh_active_ = false;
|
| -}
|
| -
|
| void OverscrollControllerAndroid::DidToggleFullscreenModeForTab(
|
| bool entered_fullscreen) {
|
| if (is_fullscreen_ == entered_fullscreen)
|
| @@ -309,20 +275,6 @@ void OverscrollControllerAndroid::DidToggleFullscreenModeForTab(
|
| refresh_effect_->ReleaseWithoutActivation();
|
| }
|
|
|
| -void OverscrollControllerAndroid::TriggerRefresh() {
|
| - triggered_refresh_active_ = false;
|
| - if (!web_contents())
|
| - return;
|
| -
|
| - triggered_refresh_active_ = true;
|
| - RecordAction(base::UserMetricsAction("MobilePullGestureReload"));
|
| - web_contents()->GetController().Reload(true);
|
| -}
|
| -
|
| -bool OverscrollControllerAndroid::IsStillRefreshing() const {
|
| - return triggered_refresh_active_;
|
| -}
|
| -
|
| scoped_ptr<EdgeEffectBase> OverscrollControllerAndroid::CreateEdgeEffect() {
|
| return CreateGlowEdgeEffect(&compositor_->GetResourceManager(), dpi_scale_);
|
| }
|
|
|