浏览代码

Fix #410

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 6 年之前
父节点
当前提交
bf1f2df344
共有 21 个文件被更改,包括 137 次插入101 次删除
  1. 5 5
      app/build.gradle
  2. 0 1
      app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java
  3. 0 4
      app/src/main/java/com/nextcloud/talk/activities/MainActivity.java
  4. 3 2
      app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java
  5. 7 6
      app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java
  6. 7 6
      app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java
  7. 4 0
      app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
  8. 29 0
      app/src/main/java/com/nextcloud/talk/controllers/ChatController.java
  9. 1 1
      app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java
  10. 7 0
      app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java
  11. 6 65
      app/src/main/java/com/nextcloud/talk/utils/TextMatchers.java
  12. 44 0
      app/src/main/res/layout/emoji_view.xml
  13. 1 1
      app/src/main/res/layout/item_custom_incoming_preview_message.xml
  14. 1 1
      app/src/main/res/layout/item_custom_incoming_text_message.xml
  15. 1 1
      app/src/main/res/layout/item_custom_outcoming_preview_message.xml
  16. 1 1
      app/src/main/res/layout/item_custom_outcoming_text_message.xml
  17. 1 1
      app/src/main/res/layout/rv_item_conversation.xml
  18. 2 2
      app/src/main/res/layout/rv_item_conversation_with_last_message.xml
  19. 13 2
      app/src/main/res/layout/view_message_input.xml
  20. 0 2
      app/src/main/res/raw/regex
  21. 4 0
      app/src/main/res/values/colors.xml

+ 5 - 5
app/build.gradle

