advanced pref to use android emoji

// FREEBIE
This commit is contained in:
Jake McGinty 2015-09-07 13:11:40 -10:00 committed by Moxie Marlinspike
parent 551274f167
commit e077cc6581
7 changed files with 44 additions and 15 deletions

View File

@ -878,6 +878,8 @@
<string name="preferences_chats__when_roaming">When roaming</string> <string name="preferences_chats__when_roaming">When roaming</string>
<string name="preferences_chats__media_auto_download">Media auto-download</string> <string name="preferences_chats__media_auto_download">Media auto-download</string>
<string name="preferences_chats__message_trimming">Message trimming</string> <string name="preferences_chats__message_trimming">Message trimming</string>
<string name="preferences_advanced__use_system_emoji">Use system emoji</string>
<string name="preferences_advanced__disable_textsecures_built_in_emoji_support">Disable TextSecure\'s built-in emoji support</string>
<!-- **************************************** --> <!-- **************************************** -->
<!-- menus --> <!-- menus -->

View File

@ -13,6 +13,11 @@
android:summary="@string/preferences__pressing_the_enter_key_will_send_text_messages" android:summary="@string/preferences__pressing_the_enter_key_will_send_text_messages"
android:title="@string/preferences__pref_enter_sends_title"/> android:title="@string/preferences__pref_enter_sends_title"/>
<CheckBoxPreference android:defaultValue="false"
android:key="pref_system_emoji"
android:title="@string/preferences_advanced__use_system_emoji"
android:summary="@string/preferences_advanced__disable_textsecures_built_in_emoji_support" />
<Preference android:key="pref_choose_identity" <Preference android:key="pref_choose_identity"
android:title="@string/preferences__choose_identity" android:title="@string/preferences__choose_identity"
android:summary="@string/preferences__choose_your_contact_entry_from_the_contacts_list"/> android:summary="@string/preferences__choose_your_contact_entry_from_the_contacts_list"/>

View File

@ -788,6 +788,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
SendButtonListener sendButtonListener = new SendButtonListener(); SendButtonListener sendButtonListener = new SendButtonListener();
ComposeKeyPressedListener composeKeyPressedListener = new ComposeKeyPressedListener(); ComposeKeyPressedListener composeKeyPressedListener = new ComposeKeyPressedListener();
if (TextSecurePreferences.isSystemEmojiPreferred(this)) {
emojiToggle.setVisibility(View.GONE);
} else {
emojiToggle.attach(emojiDrawer); emojiToggle.attach(emojiDrawer);
emojiToggle.setOnClickListener(new EmojiToggleListener()); emojiToggle.setOnClickListener(new EmojiToggleListener());
emojiDrawer.setEmojiEventListener(new EmojiEventListener() { emojiDrawer.setEmojiEventListener(new EmojiEventListener() {
@ -799,6 +802,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
composeText.insertEmoji(emoji); composeText.insertEmoji(emoji);
} }
}); });
}
composeText.setOnEditorActionListener(sendButtonListener); composeText.setOnEditorActionListener(sendButtonListener);
attachButton.setOnClickListener(new AttachButtonListener()); attachButton.setOnClickListener(new AttachButtonListener());

View File

