Fix expanding captions.

This commit is contained in:
Alex Hart
2023-08-07 11:15:50 -03:00
parent 06dc8ccbdd
commit 8af91bffb5
3 changed files with 44 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.components.emoji;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
@@ -18,6 +19,8 @@ import android.text.method.TransformationMethod;
import android.text.style.CharacterStyle;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ViewGroup;
import androidx.annotation.ColorInt;
@@ -25,6 +28,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.core.view.GestureDetectorCompat;
import androidx.core.view.ViewKt;
import androidx.core.widget.TextViewCompat;
@@ -315,6 +319,12 @@ public class EmojiTextView extends AppCompatTextView {
}
}
@SuppressLint("ClickableViewAccessibility")
public void bindGestureListener() {
GestureDetectorCompat gestureDetectorCompat = new GestureDetectorCompat(getContext(), new OnGestureListener());
setOnTouchListener((v, event) -> gestureDetectorCompat.onTouchEvent(event));
}
private void ellipsizeAnyTextForMaxLength() {
if (maxLength > 0 && getText().length() > maxLength + 1) {
SpannableStringBuilder newContent = new SpannableStringBuilder();
@@ -465,4 +475,32 @@ public class EmojiTextView extends AppCompatTextView {
mentionRendererDelegate.setTint(mentionBackgroundTint);
}
}
/**
* Due to some peculiarities in how TextView deals with touch events, it's really easy to accidentally trigger
* a click (say, when you try to scroll but you're at the bottom of a view.) Because of this, we handle these
* events manually.
*/
private class OnGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(@NonNull MotionEvent e) {
return true;
}
@Override
public boolean onScroll(@NonNull MotionEvent e1, @NonNull MotionEvent e2, float distanceX, float distanceY) {
if (!canScrollVertically((int) distanceY)) {
return true;
}
int maxScrollDistance = computeVerticalScrollRange() - computeHorizontalScrollExtent();
scrollTo(0, Util.clamp(getScrollY() + (int) distanceY, 0, maxScrollDistance));
return true;
}
@Override
public boolean onSingleTapConfirmed(@NonNull MotionEvent e) {
return performClick();
}
}
}