@@ -108,12 +108,12 @@ dependencies {
     implementation 'androidx.appcompat:appcompat:1.0.2'
     implementation 'com.google.android.material:material:1.0.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
-    implementation 'androidx.emoji:emoji-bundled:1.0.0'
+    implementation 'com.github.vanniktech.Emoji:emoji-twitter:182e1ff4f4'
     implementation 'org.michaelevans.colorart:library:0.0.3'
-    implementation "android.arch.work:work-runtime:1.0.0-beta01"
+    implementation "android.arch.work:work-runtime:1.0.0-alpha13"
     implementation "android.arch.work:work-firebase:${workVersion}"
-    androidTestImplementation "android.arch.work:work-testing:1.0.0-beta01"
-    implementation "android.arch.work:work-rxjava2:1.0.0-beta01"
+    androidTestImplementation "android.arch.work:work-testing:1.0.0-alpha13"
+    implementation "android.arch.work:work-rxjava2:1.0.0-alpha13"
 
 
     implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
@@ -188,7 +188,7 @@ dependencies {
 
     implementation 'com.github.wooplr:Spotlight:1.3'
 
-    implementation 'com.github.mario:chatkit:628c909ef4'
+    implementation 'com.github.mario:chatkit:d63d61db95'
 
     implementation 'com.otaliastudios:autocomplete:1.1.0'
 

+ 0 - 1
app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java

@@ -20,7 +20,6 @@
 
 package com.nextcloud.talk.activities;
 
-import android.content.Context;
 import android.content.res.Configuration;
 import android.os.Bundle;
 import android.view.View;

+ 0 - 4
app/src/main/java/com/nextcloud/talk/activities/MainActivity.java

@@ -41,8 +41,6 @@ import com.nextcloud.talk.utils.database.user.UserUtils;
 import javax.inject.Inject;
 
 import androidx.appcompat.widget.Toolbar;
-import androidx.emoji.bundled.BundledEmojiCompatConfig;
-import androidx.emoji.text.EmojiCompat;
 import autodagger.AutoInjector;
 import butterknife.BindView;
 import butterknife.ButterKnife;
@@ -72,8 +70,6 @@ public final class MainActivity extends BaseActivity implements ActionBarProvide
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        EmojiCompat.Config config = new BundledEmojiCompatConfig(this);
-        EmojiCompat.init(config);
 
         setContentView(R.layout.activity_main);
 

+ 3 - 2
app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java

@@ -45,6 +45,7 @@ import com.nextcloud.talk.models.json.rooms.Conversation;
 import com.nextcloud.talk.utils.ApiUtils;
 import com.nextcloud.talk.utils.DisplayUtils;
 import com.nextcloud.talk.utils.glide.GlideApp;
+import com.vanniktech.emoji.EmojiTextView;
 
 import org.apache.commons.lang3.StringUtils;
 
@@ -287,13 +288,13 @@ public class ConversationItem extends AbstractFlexibleItem<ConversationItem.Conv
         @BindView(R.id.dialogAvatar)
         ImageView dialogAvatar;
         @BindView(R.id.dialogName)
-        TextView dialogName;
+        EmojiTextView dialogName;
         @BindView(R.id.dialogDate)
         TextView dialogDate;
         @BindView(R.id.dialogLastMessageUserAvatar)
         ImageView dialogLastMessageUserAvatar;
         @BindView(R.id.dialogLastMessage)
-        TextView dialogLastMessage;
+        EmojiTextView dialogLastMessage;
         @BindView(R.id.dialogUnreadBubble)
         TextView dialogUnreadBubble;
         @BindView(R.id.passwordProtectedRoomImageView)

+ 7 - 6
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java

@@ -28,14 +28,12 @@ import android.net.Uri;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.TextUtils;
-import android.text.style.RelativeSizeSpan;
 import android.view.View;
 import android.widget.TextView;
 
 import com.amulyakhare.textdrawable.TextDrawable;
 import com.facebook.drawee.view.SimpleDraweeView;
 import com.google.android.flexbox.FlexboxLayout;
-import com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.models.json.chat.ChatMessage;
@@ -43,6 +41,7 @@ import com.nextcloud.talk.utils.DisplayUtils;
 import com.nextcloud.talk.utils.TextMatchers;
 import com.nextcloud.talk.utils.database.user.UserUtils;
 import com.stfalcon.chatkit.messages.MessageHolders;
+import com.vanniktech.emoji.EmojiTextView;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -62,7 +61,7 @@ public class MagicIncomingTextMessageViewHolder
     TextView messageAuthor;
 
     @BindView(R.id.messageText)
-    EmoticonTextView messageText;
+    EmojiTextView messageText;
 
     @BindView(R.id.messageUserAvatar)
     SimpleDraweeView messageUserAvatarView;
@@ -131,6 +130,8 @@ public class MagicIncomingTextMessageViewHolder
 
         Spannable messageString = new SpannableString(message.getText());
 
+        float emojiSize = DisplayUtils.getDefaultEmojiFontSize(messageText);
+
         if (messageParameters != null && messageParameters.size() > 0) {
             for (String key : messageParameters.keySet()) {
                 Map<String, String> individualHashMap = message.getMessageParameters().get(key);
@@ -156,13 +157,13 @@ public class MagicIncomingTextMessageViewHolder
                 }
             }
 
-        } else if (TextMatchers.isMessageWithSingleEmoticonOnly(context, message.getText())) {
-            messageString.setSpan(new RelativeSizeSpan(2.5f), 0, messageString.length(),
-                    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+        } else if (TextMatchers.isMessageWithSingleEmoticonOnly(message.getText())) {
+            emojiSize *= 2.5f;
             layoutParams.setWrapBefore(true);
             itemView.setSelected(true);
         }
 
+        messageText.setEmojiSize((int) emojiSize, true);
         messageTimeView.setLayoutParams(layoutParams);
         messageText.setText(messageString);
     }

+ 7 - 6
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java

@@ -27,12 +27,10 @@ import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.text.Spannable;
 import android.text.SpannableString;
-import android.text.style.RelativeSizeSpan;
 import android.view.View;
 import android.widget.TextView;
 
 import com.google.android.flexbox.FlexboxLayout;
-import com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.models.json.chat.ChatMessage;
@@ -40,6 +38,7 @@ import com.nextcloud.talk.utils.DisplayUtils;
 import com.nextcloud.talk.utils.TextMatchers;
 import com.nextcloud.talk.utils.database.user.UserUtils;
 import com.stfalcon.chatkit.messages.MessageHolders;
+import com.vanniktech.emoji.EmojiTextView;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -54,7 +53,7 @@ import butterknife.ButterKnife;
 @AutoInjector(NextcloudTalkApplication.class)
 public class MagicOutcomingTextMessageViewHolder extends MessageHolders.OutcomingTextMessageViewHolder<ChatMessage> {
     @BindView(R.id.messageText)
-    EmoticonTextView messageText;
+    EmojiTextView messageText;
 
     @BindView(R.id.messageTime)
     TextView messageTimeView;
@@ -87,6 +86,8 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin
         FlexboxLayout.LayoutParams layoutParams = (FlexboxLayout.LayoutParams) messageTimeView.getLayoutParams();
         layoutParams.setWrapBefore(false);
 
+        float emojiSize = DisplayUtils.getDefaultEmojiFontSize(messageText);
+
         if (messageParameters != null && messageParameters.size() > 0) {
             for (String key : messageParameters.keySet()) {
                 Map<String, String> individualHashMap = message.getMessageParameters().get(key);
@@ -106,9 +107,8 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin
                 }
             }
 
-        } else if (TextMatchers.isMessageWithSingleEmoticonOnly(context, message.getText())) {
-            messageString.setSpan(new RelativeSizeSpan(2.5f), 0, messageString.length(),
-                    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+        } else if (TextMatchers.isMessageWithSingleEmoticonOnly(message.getText())) {
+            emojiSize *= 2.5f;
             layoutParams.setWrapBefore(true);
             messageTimeView.setTextColor(context.getResources().getColor(R.color.warm_grey_four));
             itemView.setSelected(true);
@@ -127,6 +127,7 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin
             ViewCompat.setBackground(bubble, bubbleDrawable);
         }
 
+        messageText.setEmojiSize((int) emojiSize, true);
         messageTimeView.setLayoutParams(layoutParams);
         messageText.setText(messageString);
     }

+ 4 - 0
app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java

@@ -42,6 +42,8 @@ import com.nextcloud.talk.utils.OkHttpNetworkFetcherWithCache;
 import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageModule;
 import com.nextcloud.talk.utils.database.user.UserModule;
 import com.nextcloud.talk.webrtc.MagicWebRTCUtils;
+import com.vanniktech.emoji.EmojiManager;
+import com.vanniktech.emoji.twitter.TwitterEmojiProvider;
 
 import org.webrtc.PeerConnectionFactory;
 import org.webrtc.voiceengine.WebRtcAudioManager;
@@ -159,6 +161,8 @@ public class NextcloudTalkApplication extends MultiDexApplication implements Lif
         //        ExistingPeriodicWorkPolicy.REPLACE, periodicCapabilitiesUpdateWork);
 
         WorkManager.getInstance().cancelUniqueWork("DailyCapabilitiesUpdateWork");
+        EmojiManager.install(new TwitterEmojiProvider());
+
     }
 
     @Override

