Browse Source

Merge pull request #1315 from nextcloud/swipeToReplyFlagProcessing

Swipe to reply flag processing
Andy Scherzinger 3 years ago
parent
commit
24ef62fc93

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

@@ -45,6 +45,7 @@ import com.nextcloud.talk.R
 import com.nextcloud.talk.application.NextcloudTalkApplication
 import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
 import com.nextcloud.talk.models.json.chat.ChatMessage
+import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback
 import com.nextcloud.talk.utils.ApiUtils
 import com.nextcloud.talk.utils.DisplayUtils
 import com.nextcloud.talk.utils.TextMatchers
@@ -53,8 +54,8 @@ import com.stfalcon.chatkit.messages.MessageHolders
 import javax.inject.Inject
 
 @AutoInjector(NextcloudTalkApplication::class)
-class MagicIncomingTextMessageViewHolder(incomingView: View) : MessageHolders
-.IncomingTextMessageViewHolder<ChatMessage>(incomingView) {
+class MagicIncomingTextMessageViewHolder(itemView: View) : MessageHolders
+.IncomingTextMessageViewHolder<ChatMessage>(itemView) {
 
     @JvmField
     @BindView(R.id.messageAuthor)
@@ -101,10 +102,7 @@ class MagicIncomingTextMessageViewHolder(incomingView: View) : MessageHolders
     var appPreferences: AppPreferences? = null
 
     init {
-        ButterKnife.bind(
-            this,
-            itemView
-        )
+        ButterKnife.bind(this, itemView)
     }
 
     override fun onBind(message: ChatMessage) {
@@ -257,5 +255,7 @@ class MagicIncomingTextMessageViewHolder(incomingView: View) : MessageHolders
         } else {
             quotedChatMessageView?.visibility = View.GONE
         }
+
+        itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.isReplyable)
     }
 }

+ 8 - 4
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt

@@ -42,6 +42,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
 import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
 import com.nextcloud.talk.models.json.chat.ChatMessage
 import com.nextcloud.talk.models.json.chat.ReadStatus
+import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback
 import com.nextcloud.talk.utils.ApiUtils
 import com.nextcloud.talk.utils.DisplayUtils.getMessageSelector
 import com.nextcloud.talk.utils.DisplayUtils.searchAndReplaceWithMentionSpan
@@ -89,6 +90,12 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage
     var context: Context? = null
 
     private val realView: View
+
+    init {
+        ButterKnife.bind(this, itemView)
+        this.realView = itemView
+    }
+
     override fun onBind(message: ChatMessage) {
         super.onBind(message)
         sharedApplication!!.componentApplication.inject(this)
@@ -208,10 +215,7 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage
         }
 
         checkMark?.setContentDescription(readStatusContentDescriptionString)
-    }
 
-    init {
-        ButterKnife.bind(this, itemView)
-        this.realView = itemView
+        itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.isReplyable)
     }
 }

+ 5 - 1
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java

@@ -79,10 +79,12 @@ import io.reactivex.disposables.Disposable;
 import io.reactivex.schedulers.Schedulers;
 import okhttp3.OkHttpClient;
 
+import static com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback.REPLYABLE_VIEW_TAG;
+
 @AutoInjector(NextcloudTalkApplication.class)
 public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageMessageViewHolder<ChatMessage> {
 
-    private static String TAG = "MagicPreviewMessageViewHolder";
+    private static final String TAG = "PreviewMsgViewHolder";
 
     @BindView(R.id.messageText)
     EmojiTextView messageText;
@@ -194,6 +196,8 @@ public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageM
             }
             messageText.setText("");
         }
+
+        itemView.setTag(REPLYABLE_VIEW_TAG, message.isReplyable());
     }
 
     private void openOrDownloadFile(ChatMessage message) {

+ 13 - 5
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java

@@ -41,6 +41,8 @@ import javax.inject.Inject;
 import androidx.core.view.ViewCompat;
 import autodagger.AutoInjector;
 
+import static com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback.REPLYABLE_VIEW_TAG;
+
 @AutoInjector(NextcloudTalkApplication.class)
 public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMessageViewHolder<ChatMessage> {
 
@@ -54,7 +56,7 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes
         super(itemView);
         NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this);
     }
