Commit 4f91ee56 authored by igsolla's avatar igsolla Committed by Commit bot

[WebView] Enable scrolling in fullscreen.

The next step is to fix crbug/423381 to improve
transitions from/to fullscreen after scrolling.

BUG=398485

Review URL: https://codereview.chromium.org/653633005

Cr-Commit-Position: refs/heads/master@{#300520}
parent c467d23a
......@@ -1288,11 +1288,7 @@ public class AwContents {
* @see View#onScrollChanged(int,int)
*/
public void onContainerViewScrollChanged(int l, int t, int oldl, int oldt) {
// A side-effect of View.onScrollChanged is that the scroll accessibility event being sent
// by the base class implementation. This is completely hidden from the base classes and
// cannot be prevented, which is why we need the code below.
mScrollAccessibilityHelper.removePostedViewScrolledAccessibilityEventCallback();
mScrollOffsetManager.onContainerViewScrollChanged(l, t);
mAwViewMethods.onContainerViewScrollChanged(l, t, oldl, oldt);
}
/**
......@@ -1301,17 +1297,7 @@ public class AwContents {
*/
public void onContainerViewOverScrolled(int scrollX, int scrollY, boolean clampedX,
boolean clampedY) {
int oldX = mContainerView.getScrollX();
int oldY = mContainerView.getScrollY();
mScrollOffsetManager.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
if (mOverScrollGlow != null) {
mOverScrollGlow.pullGlow(mContainerView.getScrollX(), mContainerView.getScrollY(),
oldX, oldY,
mScrollOffsetManager.computeMaximumHorizontalScrollOffset(),
mScrollOffsetManager.computeMaximumVerticalScrollOffset());
}
mAwViewMethods.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
/**
......@@ -1323,46 +1309,46 @@ public class AwContents {
rect, immediate);
}
/**
* @see View.computeScroll()
*/
public void computeScroll() {
mScrollOffsetManager.computeScrollAndAbsorbGlow(mOverScrollGlow);
}
/**
* @see View#computeHorizontalScrollRange()
*/
public int computeHorizontalScrollRange() {
return mScrollOffsetManager.computeHorizontalScrollRange();
return mAwViewMethods.computeHorizontalScrollRange();
}
/**
* @see View#computeHorizontalScrollOffset()
*/
public int computeHorizontalScrollOffset() {
return mScrollOffsetManager.computeHorizontalScrollOffset();
return mAwViewMethods.computeHorizontalScrollOffset();
}
/**
* @see View#computeVerticalScrollRange()
*/
public int computeVerticalScrollRange() {
return mScrollOffsetManager.computeVerticalScrollRange();
return mAwViewMethods.computeVerticalScrollRange();
}
/**
* @see View#computeVerticalScrollOffset()
*/
public int computeVerticalScrollOffset() {
return mScrollOffsetManager.computeVerticalScrollOffset();
return mAwViewMethods.computeVerticalScrollOffset();
}
/**
* @see View#computeVerticalScrollExtent()
*/
public int computeVerticalScrollExtent() {
return mScrollOffsetManager.computeVerticalScrollExtent();
return mAwViewMethods.computeVerticalScrollExtent();
}
/**
* @see View.computeScroll()
*/
public void computeScroll() {
mAwViewMethods.computeScroll();
}
/**
......@@ -2476,6 +2462,61 @@ public class AwContents {
if (mIsWindowVisible == windowVisible) return;
setWindowVisibilityInternal(windowVisible);
}
@Override
public void onContainerViewScrollChanged(int l, int t, int oldl, int oldt) {
// A side-effect of View.onScrollChanged is that the scroll accessibility event being
// sent by the base class implementation. This is completely hidden from the base
// classes and cannot be prevented, which is why we need the code below.
mScrollAccessibilityHelper.removePostedViewScrolledAccessibilityEventCallback();
mScrollOffsetManager.onContainerViewScrollChanged(l, t);
}
@Override
public void onContainerViewOverScrolled(int scrollX, int scrollY, boolean clampedX,
boolean clampedY) {
int oldX = mContainerView.getScrollX();
int oldY = mContainerView.getScrollY();
mScrollOffsetManager.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
if (mOverScrollGlow != null) {
mOverScrollGlow.pullGlow(mContainerView.getScrollX(), mContainerView.getScrollY(),
oldX, oldY,
mScrollOffsetManager.computeMaximumHorizontalScrollOffset(),
mScrollOffsetManager.computeMaximumVerticalScrollOffset());
}
}
@Override
public int computeHorizontalScrollRange() {
return mScrollOffsetManager.computeHorizontalScrollRange();
}
@Override
public int computeHorizontalScrollOffset() {
return mScrollOffsetManager.computeHorizontalScrollOffset();
}
@Override
public int computeVerticalScrollRange() {
return mScrollOffsetManager.computeVerticalScrollRange();
}
@Override
public int computeVerticalScrollOffset() {
return mScrollOffsetManager.computeVerticalScrollOffset();
}
@Override
public int computeVerticalScrollExtent() {
return mScrollOffsetManager.computeVerticalScrollExtent();
}
@Override
public void computeScroll() {
mScrollOffsetManager.computeScrollAndAbsorbGlow(mOverScrollGlow);
}
}
// Return true if the GeolocationPermissionAPI should be used.
......
......@@ -112,4 +112,45 @@ interface AwViewMethods {
* @see android.view.View#onWindowVisibilityChanged
*/
void onWindowVisibilityChanged(int visibility);
/**
* @see android.view.View#onScrollChanged
*/
void onContainerViewScrollChanged(int l, int t, int oldl, int oldt);
/**
* @see android.view.View#onOverScrolled
*/
void onContainerViewOverScrolled(
int scrollX, int scrollY, boolean clampedX, boolean clampedY);
/**
* @see android.view.View#computeHorizontalScrollRange
*/
int computeHorizontalScrollRange();
/**
* @see android.view.View#computeHorizontalScrollOffset
*/
int computeHorizontalScrollOffset();
/**
* @see android.view.View#computeVerticalScrollRange
*/
int computeVerticalScrollRange();
/**
* @see android.view.View#computeVerticalScrollOffset
*/
int computeVerticalScrollOffset();
/**
* @see android.view.View#computeVerticalScrollExtent
*/
int computeVerticalScrollExtent();
/**
* @see android.view.View#computeScroll
*/
void computeScroll();
}
......@@ -140,6 +140,47 @@ public class FullScreenView extends FrameLayout {
mAwViewMethods.onWindowVisibilityChanged(visibility);
}
@Override
public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
mAwViewMethods.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
@Override
public void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
mAwViewMethods.onContainerViewScrollChanged(l, t, oldl, oldt);
}
@Override
public int computeHorizontalScrollRange() {
return mAwViewMethods.computeHorizontalScrollRange();
}
@Override
public int computeHorizontalScrollOffset() {
return mAwViewMethods.computeHorizontalScrollOffset();
}
@Override
public int computeVerticalScrollRange() {
return mAwViewMethods.computeVerticalScrollRange();
}
@Override
public int computeVerticalScrollOffset() {
return mAwViewMethods.computeVerticalScrollOffset();
}
@Override
public int computeVerticalScrollExtent() {
return mAwViewMethods.computeVerticalScrollExtent();
}
@Override
public void computeScroll() {
mAwViewMethods.computeScroll();
}
// AwContents.InternalAccessDelegate implementation --------------------------------------
private class InternalAccessAdapter implements AwContents.InternalAccessDelegate {
......@@ -181,29 +222,30 @@ public class FullScreenView extends FrameLayout {
@Override
public boolean awakenScrollBars() {
return false;
return FullScreenView.this.awakenScrollBars(0);
}
@Override
public boolean super_awakenScrollBars(int startDelay, boolean invalidate) {
return false;
return FullScreenView.super.awakenScrollBars(startDelay, invalidate);
}
@Override
public void onScrollChanged(int lPix, int tPix, int oldlPix, int oldtPix) {
// Intentional no-op.
FullScreenView.this.onScrollChanged(lPix, tPix, oldlPix, oldtPix);
}
@Override
public void overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,
int scrollRangeX, int scrollRangeY, int maxOverScrollX,
int maxOverScrollY, boolean isTouchEvent) {
// Intentional no-op.
FullScreenView.this.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX,
scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}
@Override
public void super_scrollTo(int scrollX, int scrollY) {
// Intentional no-op.
FullScreenView.super.scrollTo(scrollX, scrollY);
}
@Override
......
......@@ -127,4 +127,45 @@ class NullAwViewMethods implements AwViewMethods {
public void onWindowVisibilityChanged(int visibility) {
// Intentional no-op.
}
@Override
public void onContainerViewScrollChanged(int l, int t, int oldl, int oldt) {
// Intentional no-op.
}
@Override
public void onContainerViewOverScrolled(int scrollX, int scrollY, boolean clampedX,
boolean clampedY) {
// Intentional no-op.
}
@Override
public int computeHorizontalScrollRange() {
return 0;
}
@Override
public int computeHorizontalScrollOffset() {
return 0;
}
@Override
public int computeVerticalScrollRange() {
return 0;
}
@Override
public int computeVerticalScrollOffset() {
return 0;
}
@Override
public int computeVerticalScrollExtent() {
return 0;
}
@Override
public void computeScroll() {
// Intentional no-op.
}
}
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