diff --git a/res/values/strings.xml b/res/values/strings.xml index 28220cceae..c321f70f97 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -878,6 +878,8 @@ When roaming Media auto-download Message trimming + Use system emoji + Disable TextSecure\'s built-in emoji support diff --git a/res/xml/preferences_advanced.xml b/res/xml/preferences_advanced.xml index 26b3515e64..e1161c900b 100644 --- a/res/xml/preferences_advanced.xml +++ b/res/xml/preferences_advanced.xml @@ -13,6 +13,11 @@ android:summary="@string/preferences__pressing_the_enter_key_will_send_text_messages" android:title="@string/preferences__pref_enter_sends_title"/> + + diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index b9026de61e..8e9dea10b2 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -788,17 +788,21 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity SendButtonListener sendButtonListener = new SendButtonListener(); ComposeKeyPressedListener composeKeyPressedListener = new ComposeKeyPressedListener(); - emojiToggle.attach(emojiDrawer); - emojiToggle.setOnClickListener(new EmojiToggleListener()); - emojiDrawer.setEmojiEventListener(new EmojiEventListener() { - @Override public void onKeyEvent(KeyEvent keyEvent) { - composeText.dispatchKeyEvent(keyEvent); - } + if (TextSecurePreferences.isSystemEmojiPreferred(this)) { + emojiToggle.setVisibility(View.GONE); + } else { + emojiToggle.attach(emojiDrawer); + emojiToggle.setOnClickListener(new EmojiToggleListener()); + emojiDrawer.setEmojiEventListener(new EmojiEventListener() { + @Override public void onKeyEvent(KeyEvent keyEvent) { + composeText.dispatchKeyEvent(keyEvent); + } - @Override public void onEmojiSelected(String emoji) { - composeText.insertEmoji(emoji); - } - }); + @Override public void onEmojiSelected(String emoji) { + composeText.insertEmoji(emoji); + } + }); + } composeText.setOnEditorActionListener(sendButtonListener); attachButton.setOnClickListener(new AttachButtonListener()); diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java index 2bf9d0ef3c..66c8fa1cca 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java +++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java @@ -9,6 +9,7 @@ import android.util.AttributeSet; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable; +import org.thoughtcrime.securesms.util.TextSecurePreferences; public class EmojiEditText extends AppCompatEditText { @@ -24,7 +25,9 @@ public class EmojiEditText extends AppCompatEditText { public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - setFilters(new InputFilter[]{ new EmojiFilter(this) }); + if (!TextSecurePreferences.isSystemEmojiPreferred(getContext())) { + setFilters(new InputFilter[]{ new EmojiFilter(this) }); + } } public void insertEmoji(String emoji) { diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java index 68a27b3414..8f56e37357 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java +++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java @@ -11,11 +11,13 @@ import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable; +import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; public class EmojiTextView extends AppCompatTextView { private CharSequence source; private boolean needsEllipsizing; + private boolean useSystemEmoji; public EmojiTextView(Context context) { this(context, null); @@ -27,14 +29,20 @@ public class EmojiTextView extends AppCompatTextView { public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); + this.useSystemEmoji = TextSecurePreferences.isSystemEmojiPreferred(getContext()); } @Override public void setText(@Nullable CharSequence text, BufferType type) { + if (useSystemEmoji) { + super.setText(text, type); + return; + } + source = EmojiProvider.getInstance(getContext()).emojify(text, this); 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); } @@ -46,7 +54,8 @@ public class EmojiTextView extends AppCompatTextView { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int size = MeasureSpec.getSize(widthMeasureSpec); final int mode = MeasureSpec.getMode(widthMeasureSpec); - if (getEllipsize() == TruncateAt.END && + if (!useSystemEmoji && + getEllipsize() == TruncateAt.END && !TextUtils.isEmpty(source) && (mode == MeasureSpec.AT_MOST || mode == MeasureSpec.EXACTLY) && 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) { - if (changed) setTextEllipsized(source); + if (changed && !useSystemEmoji) setTextEllipsized(source); super.onLayout(changed, left, top, right, bottom); } } diff --git a/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java index 684df211c7..f8412447cb 100644 --- a/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java +++ b/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java @@ -40,6 +40,7 @@ public class AdvancedPreferenceFragment extends PreferenceFragment { 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 SYSTEM_EMOJI_PREF = TextSecurePreferences.SYSTEM_EMOJI_PREF; private static final int PICK_IDENTITY_CONTACT = 1; diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java index 4d220f0224..154d8d695e 100644 --- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -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_ROAMING_PREF = "pref_media_download_roaming"; + public static final String SYSTEM_EMOJI_PREF = "pref_system_emoji"; + public static NotificationPrivacyPreference getNotificationPrivacy(Context context) { 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")); } + public static boolean isSystemEmojiPreferred(Context context) { + return getBooleanPreference(context, SYSTEM_EMOJI_PREF, false); + } + public static @NonNull Set getMobileMediaDownloadAllowed(Context context) { 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)))); } - public static void setBooleanPreference(Context context, String key, boolean value) { PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).apply(); }