-
+    
     @Override
     public void onBind(ChatMessage message) {
         super.onBind(message);
@@ -64,7 +66,6 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes
         int pressedColor;
         int mentionColor;
 
-
         pressedColor = normalColor;
         mentionColor = resources.getColor(R.color.textColorMaxContrast);
 
@@ -77,13 +78,20 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes
 
         if (message.messageParameters != null && message.messageParameters.size() > 0) {
             for (String key : message.messageParameters.keySet()) {
-                Map<String, String> individualHashMap = message.messageParameters.get(key);
-                if (individualHashMap != null && (individualHashMap.get("type").equals("user") || individualHashMap.get("type").equals("guest") || individualHashMap.get("type").equals("call"))) {
-                    messageString = DisplayUtils.searchAndColor(messageString, "@" + individualHashMap.get("name"), mentionColor);
+                Map<String, String> individualMap = message.messageParameters.get(key);
+                if (individualMap != null &&
+                        ("user".equals(individualMap.get("type")) ||
+                                "guest".equals(individualMap.get("type")) ||
+                                "call".equals(individualMap.get("type"))
+                        )) {
+                    messageString = DisplayUtils.searchAndColor(
+                            messageString, "@" + individualMap.get("name"), mentionColor);
                 }
             }
         }
 
         text.setText(messageString);
+
+        itemView.setTag(REPLYABLE_VIEW_TAG, message.isReplyable());
     }
 }

+ 4 - 7
app/src/main/java/com/nextcloud/talk/ui/recyclerview/MessageSwipeCallback.kt

@@ -43,9 +43,6 @@ import androidx.recyclerview.widget.ItemTouchHelper.ACTION_STATE_SWIPE
 import androidx.recyclerview.widget.ItemTouchHelper.RIGHT
 import androidx.recyclerview.widget.RecyclerView
 import com.nextcloud.talk.R
-import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder
-import com.nextcloud.talk.adapters.messages.MagicOutcomingTextMessageViewHolder
-import com.nextcloud.talk.adapters.messages.MagicPreviewMessageViewHolder
 import kotlin.math.abs
 import kotlin.math.ceil
 import kotlin.math.min
@@ -76,11 +73,10 @@ class MessageSwipeCallback(private val context: Context, private val messageSwip
     private var startTracking = false
 
     override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
-        if (viewHolder is MagicPreviewMessageViewHolder ||
-            viewHolder is MagicIncomingTextMessageViewHolder ||
-            viewHolder is MagicOutcomingTextMessageViewHolder
+        view = viewHolder.itemView
+        if (viewHolder.itemView.getTag(REPLYABLE_VIEW_TAG) != null &&
+            viewHolder.itemView.getTag(REPLYABLE_VIEW_TAG) as Boolean
         ) {
-            view = viewHolder.itemView
             imageDrawable = AppCompatResources.getDrawable(context, R.drawable.ic_reply)!!
             shareRound = AppCompatResources.getDrawable(context, R.drawable.round_bgnd)!!
             return makeMovementFlags(ACTION_STATE_IDLE, RIGHT)
@@ -296,5 +292,6 @@ class MessageSwipeCallback(private val context: Context, private val messageSwip
         const val ICON_BOUNDS_PIXEL_TOP: Int = 13
         const val ICON_BOUNDS_PIXEL_RIGHT: Int = 12
         const val ICON_BOUNDS_PIXEL_BOTTOM: Int = 11
+        const val REPLYABLE_VIEW_TAG: Int = R.string.replyable_message_view_tag
     }
 }

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -422,6 +422,7 @@
 
     <!-- Non-translatable strings -->
     <string name="tooManyUnreadMessages" translatable="false">999+</string>
+    <string name="replyable_message_view_tag" translatable="false">REPLYABLE_TAG</string>
 
     <string name="nc_action_open_main_menu">Open main menu</string>
     <string name="failed_to_save">Failed to save %1$s</string>

+ 1 - 1
scripts/analysis/findbugs-results.txt

@@ -1 +1 @@
-450
+448