mirror of https://github.com/M66B/FairEmail.git
Improved webview touch handling
This commit is contained in:
parent
3a3aceed1b
commit
463dc7d36f
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue