fixed ide preview mode exception

This commit is contained in:
Mariotaku Lee 2015-12-25 18:08:37 +08:00
parent 6f6dec7bb6
commit 4e6d3f7dee
4 changed files with 25 additions and 23 deletions

View File

@ -23,13 +23,23 @@ import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.text.Spannable;
import android.text.Spanned;
import android.widget.TextView;
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.
*/
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) {
applyEmoji(manager, text, 0, text.length());
}

View File

@ -33,9 +33,7 @@ import android.widget.AdapterView;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.ComposeAutoCompleteAdapter;
import org.mariotaku.twidere.text.util.EmojiEditableFactory;
import org.mariotaku.twidere.text.util.EmojiSpannableFactory;
import org.mariotaku.twidere.text.util.SafeEditableFactory;
import org.mariotaku.twidere.util.EmojiSupportUtils;
import org.mariotaku.twidere.util.widget.StatusTextTokenizer;
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) {
super(context, attrs, defStyle);
setEditableFactory(new EmojiEditableFactory(this));
setSpannableFactory(new EmojiSpannableFactory(this));
EmojiSupportUtils.initForTextView(this);
setTokenizer(new StatusTextTokenizer());
setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override

View File

@ -6,26 +6,24 @@ import android.text.method.MovementMethod;
import android.util.AttributeSet;
import android.view.MotionEvent;
import org.mariotaku.twidere.text.util.EmojiEditableFactory;
import org.mariotaku.twidere.text.util.EmojiSpannableFactory;
import org.mariotaku.twidere.text.util.SafeEditableFactory;
import org.mariotaku.twidere.util.EmojiSupportUtils;
import org.mariotaku.twidere.view.themed.ThemedTextView;
public class StatusTextView extends ThemedTextView {
public StatusTextView(final Context context) {
super(context);
init();
EmojiSupportUtils.initForTextView(this);
}
public StatusTextView(final Context context, final AttributeSet attrs) {
super(context, attrs);
init();
EmojiSupportUtils.initForTextView(this);
}
public StatusTextView(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
init();
EmojiSupportUtils.initForTextView(this);
}
@Override
@ -33,18 +31,15 @@ public class StatusTextView extends ThemedTextView {
// FIXME simple workaround to https://code.google.com/p/android/issues/detail?id=191430
// Android clears TextView when setText(), so setText before touch
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
final CharSequence text = getText();
setText(null);
setText(text);
if (getSelectionEnd() != getSelectionStart()) {
final CharSequence text = getText();
setText(null);
setText(text);
}
}
return super.dispatchTouchEvent(event);
}
private void init() {
setEditableFactory(new EmojiEditableFactory(this));
setSpannableFactory(new EmojiSpannableFactory(this));
}
@Override
protected MovementMethod getDefaultMovementMethod() {
return LinkMovementMethod.getInstance();

View File

@ -28,7 +28,7 @@ import android.text.style.ClickableSpan;
import android.util.AttributeSet;
import android.view.MotionEvent;
import org.mariotaku.twidere.text.util.EmojiSpannableFactory;
import org.mariotaku.twidere.util.EmojiSupportUtils;
import org.mariotaku.twidere.view.themed.ThemedTextView;
/**
@ -40,17 +40,17 @@ public class TimelineContentTextView extends ThemedTextView {
public TimelineContentTextView(Context context) {
super(context);
setSpannableFactory(new EmojiSpannableFactory(this));
EmojiSupportUtils.initForTextView(this);
}
public TimelineContentTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setSpannableFactory(new EmojiSpannableFactory(this));
EmojiSupportUtils.initForTextView(this);
}
public TimelineContentTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setSpannableFactory(new EmojiSpannableFactory(this));
EmojiSupportUtils.initForTextView(this);
}
@Override