mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 22:29:09 +00:00
Merge pull request #1315 from nextcloud/swipeToReplyFlagProcessing
Swipe to reply flag processing
This commit is contained in:
commit
24ef62fc93
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
@ -1 +1 @@
|
|||||||
450
|
448
|
Loading…
Reference in New Issue
Block a user