From df2c6cfc060fff7117bbf66007012a9e74e52676 Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Mon, 7 Oct 2024 10:26:01 -0500 Subject: [PATCH] impl marcel suggestions + adding deleting cache option Signed-off-by: rapterjet2004 --- .../messages/TemporaryMessageViewHolder.kt | 3 ++ .../com/nextcloud/talk/chat/ChatActivity.kt | 8 +++-- .../talk/chat/MessageInputFragment.kt | 6 ++-- .../chat/viewmodels/MessageInputViewModel.kt | 36 ++++++++++--------- .../talk/jobs/AccountRemovalWorker.java | 4 +++ .../utils/preferences/AppPreferences.java | 2 ++ .../utils/preferences/AppPreferencesImpl.kt | 14 ++++++++ 7 files changed, 50 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt index 25a7d7878..29003ee99 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt @@ -12,6 +12,7 @@ import android.util.Log import android.view.View import androidx.core.content.res.ResourcesCompat import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import autodagger.AutoInjector import coil.load import com.nextcloud.android.common.ui.theme.utils.ColorRole @@ -68,6 +69,8 @@ class TemporaryMessageViewHolder(outgoingView: View, payload: Any) : ) ) binding.messageEdit.visibility = View.VISIBLE + binding.messageEdit.requestFocus() + ViewCompat.getWindowInsetsController(binding.root)?.show(WindowInsetsCompat.Type.ime()) binding.messageEdit.setText(binding.messageText.text) binding.messageText.visibility = View.GONE } else { diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 13632bfc5..0c6e68c17 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -670,7 +670,7 @@ class ChatActivity : TAG, "currentConversation was null in observer ChatViewModel.GetCapabilitiesInitialLoadState" ) - messageInputViewModel.getTempMessagesFromMessageQueue(roomToken) + messageInputViewModel.getTempMessagesFromMessageQueue(currentConversation!!.internalId) } } @@ -3670,13 +3670,15 @@ class ChatActivity : } override fun editTemporaryMessage(id: Int, newMessage: String) { - messageInputViewModel.editQueuedMessage(roomToken, id, newMessage) + messageInputViewModel.editQueuedMessage(currentConversation!!.internalId, id, newMessage) adapter?.notifyDataSetChanged() // TODO optimize this + // TODO disable messageInput cursor and have cursor active in the message with keyboard out - from marcel + } override fun deleteTemporaryMessage(id: Int) { - messageInputViewModel.removeFromQueue(roomToken, id) + messageInputViewModel.removeFromQueue(currentConversation!!.internalId, id) var i = 0 val max = messageInputViewModel.messageQueueSizeFlow.value?.plus(1) for (item in adapter?.items!!) { diff --git a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt index 263231481..a7dfe6522 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt @@ -143,7 +143,7 @@ class MessageInputFragment : Fragment() { override fun onResume() { super.onResume() - chatActivity.messageInputViewModel.restoreMessageQueue(chatActivity.roomToken) + chatActivity.messageInputViewModel.restoreMessageQueue(chatActivity.currentConversation!!.internalId) } override fun onDestroyView() { @@ -245,7 +245,7 @@ class MessageInputFragment : Fragment() { if (isOnline) { chatActivity.messageInputViewModel.switchToMessageQueue(false) chatActivity.messageInputViewModel.sendAndEmptyMessageQueue( - chatActivity.roomToken, + chatActivity.currentConversation!!.internalId, chatActivity.conversationUser!!.getCredentials(), ApiUtils.getUrlForChat( chatActivity.chatApiVersion, @@ -794,7 +794,7 @@ class MessageInputFragment : Fragment() { private fun sendMessage(message: CharSequence, replyTo: Int?, sendWithoutNotification: Boolean) { chatActivity.messageInputViewModel.sendChatMessage( - chatActivity.roomToken, + chatActivity.currentConversation!!.internalId, chatActivity.conversationUser!!.getCredentials(), ApiUtils.getUrlForChat( chatActivity.chatApiVersion, diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt index b1f82a073..5fe19e356 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt @@ -131,7 +131,7 @@ class MessageInputViewModel @Inject constructor( @Suppress("LongParameterList") fun sendChatMessage( - roomToken: String, + internalId: String, credentials: String, url: String, message: CharSequence, @@ -142,10 +142,12 @@ class MessageInputViewModel @Inject constructor( if (isQueueing) { val tempID = System.currentTimeMillis().toInt() val qMsg = QueuedMessage(tempID, message, displayName, replyTo, sendWithoutNotification) - messageQueue = dataStore.getMessageQueue(roomToken) + messageQueue = dataStore.getMessageQueue(internalId) messageQueue.add(qMsg) - dataStore.saveMessageQueue(roomToken, messageQueue) + dataStore.saveMessageQueue(internalId, messageQueue) _messageQueueSizeFlow.update { messageQueue.size } + val id = internalId.substringBefore('@') + dataStore.deleteAllMessageQueuesFor(id) _messageQueueFlow.postValue(listOf(qMsg)) return } @@ -251,16 +253,16 @@ class MessageInputViewModel @Inject constructor( _getRecordingTime.postValue(time) } - fun sendAndEmptyMessageQueue(roomToken: String, credentials: String, url: String) { + fun sendAndEmptyMessageQueue(internalId: String, credentials: String, url: String) { if (isQueueing) return messageQueue.clear() - val queue = dataStore.getMessageQueue(roomToken) - dataStore.saveMessageQueue(roomToken, null) // empties the queue + val queue = dataStore.getMessageQueue(internalId) + dataStore.saveMessageQueue(internalId, null) // empties the queue while (queue.size > 0) { val msg = queue.removeAt(0) sendChatMessage( - roomToken, + internalId, credentials, url, msg.message!!, @@ -273,8 +275,8 @@ class MessageInputViewModel @Inject constructor( _messageQueueSizeFlow.tryEmit(0) } - fun getTempMessagesFromMessageQueue(roomToken: String) { - val queue = dataStore.getMessageQueue(roomToken) + fun getTempMessagesFromMessageQueue(internalId: String) { + val queue = dataStore.getMessageQueue(internalId) val list = mutableListOf() for (msg in queue) { Log.d("Julius", "Msg: ${msg.message}") @@ -287,32 +289,32 @@ class MessageInputViewModel @Inject constructor( isQueueing = shouldQueue } - fun restoreMessageQueue(roomToken: String) { - messageQueue = dataStore.getMessageQueue(roomToken) + fun restoreMessageQueue(internalId: String) { + messageQueue = dataStore.getMessageQueue(internalId) _messageQueueSizeFlow.tryEmit(messageQueue.size) } - fun removeFromQueue(roomToken: String, id: Int) { - val queue = dataStore.getMessageQueue(roomToken) + fun removeFromQueue(internalId: String, id: Int) { + val queue = dataStore.getMessageQueue(internalId) for (qMsg in queue) { if (qMsg.id == id) { queue.remove(qMsg) break } } - dataStore.saveMessageQueue(roomToken, queue) + dataStore.saveMessageQueue(internalId, queue) _messageQueueSizeFlow.tryEmit(queue.size) } - fun editQueuedMessage(roomToken: String, id: Int, newMessage: String) { - val queue = dataStore.getMessageQueue(roomToken) + fun editQueuedMessage(internalId: String, id: Int, newMessage: String) { + val queue = dataStore.getMessageQueue(internalId) for (qMsg in queue) { if (qMsg.id == id) { qMsg.message = newMessage break } } - dataStore.saveMessageQueue(roomToken, queue) + dataStore.saveMessageQueue(internalId, queue) } companion object { diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java index 18782a5be..e91c8a136 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java @@ -25,6 +25,7 @@ import com.nextcloud.talk.models.json.generic.GenericOverall; import com.nextcloud.talk.models.json.push.PushConfigurationState; import com.nextcloud.talk.users.UserManager; import com.nextcloud.talk.utils.ApiUtils; +import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.webrtc.WebSocketConnectionHelper; import java.net.CookieManager; @@ -53,6 +54,8 @@ public class AccountRemovalWorker extends Worker { @Inject ArbitraryStorageManager arbitraryStorageManager; + @Inject AppPreferences appPreferences; + @Inject Retrofit retrofit; @Inject OkHttpClient okHttpClient; @@ -193,6 +196,7 @@ public class AccountRemovalWorker extends Worker { if (user.getId() != null) { String username = user.getUsername(); try { +// appPreferences.deleteAllMessageQueuesFor(user.getUserId()); // TODO uncomment this when done userManager.deleteUser(user.getId()); Log.d(TAG, "deleted user: " + username); } catch (Throwable e) { diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java index 1769aa23d..606614a72 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java @@ -176,6 +176,8 @@ public interface AppPreferences { List getMessageQueue(String internalConversationId); + void deleteAllMessageQueuesFor(String userId); + void clear(); } diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferencesImpl.kt b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferencesImpl.kt index 8cde1c64c..11ab5f846 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferencesImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferencesImpl.kt @@ -524,6 +524,20 @@ class AppPreferencesImpl(val context: Context) : AppPreferences { return queue } + override fun deleteAllMessageQueuesFor(userId: String) { + runBlocking { + async { + val preferencesMap = context.dataStore.data.first().asMap() + for (preference in preferencesMap) { + if (preference.key.name.contains("$userId@")) { + Log.d("Julius", "found: ${preference.key} :\n ${preference.value}\n") + // TODO remove it somehow + } + } + } + } + } + override fun clear() {} private suspend fun writeString(key: String, value: String) =