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 { ...@@ -1288,11 +1288,7 @@ public class AwContents {
* @see View#onScrollChanged(int,int) * @see View#onScrollChanged(int,int)
*/ */
public void onContainerViewScrollChanged(int l, int t, int oldl, int oldt) { 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 mAwViewMethods.onContainerViewScrollChanged(l, t, oldl, oldt);
// 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);
} }
/** /**
...@@ -1301,17 +1297,7 @@ public class AwContents { ...@@ -1301,17 +1297,7 @@ public class AwContents {
*/ */
public void onContainerViewOverScrolled(int scrollX, int scrollY, boolean clampedX, public void onContainerViewOverScrolled(int scrollX, int scrollY, boolean clampedX,
boolean clampedY) { boolean clampedY) {
int oldX = mContainerView.getScrollX(); mAwViewMethods.onContainerViewOverScrolled(scrollX, scrollY, clampedX, clampedY);
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());
}
} }
/** /**
...@@ -1323,46 +1309,46 @@ public class AwContents { ...@@ -1323,46 +1309,46 @@ public class AwContents {
rect, immediate); rect, immediate);
} }
/**
* @see View.computeScroll()
*/
public void computeScroll() {
mScrollOffsetManager.computeScrollAndAbsorbGlow(mOverScrollGlow);
}
/** /**
* @see View#computeHorizontalScrollRange() * @see View#computeHorizontalScrollRange()
*/ */
public int computeHorizontalScrollRange() { public int computeHorizontalScrollRange() {
return mScrollOffsetManager.computeHorizontalScrollRange(); return mAwViewMethods.computeHorizontalScrollRange();
} }
/** /**
* @see View#computeHorizontalScrollOffset() * @see View#computeHorizontalScrollOffset()
*/ */
public int computeHorizontalScrollOffset() { public int computeHorizontalScrollOffset() {
return mScrollOffsetManager.computeHorizontalScrollOffset(); return mAwViewMethods.computeHorizontalScrollOffset();
} }
/** /**
* @see View#computeVerticalScrollRange() * @see View#computeVerticalScrollRange()
*/ */
public int computeVerticalScrollRange() { public int computeVerticalScrollRange() {
return mScrollOffsetManager.computeVerticalScrollRange(); return mAwViewMethods.computeVerticalScrollRange();
} }
/** /**
* @see View#computeVerticalScrollOffset() * @see View#computeVerticalScrollOffset()
*/ */
public int computeVerticalScrollOffset() { public int computeVerticalScrollOffset() {
return mScrollOffsetManager.computeVerticalScrollOffset(); return mAwViewMethods.computeVerticalScrollOffset();
} }
/** /**
* @see View#computeVerticalScrollExtent() * @see View#computeVerticalScrollExtent()
*/ */
public int 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 { ...@@ -2476,6 +2462,61 @@ public class AwContents {
if (mIsWindowVisible == windowVisible) return; if (mIsWindowVisible == windowVisible) return;
setWindowVisibilityInternal(windowVisible); 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. // Return true if the GeolocationPermissionAPI should be used.
......
...@@ -112,4 +112,45 @@ interface AwViewMethods { ...@@ -112,4 +112,45 @@ interface AwViewMethods {
* @see android.view.View#onWindowVisibilityChanged * @see android.view.View#onWindowVisibilityChanged
*/ */
void onWindowVisibilityChanged(int visibility); 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 { ...@@ -140,6 +140,47 @@ public class FullScreenView extends FrameLayout {
mAwViewMethods.onWindowVisibilityChanged(visibility); 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 -------------------------------------- // AwContents.InternalAccessDelegate implementation --------------------------------------
private class InternalAccessAdapter implements AwContents.InternalAccessDelegate { private class InternalAccessAdapter implements AwContents.InternalAccessDelegate {
...@@ -181,29 +222,30 @@ public class FullScreenView extends FrameLayout { ...@@ -181,29 +222,30 @@ public class FullScreenView extends FrameLayout {
@Override @Override
public boolean awakenScrollBars() { public boolean awakenScrollBars() {
return false; return FullScreenView.this.awakenScrollBars(0);
} }
@Override @Override
public boolean super_awakenScrollBars(int startDelay, boolean invalidate) { public boolean super_awakenScrollBars(int startDelay, boolean invalidate) {
return false; return FullScreenView.super.awakenScrollBars(startDelay, invalidate);
} }
@Override @Override
public void onScrollChanged(int lPix, int tPix, int oldlPix, int oldtPix) { public void onScrollChanged(int lPix, int tPix, int oldlPix, int oldtPix) {
// Intentional no-op. FullScreenView.this.onScrollChanged(lPix, tPix, oldlPix, oldtPix);
} }
@Override @Override
public void overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, public void overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,
int scrollRangeX, int scrollRangeY, int maxOverScrollX, int scrollRangeX, int scrollRangeY, int maxOverScrollX,
int maxOverScrollY, boolean isTouchEvent) { int maxOverScrollY, boolean isTouchEvent) {
// Intentional no-op. FullScreenView.this.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX,
scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
} }
@Override @Override
public void super_scrollTo(int scrollX, int scrollY) { public void super_scrollTo(int scrollX, int scrollY) {
// Intentional no-op. FullScreenView.super.scrollTo(scrollX, scrollY);
} }
@Override @Override
......
...@@ -127,4 +127,45 @@ class NullAwViewMethods implements AwViewMethods { ...@@ -127,4 +127,45 @@ class NullAwViewMethods implements AwViewMethods {
public void onWindowVisibilityChanged(int visibility) { public void onWindowVisibilityChanged(int visibility) {
// Intentional no-op. // 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