fixed ide preview mode exception
This commit is contained in:
parent
6f6dec7bb6
commit
4e6d3f7dee
|
@ -23,13 +23,23 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.text.Spannable;
|
import android.text.Spannable;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.mariotaku.twidere.text.style.EmojiSpan;
|
import org.mariotaku.twidere.text.style.EmojiSpan;
|
||||||
|
import org.mariotaku.twidere.text.util.EmojiEditableFactory;
|
||||||
|
import org.mariotaku.twidere.text.util.EmojiSpannableFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by mariotaku on 15/12/20.
|
* Created by mariotaku on 15/12/20.
|
||||||
*/
|
*/
|
||||||
public class EmojiSupportUtils {
|
public class EmojiSupportUtils {
|
||||||
|
|
||||||
|
public static void initForTextView(TextView textView) {
|
||||||
|
if (textView.isInEditMode()) return;
|
||||||
|
textView.setSpannableFactory(new EmojiSpannableFactory(textView));
|
||||||
|
textView.setEditableFactory(new EmojiEditableFactory(textView));
|
||||||
|
}
|
||||||
|
|
||||||
public static void applyEmoji(ExternalThemeManager manager, @NonNull Spannable text) {
|
public static void applyEmoji(ExternalThemeManager manager, @NonNull Spannable text) {
|
||||||
applyEmoji(manager, text, 0, text.length());
|
applyEmoji(manager, text, 0, text.length());
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,9 +33,7 @@ import android.widget.AdapterView;
|
||||||
|
|
||||||
import org.mariotaku.twidere.R;
|
import org.mariotaku.twidere.R;
|
||||||
import org.mariotaku.twidere.adapter.ComposeAutoCompleteAdapter;
|
import org.mariotaku.twidere.adapter.ComposeAutoCompleteAdapter;
|
||||||
import org.mariotaku.twidere.text.util.EmojiEditableFactory;
|
import org.mariotaku.twidere.util.EmojiSupportUtils;
|
||||||
import org.mariotaku.twidere.text.util.EmojiSpannableFactory;
|
|
||||||
import org.mariotaku.twidere.text.util.SafeEditableFactory;
|
|
||||||
import org.mariotaku.twidere.util.widget.StatusTextTokenizer;
|
import org.mariotaku.twidere.util.widget.StatusTextTokenizer;
|
||||||
import org.mariotaku.twidere.view.iface.IThemeBackgroundTintView;
|
import org.mariotaku.twidere.view.iface.IThemeBackgroundTintView;
|
||||||
|
|
||||||
|
@ -54,8 +52,7 @@ public class ComposeEditText extends AppCompatMultiAutoCompleteTextView implemen
|
||||||
|
|
||||||
public ComposeEditText(final Context context, final AttributeSet attrs, final int defStyle) {
|
public ComposeEditText(final Context context, final AttributeSet attrs, final int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
setEditableFactory(new EmojiEditableFactory(this));
|
EmojiSupportUtils.initForTextView(this);
|
||||||
setSpannableFactory(new EmojiSpannableFactory(this));
|
|
||||||
setTokenizer(new StatusTextTokenizer());
|
setTokenizer(new StatusTextTokenizer());
|
||||||
setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -6,26 +6,24 @@ import android.text.method.MovementMethod;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
import org.mariotaku.twidere.text.util.EmojiEditableFactory;
|
import org.mariotaku.twidere.util.EmojiSupportUtils;
|
||||||
import org.mariotaku.twidere.text.util.EmojiSpannableFactory;
|
|
||||||
import org.mariotaku.twidere.text.util.SafeEditableFactory;
|
|
||||||
import org.mariotaku.twidere.view.themed.ThemedTextView;
|
import org.mariotaku.twidere.view.themed.ThemedTextView;
|
||||||
|
|
||||||
public class StatusTextView extends ThemedTextView {
|
public class StatusTextView extends ThemedTextView {
|
||||||
|
|
||||||
public StatusTextView(final Context context) {
|
public StatusTextView(final Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
init();
|
EmojiSupportUtils.initForTextView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatusTextView(final Context context, final AttributeSet attrs) {
|
public StatusTextView(final Context context, final AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
init();
|
EmojiSupportUtils.initForTextView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatusTextView(final Context context, final AttributeSet attrs, final int defStyle) {
|
public StatusTextView(final Context context, final AttributeSet attrs, final int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
init();
|
EmojiSupportUtils.initForTextView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,16 +31,13 @@ public class StatusTextView extends ThemedTextView {
|
||||||
// FIXME simple workaround to https://code.google.com/p/android/issues/detail?id=191430
|
// FIXME simple workaround to https://code.google.com/p/android/issues/detail?id=191430
|
||||||
// Android clears TextView when setText(), so setText before touch
|
// Android clears TextView when setText(), so setText before touch
|
||||||
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
|
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
|
||||||
|
if (getSelectionEnd() != getSelectionStart()) {
|
||||||
final CharSequence text = getText();
|
final CharSequence text = getText();
|
||||||
setText(null);
|
setText(null);
|
||||||
setText(text);
|
setText(text);
|
||||||
}
|
}
|
||||||
return super.dispatchTouchEvent(event);
|
|
||||||
}
|
}
|
||||||
|
return super.dispatchTouchEvent(event);
|
||||||
private void init() {
|
|
||||||
setEditableFactory(new EmojiEditableFactory(this));
|
|
||||||
setSpannableFactory(new EmojiSpannableFactory(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -28,7 +28,7 @@ import android.text.style.ClickableSpan;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
import org.mariotaku.twidere.text.util.EmojiSpannableFactory;
|
import org.mariotaku.twidere.util.EmojiSupportUtils;
|
||||||
import org.mariotaku.twidere.view.themed.ThemedTextView;
|
import org.mariotaku.twidere.view.themed.ThemedTextView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,17 +40,17 @@ public class TimelineContentTextView extends ThemedTextView {
|
||||||
|
|
||||||
public TimelineContentTextView(Context context) {
|
public TimelineContentTextView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
setSpannableFactory(new EmojiSpannableFactory(this));
|
EmojiSupportUtils.initForTextView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimelineContentTextView(Context context, AttributeSet attrs) {
|
public TimelineContentTextView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
setSpannableFactory(new EmojiSpannableFactory(this));
|
EmojiSupportUtils.initForTextView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimelineContentTextView(Context context, AttributeSet attrs, int defStyle) {
|
public TimelineContentTextView(Context context, AttributeSet attrs, int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
setSpannableFactory(new EmojiSpannableFactory(this));
|
EmojiSupportUtils.initForTextView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue