Improved webview touch handling

This commit is contained in:
M66B 2019-04-27 10:40:06 +02:00
parent 3a3aceed1b
commit 463dc7d36f
2 changed files with 39 additions and 32 deletions

View File

@ -1294,7 +1294,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
if (expanded) {
bindExpanded(message);
properties.scrollTo(getAdapterPosition(), 0);
properties.scrollTo(getAdapterPosition());
} else
clearExpanded();
}
@ -1392,10 +1392,30 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
WebView webView = new WebView(context) {
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int w = getMeasuredWidth();
int h = getMeasuredHeight();
Log.i("WebView " + w + "x" + h);
setMeasuredDimension(w, Math.max(tvBody.getMinHeight(), h));
setMeasuredDimension(
getMeasuredWidth(),
Math.max(tvBody.getMinHeight(), getMeasuredHeight()));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
}
int dy = 0;
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
dy = deltaY;
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
if (clampedY)
properties.scrollBy(0, dy);
}
};
@ -1438,30 +1458,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
}
});
// Fix zooming
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent me) {
if (me.getPointerCount() == 2) {
ConstraintLayout cl = (ConstraintLayout) view;
switch (me.getAction()) {
case MotionEvent.ACTION_DOWN:
cl.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
cl.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
cl.requestDisallowInterceptTouchEvent(false);
break;
}
}
return false;
}
});
webView.setId(vwBody.getId());
webView.setVisibility(vwBody.getVisibility());
@ -3255,7 +3251,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
List<EntityAttachment> getAttachments(long id);
void scrollTo(int pos, int dy);
void scrollTo(int pos);
void scrollBy(int dx, int dy);
void move(long id, String target, boolean type);

View File

@ -738,12 +738,21 @@ public class FragmentMessages extends FragmentBase {
}
@Override
public void scrollTo(final int pos, final int dy) {
public void scrollTo(final int pos) {
new Handler().post(new Runnable() {
@Override
public void run() {
rvMessage.scrollToPosition(pos);
rvMessage.scrollBy(0, dy);
}
});
}
@Override
public void scrollBy(final int dx, final int dy) {
new Handler().post(new Runnable() {
@Override
public void run() {
rvMessage.scrollBy(dx, dy);
}
});
}