@ -9,6 +9,7 @@ import android.util.AttributeSet;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable; import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
public class EmojiEditText extends AppCompatEditText { public class EmojiEditText extends AppCompatEditText {
@ -24,8 +25,10 @@ public class EmojiEditText extends AppCompatEditText {
public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) { public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
if (!TextSecurePreferences.isSystemEmojiPreferred(getContext())) {
setFilters(new InputFilter[]{ new EmojiFilter(this) }); setFilters(new InputFilter[]{ new EmojiFilter(this) });
} }
}
public void insertEmoji(String emoji) { public void insertEmoji(String emoji) {
final int start = getSelectionStart(); final int start = getSelectionStart();

View File

@ -11,11 +11,13 @@ import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet; import android.util.AttributeSet;
import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable; import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
public class EmojiTextView extends AppCompatTextView { public class EmojiTextView extends AppCompatTextView {
private CharSequence source; private CharSequence source;
private boolean needsEllipsizing; private boolean needsEllipsizing;
private boolean useSystemEmoji;
public EmojiTextView(Context context) { public EmojiTextView(Context context) {
this(context, null); this(context, null);
@ -27,14 +29,20 @@ public class EmojiTextView extends AppCompatTextView {
public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) { public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
this.useSystemEmoji = TextSecurePreferences.isSystemEmojiPreferred(getContext());
} }
@Override public void setText(@Nullable CharSequence text, BufferType type) { @Override public void setText(@Nullable CharSequence text, BufferType type) {
if (useSystemEmoji) {
super.setText(text, type);
return;
}
source = EmojiProvider.getInstance(getContext()).emojify(text, this); source = EmojiProvider.getInstance(getContext()).emojify(text, this);
setTextEllipsized(source); setTextEllipsized(source);
} }
public void setTextEllipsized(final @Nullable CharSequence source) { private void setTextEllipsized(final @Nullable CharSequence source) {
super.setText(needsEllipsizing ? ViewUtil.ellipsize(source, this) : source, BufferType.SPANNABLE); super.setText(needsEllipsizing ? ViewUtil.ellipsize(source, this) : source, BufferType.SPANNABLE);
} }
@ -46,7 +54,8 @@ public class EmojiTextView extends AppCompatTextView {
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int size = MeasureSpec.getSize(widthMeasureSpec); final int size = MeasureSpec.getSize(widthMeasureSpec);
final int mode = MeasureSpec.getMode(widthMeasureSpec); final int mode = MeasureSpec.getMode(widthMeasureSpec);
if (getEllipsize() == TruncateAt.END && if (!useSystemEmoji &&
getEllipsize() == TruncateAt.END &&
!TextUtils.isEmpty(source) && !TextUtils.isEmpty(source) &&
(mode == MeasureSpec.AT_MOST || mode == MeasureSpec.EXACTLY) && (mode == MeasureSpec.AT_MOST || mode == MeasureSpec.EXACTLY) &&
getPaint().breakText(source, 0, source.length()-1, true, size, null) != source.length()) getPaint().breakText(source, 0, source.length()-1, true, size, null) != source.length())
@ -62,7 +71,7 @@ public class EmojiTextView extends AppCompatTextView {
} }
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (changed) setTextEllipsized(source); if (changed && !useSystemEmoji) setTextEllipsized(source);
super.onLayout(changed, left, top, right, bottom); super.onLayout(changed, left, top, right, bottom);
} }
} }

View File

@ -40,6 +40,7 @@ public class AdvancedPreferenceFragment extends PreferenceFragment {
private static final String PUSH_MESSAGING_PREF = "pref_toggle_push_messaging"; private static final String PUSH_MESSAGING_PREF = "pref_toggle_push_messaging";
private static final String SUBMIT_DEBUG_LOG_PREF = "pref_submit_debug_logs"; private static final String SUBMIT_DEBUG_LOG_PREF = "pref_submit_debug_logs";
private static final String SYSTEM_EMOJI_PREF = TextSecurePreferences.SYSTEM_EMOJI_PREF;
private static final int PICK_IDENTITY_CONTACT = 1; private static final int PICK_IDENTITY_CONTACT = 1;

View File

@ -88,6 +88,8 @@ public class TextSecurePreferences {
public static final String MEDIA_DOWNLOAD_WIFI_PREF = "pref_media_download_wifi"; public static final String MEDIA_DOWNLOAD_WIFI_PREF = "pref_media_download_wifi";
public static final String MEDIA_DOWNLOAD_ROAMING_PREF = "pref_media_download_roaming"; public static final String MEDIA_DOWNLOAD_ROAMING_PREF = "pref_media_download_roaming";
public static final String SYSTEM_EMOJI_PREF = "pref_system_emoji";
public static NotificationPrivacyPreference getNotificationPrivacy(Context context) { public static NotificationPrivacyPreference getNotificationPrivacy(Context context) {
return new NotificationPrivacyPreference(getStringPreference(context, NOTIFICATION_PRIVACY_PREF, "all")); return new NotificationPrivacyPreference(getStringPreference(context, NOTIFICATION_PRIVACY_PREF, "all"));
} }
@ -447,6 +449,10 @@ public class TextSecurePreferences {
return Integer.parseInt(getStringPreference(context, THREAD_TRIM_LENGTH, "500")); return Integer.parseInt(getStringPreference(context, THREAD_TRIM_LENGTH, "500"));
} }
public static boolean isSystemEmojiPreferred(Context context) {
return getBooleanPreference(context, SYSTEM_EMOJI_PREF, false);
}
public static @NonNull Set<String> getMobileMediaDownloadAllowed(Context context) { public static @NonNull Set<String> getMobileMediaDownloadAllowed(Context context) {
return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_MOBILE_PREF, R.array.pref_media_download_mobile_data_default); return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_MOBILE_PREF, R.array.pref_media_download_mobile_data_default);
} }
@ -465,7 +471,6 @@ public class TextSecurePreferences {
new HashSet<>(Arrays.asList(context.getResources().getStringArray(defaultValuesRes)))); new HashSet<>(Arrays.asList(context.getResources().getStringArray(defaultValuesRes))));
} }
public static void setBooleanPreference(Context context, String key, boolean value) { public static void setBooleanPreference(Context context, String key, boolean value) {
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).apply(); PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).apply();
} }