Merge pull request #1315 from nextcloud/swipeToReplyFlagProcessing

Swipe to reply flag processing
This commit is contained in:
Andy Scherzinger 2021-06-09 13:57:42 +02:00 committed by GitHub
commit 24ef62fc93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 38 additions and 24 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1 +1 @@
450 448