+ 29 - 0
app/src/main/java/com/nextcloud/talk/controllers/ChatController.java

@@ -26,6 +26,7 @@ import android.content.ClipboardManager;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
+import android.graphics.PorterDuff;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -42,6 +43,7 @@ import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AbsListView;
+import android.widget.ImageButton;
 import android.widget.ProgressBar;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
@@ -90,6 +92,10 @@ import com.stfalcon.chatkit.messages.MessageInput;
 import com.stfalcon.chatkit.messages.MessagesList;
 import com.stfalcon.chatkit.messages.MessagesListAdapter;
 import com.stfalcon.chatkit.utils.DateFormatter;
+import com.vanniktech.emoji.EmojiEditText;
+import com.vanniktech.emoji.EmojiPopup;
+import com.vanniktech.emoji.listeners.OnEmojiPopupDismissListener;
+import com.vanniktech.emoji.listeners.OnEmojiPopupShownListener;
 import com.webianks.library.PopupBubble;
 
 import org.parceler.Parcels;
@@ -137,6 +143,8 @@ public class ChatController extends BaseController implements MessagesListAdapte
     TextView sendHiTextView;
     @BindView(R.id.progressBar)
     ProgressBar loadingProgressBar;
+    @BindView(R.id.smileyButton)
+    ImageButton smileyButton;
     private List<Disposable> disposableList = new ArrayList<>();
     private String conversationName;
     private String roomToken;
