61 lines
1.8 KiB
Java
61 lines
1.8 KiB
Java
package org.mariotaku.twidere.view;
|
|
|
|
import android.content.Context;
|
|
import android.text.Editable;
|
|
import android.text.Spannable;
|
|
import android.util.AttributeSet;
|
|
import android.view.MotionEvent;
|
|
|
|
import org.mariotaku.twidere.text.SafeSpannableString;
|
|
import org.mariotaku.twidere.text.SafeSpannableStringBuilder;
|
|
import org.mariotaku.twidere.view.themed.ThemedTextView;
|
|
|
|
public class StatusTextView extends ThemedTextView {
|
|
|
|
public StatusTextView(final Context context) {
|
|
super(context);
|
|
init();
|
|
}
|
|
|
|
public StatusTextView(final Context context, final AttributeSet attrs) {
|
|
super(context, attrs);
|
|
init();
|
|
}
|
|
|
|
public StatusTextView(final Context context, final AttributeSet attrs, final int defStyle) {
|
|
super(context, attrs, defStyle);
|
|
init();
|
|
}
|
|
|
|
@Override
|
|
public boolean dispatchTouchEvent(MotionEvent event) {
|
|
// 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);
|
|
}
|
|
return super.dispatchTouchEvent(event);
|
|
}
|
|
|
|
private void init() {
|
|
setEditableFactory(new SafeEditableFactory());
|
|
setSpannableFactory(new SafeSpannableFactory());
|
|
}
|
|
|
|
private class SafeEditableFactory extends Editable.Factory {
|
|
@Override
|
|
public Editable newEditable(CharSequence source) {
|
|
return new SafeSpannableStringBuilder(source);
|
|
}
|
|
}
|
|
|
|
private class SafeSpannableFactory extends Spannable.Factory {
|
|
@Override
|
|
public Spannable newSpannable(CharSequence source) {
|
|
return new SafeSpannableString(source);
|
|
}
|
|
}
|
|
}
|