mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-05-03 23:15:44 +01:00
Do not allow emoji in image editing if device doesn't support it.
This commit is contained in:
committed by
Cody Henthorne
parent
3328e43a40
commit
d409278dd5
@@ -17,6 +17,10 @@ import androidx.annotation.Nullable;
|
||||
import org.signal.imageeditor.core.model.EditorElement;
|
||||
import org.signal.imageeditor.core.renderers.MultiLineTextRenderer;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Invisible {@link android.widget.EditText} that is used during in-image text editing.
|
||||
*/
|
||||
@@ -37,6 +41,8 @@ public final class HiddenEditText extends androidx.appcompat.widget.AppCompatEdi
|
||||
@Nullable
|
||||
private OnEditOrSelectionChange onEditOrSelectionChange;
|
||||
|
||||
private List<TextFilter> textFilters = new LinkedList<>();
|
||||
|
||||
public HiddenEditText(Context context) {
|
||||
super(context);
|
||||
setAlpha(0);
|
||||
@@ -54,7 +60,11 @@ public final class HiddenEditText extends androidx.appcompat.widget.AppCompatEdi
|
||||
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
|
||||
super.onTextChanged(text, start, lengthBefore, lengthAfter);
|
||||
if (currentTextEntity != null) {
|
||||
currentTextEntity.setText(text.toString());
|
||||
String filtered = text.toString();
|
||||
for (TextFilter filter : textFilters) {
|
||||
filtered = filter.filter(filtered);
|
||||
}
|
||||
currentTextEntity.setText(filtered);
|
||||
postEditOrSelectionChange();
|
||||
}
|
||||
}
|
||||
@@ -79,6 +89,18 @@ public final class HiddenEditText extends androidx.appcompat.widget.AppCompatEdi
|
||||
}
|
||||
}
|
||||
|
||||
public void addTextFilter(@NonNull TextFilter filter) {
|
||||
textFilters.add(filter);
|
||||
}
|
||||
|
||||
public void addTextFilters(@NonNull Collection<TextFilter> filters) {
|
||||
textFilters.addAll(filters);
|
||||
}
|
||||
|
||||
public void removeTextFilter(@NonNull TextFilter filter) {
|
||||
textFilters.remove(filter);
|
||||
}
|
||||
|
||||
private void endEdit() {
|
||||
if (onEndEdit != null) {
|
||||
onEndEdit.run();
|
||||
@@ -173,4 +195,11 @@ public final class HiddenEditText extends androidx.appcompat.widget.AppCompatEdi
|
||||
public interface OnEditOrSelectionChange {
|
||||
void onChange(@NonNull EditorElement editorElement, @NonNull MultiLineTextRenderer textRenderer);
|
||||
}
|
||||
|
||||
public interface TextFilter {
|
||||
/**
|
||||
* Given an input string, return a filtered version.
|
||||
*/
|
||||
String filter(@NonNull String text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,9 @@ import org.signal.imageeditor.core.renderers.BezierDrawingRenderer;
|
||||
import org.signal.imageeditor.core.renderers.MultiLineTextRenderer;
|
||||
import org.signal.imageeditor.core.renderers.TrashRenderer;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* ImageEditorView
|
||||
* <p>
|
||||
@@ -71,6 +74,8 @@ public final class ImageEditorView extends FrameLayout {
|
||||
@Nullable
|
||||
private DragListener dragListener;
|
||||
|
||||
private final List<HiddenEditText.TextFilter> textFilters = new LinkedList<>();
|
||||
|
||||
private final Matrix viewMatrix = new Matrix();
|
||||
private final RectF viewPort = Bounds.newFullBounds();
|
||||
private final RectF visibleViewPort = Bounds.newFullBounds();
|
||||
@@ -116,6 +121,8 @@ public final class ImageEditorView extends FrameLayout {
|
||||
editText.clearFocus();
|
||||
editText.setOnEndEdit(this::doneTextEditing);
|
||||
editText.setOnEditOrSelectionChange(this::zoomToFitText);
|
||||
editText.addTextFilters(textFilters);
|
||||
|
||||
return editText;
|
||||
}
|
||||
|
||||
@@ -150,6 +157,16 @@ public final class ImageEditorView extends FrameLayout {
|
||||
this.typefaceProvider = typefaceProvider;
|
||||
}
|
||||
|
||||
public void addTextInputFilter(@NonNull HiddenEditText.TextFilter inputFilter) {
|
||||
textFilters.add(inputFilter);
|
||||
editText = createAHiddenTextEntryField();
|
||||
}
|
||||
|
||||
public void removeTextInputFilter(@NonNull HiddenEditText.TextFilter inputFilter) {
|
||||
textFilters.remove(inputFilter);
|
||||
editText = createAHiddenTextEntryField();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
if (rendererContext == null || rendererContext.canvas != canvas || rendererContext.typefaceProvider != typefaceProvider) {
|
||||
|
||||
Reference in New Issue
Block a user