@@ -165,6 +173,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
     private static final byte CONTENT_TYPE_SYSTEM_MESSAGE = 1;
 
     private boolean wasDetached;
+    private EmojiPopup emojiPopup;
 
     public ChatController(Bundle args) {
         super(args);
@@ -467,6 +476,21 @@ public class ChatController extends BaseController implements MessagesListAdapte
         ApplicationWideCurrentRoomHolder.getInstance().setUserInRoom(conversationUser);
 
 
+        emojiPopup = EmojiPopup.Builder.fromRootView(view).setOnEmojiPopupShownListener(new OnEmojiPopupShownListener() {
+            @Override
+            public void onEmojiPopupShown() {
+                smileyButton.setColorFilter(getResources().getColor(R.color.colorPrimary),
+                        PorterDuff.Mode.SRC_IN);
+            }
+        }).setOnEmojiPopupDismissListener(new OnEmojiPopupDismissListener() {
+            @Override
+            public void onEmojiPopupDismiss() {
+                if (smileyButton != null) {
+                    smileyButton.clearColorFilter();
+                }
+            }
+        }).build((EmojiEditText) messageInputView.getInputEditText());
+
         if (mentionAutocomplete != null && mentionAutocomplete.isPopupShowing()) {
             mentionAutocomplete.dismissPopup();
         }
@@ -552,6 +576,11 @@ public class ChatController extends BaseController implements MessagesListAdapte
         }
     }
 
