diff --git a/build.gradle b/build.gradle index b8dbb30b4..767f37ae9 100644 --- a/build.gradle +++ b/build.gradle @@ -21,10 +21,11 @@ repositories { configurations { playstoreCompile + freeCompile } ext { - supportLibVersion = '25.4.0' + supportLibVersion = '26.1.0' } dependencies { @@ -34,6 +35,8 @@ dependencies { compile 'com.soundcloud.android:android-crop:1.0.1@aar' compile "com.android.support:support-v13:$supportLibVersion" compile "com.android.support:appcompat-v7:$supportLibVersion" + compile "com.android.support:support-emoji:$supportLibVersion" + freeCompile "com.android.support:support-emoji-bundled:$supportLibVersion" compile 'org.bouncycastle:bcprov-jdk15on:1.52' compile 'org.bouncycastle:bcmail-jdk15on:1.52' compile 'org.jitsi:org.otr4j:0.22' @@ -59,7 +62,7 @@ ext { } android { - compileSdkVersion 25 + compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { diff --git a/src/free/java/eu/siacs/conversations/ui/service/EmojiService.java b/src/free/java/eu/siacs/conversations/ui/service/EmojiService.java new file mode 100644 index 000000000..5d336a6fc --- /dev/null +++ b/src/free/java/eu/siacs/conversations/ui/service/EmojiService.java @@ -0,0 +1,17 @@ +package eu.siacs.conversations.ui.service; + +import android.content.Context; +import android.support.text.emoji.EmojiCompat; +import android.support.text.emoji.bundled.BundledEmojiCompatConfig; + +public class EmojiService extends AbstractEmojiService { + + public EmojiService(Context context) { + super(context); + } + + @Override + protected EmojiCompat.Config buildConfig() { + return new BundledEmojiCompatConfig(context); + } +} \ No newline at end of file diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index a044b4dca..7ce1c5cda 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -62,6 +62,7 @@ import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate; import eu.siacs.conversations.services.XmppConnectionService.OnConversationUpdate; import eu.siacs.conversations.services.XmppConnectionService.OnRosterUpdate; import eu.siacs.conversations.ui.adapter.ConversationAdapter; +import eu.siacs.conversations.ui.service.EmojiService; import eu.siacs.conversations.utils.ExceptionHelper; import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.xmpp.OnUpdateBlocklist; @@ -178,6 +179,7 @@ public class ConversationActivity extends XmppActivity @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + new EmojiService(this).init(); if (savedInstanceState != null) { mOpenConversation = savedInstanceState.getString(STATE_OPEN_CONVERSATION, null); mPanelOpen = savedInstanceState.getBoolean(STATE_PANEL_OPEN, true); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 02b7dd732..98fdbf409 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -70,6 +70,7 @@ import eu.siacs.conversations.ui.XmppActivity.OnValueEdited; import eu.siacs.conversations.ui.adapter.MessageAdapter; import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureClicked; import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureLongClicked; +import eu.siacs.conversations.ui.widget.EditMessage; import eu.siacs.conversations.ui.widget.ListSelectionManager; import eu.siacs.conversations.utils.NickValidityChecker; import eu.siacs.conversations.utils.UIHelper; diff --git a/src/main/java/eu/siacs/conversations/ui/service/AbstractEmojiService.java b/src/main/java/eu/siacs/conversations/ui/service/AbstractEmojiService.java new file mode 100644 index 000000000..407d8d728 --- /dev/null +++ b/src/main/java/eu/siacs/conversations/ui/service/AbstractEmojiService.java @@ -0,0 +1,21 @@ +package eu.siacs.conversations.ui.service; + +import android.content.Context; +import android.support.text.emoji.EmojiCompat; + +public abstract class AbstractEmojiService { + + protected final Context context; + + public AbstractEmojiService(Context context) { + this.context = context; + } + + protected abstract EmojiCompat.Config buildConfig(); + + public void init() { + final EmojiCompat.Config config = buildConfig(); + config.setReplaceAll(true); + EmojiCompat.init(config); + } +} diff --git a/src/main/java/eu/siacs/conversations/ui/widget/CopyTextView.java b/src/main/java/eu/siacs/conversations/ui/widget/CopyTextView.java index bed56192e..4857254bc 100644 --- a/src/main/java/eu/siacs/conversations/ui/widget/CopyTextView.java +++ b/src/main/java/eu/siacs/conversations/ui/widget/CopyTextView.java @@ -5,10 +5,10 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.os.Build; +import android.support.text.emoji.widget.EmojiTextView; import android.util.AttributeSet; -import android.widget.TextView; -public class CopyTextView extends TextView { +public class CopyTextView extends EmojiTextView { public CopyTextView(Context context) { super(context); diff --git a/src/main/java/eu/siacs/conversations/ui/EditMessage.java b/src/main/java/eu/siacs/conversations/ui/widget/EditMessage.java similarity index 97% rename from src/main/java/eu/siacs/conversations/ui/EditMessage.java rename to src/main/java/eu/siacs/conversations/ui/widget/EditMessage.java index 6686d951b..ca73564f5 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditMessage.java +++ b/src/main/java/eu/siacs/conversations/ui/widget/EditMessage.java @@ -1,5 +1,6 @@ -package eu.siacs.conversations.ui; +package eu.siacs.conversations.ui.widget; +import android.support.text.emoji.widget.EmojiEditText; import android.support.v13.view.inputmethod.EditorInfoCompat; import android.support.v13.view.inputmethod.InputConnectionCompat; import android.support.v13.view.inputmethod.InputContentInfoCompat; @@ -15,11 +16,10 @@ import android.util.AttributeSet; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; -import android.widget.EditText; import eu.siacs.conversations.Config; -public class EditMessage extends EditText { +public class EditMessage extends EmojiEditText { public interface OnCommitContentListener { boolean onCommitContent(InputContentInfoCompat inputContentInfo, int flags, Bundle opts, String[] mimeTypes); diff --git a/src/main/res/layout/conversation_list_row.xml b/src/main/res/layout/conversation_list_row.xml index 65be4802a..44e7553f5 100644 --- a/src/main/res/layout/conversation_list_row.xml +++ b/src/main/res/layout/conversation_list_row.xml @@ -37,7 +37,7 @@ android:layout_toRightOf="@+id/conversation_image" android:paddingLeft="8dp"> - - - - + + + + MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK + + \ No newline at end of file