+    @OnClick(R.id.smileyButton)
+    void onSmileyClick() {
+        emojiPopup.toggle();
+    }
+
     @OnClick(R.id.emptyLayout)
     void sendHello() {
         if (!isHelloClicked) {

+ 1 - 1
app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java

@@ -115,7 +115,7 @@ public class ConversationInfoController extends BaseController {
     private FlexibleAdapter<AbstractFlexibleItem> adapter;
     private List<AbstractFlexibleItem> recyclerViewItems = new ArrayList<>();
 
-    ConversationInfoController(Bundle args) {
+    public ConversationInfoController(Bundle args) {
         super(args);
         setHasOptionsMenu(true);
         NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);

+ 7 - 0
app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java

@@ -27,6 +27,7 @@ import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
+import android.graphics.Paint;
 import android.graphics.Typeface;
 import android.graphics.drawable.Animatable;
 import android.graphics.drawable.BitmapDrawable;
@@ -59,6 +60,7 @@ import com.facebook.imagepipeline.request.ImageRequest;
 import com.facebook.imagepipeline.request.ImageRequestBuilder;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
+import com.vanniktech.emoji.EmojiTextView;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
@@ -119,6 +121,11 @@ public class DisplayUtils {
         return new BitmapDrawable(getRoundedBitmapFromVectorDrawableResource(resources, resource));
     }
 
+    public static float getDefaultEmojiFontSize(EmojiTextView emojiTextView) {
+        final Paint.FontMetrics fontMetrics = emojiTextView.getPaint().getFontMetrics();
+        return fontMetrics.descent - fontMetrics.ascent;
+    }
+
     private static Bitmap getBitmap(VectorDrawable vectorDrawable) {
         Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),
                 vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);

+ 6 - 65
app/src/main/java/com/nextcloud/talk/utils/TextMatchers.java

@@ -22,18 +22,12 @@
 
 package com.nextcloud.talk.utils;
 
-import android.content.Context;
-import android.text.TextUtils;
-import android.util.Log;
 import android.util.Patterns;
 
-import com.nextcloud.talk.R;
 import com.nextcloud.talk.models.json.chat.ChatMessage;
+import com.vanniktech.emoji.EmojiInformation;
+import com.vanniktech.emoji.EmojiUtils;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -48,9 +42,7 @@ import eu.medsea.mimeutil.detector.OpendesktopMimeDetector;
 
 public final class TextMatchers {
 
-    private static final String TAG = "EmojiDetection";
-
-    private static Pattern regexPattern;
+    private static final String TAG = "TextMatchers";
 
     public static ChatMessage.MessageType getMessageTypeFromString(@NonNull final String text) {
         List<String> links = new ArrayList<>();
@@ -97,59 +89,8 @@ public final class TextMatchers {
         return ChatMessage.MessageType.REGULAR_TEXT_MESSAGE;
     }
 
-    public static boolean isMessageWithSingleEmoticonOnly(@NonNull final Context context,
-                                                          @Nullable final CharSequence text) {
-
-        int startPosition = -1;
-        int endPosition = -1;
-
-        if (!TextUtils.isEmpty(text)) {
-            final Matcher matcher = getRegex(context).matcher(text);
-            while (matcher.find()) {
-                if (startPosition == -1 && endPosition == -1) {
-                    startPosition = matcher.start();
-                    endPosition = matcher.end();
-                } else {
-                    return false;
-                }
-            }
-        } else {
-            return false;
-        }
-
-        return startPosition == 0 && text.length() == endPosition;
-    }
-
-    @NonNull
-    private static Pattern getRegex(@NonNull final Context context) {
-        if (regexPattern == null) {
-            String regex = readTextFile(context, R.raw.regex);
-            regexPattern = Pattern.compile(regex);
-        }
-
-        return regexPattern;
-    }
-
-    @NonNull
-    private static String readTextFile(@NonNull Context context, int rowResource) {
-        InputStream inputStream = context.getResources().openRawResource(rowResource);
-        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
-
-        StringBuilder builder = new StringBuilder();
-        try {
-            String sCurrentLine;
-            while ((sCurrentLine = br.readLine()) != null) builder.append(sCurrentLine);
-        } catch (IOException e) {
-            Log.e(TAG, e.getLocalizedMessage());
-        } finally {
-            try {
-                inputStream.close();
-                br.close();
-            } catch (IOException e) {
-                Log.e(TAG, e.getLocalizedMessage());
-            }
-        }
-
-        return builder.toString();
+    public static boolean isMessageWithSingleEmoticonOnly(@Nullable final String text) {
+        final EmojiInformation emojiInformation = EmojiUtils.emojiInformation(text);
+        return (emojiInformation.isOnlyEmojis && emojiInformation.emojis.size() == 1);
     }
 }

+ 44 - 0
app/src/main/res/layout/emoji_view.xml

@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Nextcloud Talk application
+  ~
+  ~ @author Mario Danic
+  ~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU General Public License as published by
+  ~ the Free Software Foundation, either version 3 of the License, or
+  ~ at your option) any later version.
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.viewpager.widget.ViewPager
+        android:id="@+id/emojis_pager"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_above="@+id/emoji_divider" />
+
+    <View
+        android:id="@+id/emoji_divider"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:layout_above="@id/emojis_tab"/>
+
+    <LinearLayout
+        android:id="@+id/emojis_tab"
+        android:layout_width="match_parent"
+        android:layout_height="36dp"
+        android:layout_alignParentBottom="true"
+        android:orientation="horizontal" />
+
+</RelativeLayout>

+ 1 - 1
app/src/main/res/layout/item_custom_incoming_preview_message.xml

@@ -59,7 +59,7 @@
             android:layout_marginTop="8dp"
             android:layout_marginBottom="8dp">
 
-            <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView
+            <com.vanniktech.emoji.EmojiTextView
                 android:id="@id/messageText"
                 android:layout_width="wrap_content"
                 android:textColorLink="@color/warm_grey_four"

+ 1 - 1
app/src/main/res/layout/item_custom_incoming_text_message.xml

@@ -54,7 +54,7 @@
             android:textColor="@color/colorPrimary"
             android:textSize="12sp" />
 
-        <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView
+        <androidx.emoji.widget.EmojiTextView
             android:id="@id/messageText"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"

+ 1 - 1
app/src/main/res/layout/item_custom_outcoming_preview_message.xml

@@ -46,7 +46,7 @@
         android:layout_marginTop="8dp"
         android:layout_marginBottom="8dp">
 
-        <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@id/messageText"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"

+ 1 - 1
app/src/main/res/layout/item_custom_outcoming_text_message.xml

@@ -38,7 +38,7 @@
         app:flexWrap="wrap"
         app:justifyContent="flex_end">
 
-        <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@id/messageText"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"

+ 1 - 1
app/src/main/res/layout/rv_item_conversation.xml

@@ -64,7 +64,7 @@
         android:layout_toEndOf="@id/frame_layout"
         android:orientation="vertical">
 
-        <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@+id/name_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"

+ 2 - 2
app/src/main/res/layout/rv_item_conversation_with_last_message.xml

@@ -61,7 +61,7 @@
                 android:background="@drawable/shape_favorite_bubble" />
         </FrameLayout>
 
-        <TextView
+        <com.vanniktech.emoji.EmojiTextView
             android:id="@id/dialogName"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
@@ -101,7 +101,7 @@
                 android:contentDescription="@null"
                 tools:src="@drawable/ic_call_black_24dp" />
 
-            <TextView
+            <com.vanniktech.emoji.EmojiTextView
                 android:id="@id/dialogLastMessage"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"

+ 13 - 2
app/src/main/res/layout/view_message_input.xml

@@ -35,11 +35,12 @@
         android:layout_height="0dp"
         android:layout_toEndOf="@id/attachmentButton" />
 
-    <com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonEditText
+    <com.vanniktech.emoji.EmojiEditText
         android:id="@id/messageInput"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_centerVertical="true"
+        android:imeOptions="actionDone|flagNoFullscreen"
         android:layout_toStartOf="@id/sendButtonSpace"
         android:inputType="textAutoCorrect|textMultiLine|textCapSentences"/>
 
@@ -47,7 +48,17 @@
         android:id="@id/sendButtonSpace"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:layout_toStartOf="@id/messageSendButton" />
+        android:layout_toStartOf="@id/smileyButton"/>
+
+    <ImageButton
+        android:id="@+id/smileyButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_smiley"
+        android:layout_toStartOf="@id/messageSendButton"
+        android:background="@color/transparent"
+        android:layout_marginEnd="8dp"
+        android:layout_centerVertical="true"/>
 
     <ImageButton
         android:id="@id/messageSendButton"

文件差异内容过多而无法显示
+ 0 - 2
app/src/main/res/raw/regex


+ 4 - 0
app/src/main/res/values/colors.xml

@@ -17,5 +17,9 @@
     <color name="nc_grey">#D5D5D5</color>
     <color name="white30">#E9FFFFFF</color>
     <color name="grey950">#111111</color>
+
+    <color name="emoji_background">#ECEFF1</color>
+    <color name="emoji_icons">#61000000</color>
+    <color name="emoji_divider">#15000000</color>
 </resources>
 

部分文件因为文件数量过多而无法显示