impl marcel suggestions + adding deleting cache option

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2024-10-07 10:26:01 -05:00 committed by Marcel Hibbe
parent 9bdaf68232
commit df2c6cfc06
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
7 changed files with 50 additions and 23 deletions

View File

@ -12,6 +12,7 @@ import android.util.Log
import android.view.View import android.view.View
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole 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.visibility = View.VISIBLE
binding.messageEdit.requestFocus()
ViewCompat.getWindowInsetsController(binding.root)?.show(WindowInsetsCompat.Type.ime())
binding.messageEdit.setText(binding.messageText.text) binding.messageEdit.setText(binding.messageText.text)
binding.messageText.visibility = View.GONE binding.messageText.visibility = View.GONE
} else { } else {

View File

@ -670,7 +670,7 @@ class ChatActivity :
TAG, TAG,
"currentConversation was null in observer ChatViewModel.GetCapabilitiesInitialLoadState" "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) { override fun editTemporaryMessage(id: Int, newMessage: String) {
messageInputViewModel.editQueuedMessage(roomToken, id, newMessage) messageInputViewModel.editQueuedMessage(currentConversation!!.internalId, id, newMessage)
adapter?.notifyDataSetChanged() // TODO optimize this 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) { override fun deleteTemporaryMessage(id: Int) {
messageInputViewModel.removeFromQueue(roomToken, id) messageInputViewModel.removeFromQueue(currentConversation!!.internalId, id)
var i = 0 var i = 0
val max = messageInputViewModel.messageQueueSizeFlow.value?.plus(1) val max = messageInputViewModel.messageQueueSizeFlow.value?.plus(1)
for (item in adapter?.items!!) { for (item in adapter?.items!!) {

View File

@ -143,7 +143,7 @@ class MessageInputFragment : Fragment() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
chatActivity.messageInputViewModel.restoreMessageQueue(chatActivity.roomToken) chatActivity.messageInputViewModel.restoreMessageQueue(chatActivity.currentConversation!!.internalId)
} }
override fun onDestroyView() { override fun onDestroyView() {
@ -245,7 +245,7 @@ class MessageInputFragment : Fragment() {
if (isOnline) { if (isOnline) {
chatActivity.messageInputViewModel.switchToMessageQueue(false) chatActivity.messageInputViewModel.switchToMessageQueue(false)
chatActivity.messageInputViewModel.sendAndEmptyMessageQueue( chatActivity.messageInputViewModel.sendAndEmptyMessageQueue(
chatActivity.roomToken, chatActivity.currentConversation!!.internalId,
chatActivity.conversationUser!!.getCredentials(), chatActivity.conversationUser!!.getCredentials(),
ApiUtils.getUrlForChat( ApiUtils.getUrlForChat(
chatActivity.chatApiVersion, chatActivity.chatApiVersion,
@ -794,7 +794,7 @@ class MessageInputFragment : Fragment() {
private fun sendMessage(message: CharSequence, replyTo: Int?, sendWithoutNotification: Boolean) { private fun sendMessage(message: CharSequence, replyTo: Int?, sendWithoutNotification: Boolean) {
chatActivity.messageInputViewModel.sendChatMessage( chatActivity.messageInputViewModel.sendChatMessage(
chatActivity.roomToken, chatActivity.currentConversation!!.internalId,
chatActivity.conversationUser!!.getCredentials(), chatActivity.conversationUser!!.getCredentials(),
ApiUtils.getUrlForChat( ApiUtils.getUrlForChat(
chatActivity.chatApiVersion, chatActivity.chatApiVersion,

View File

@ -131,7 +131,7 @@ class MessageInputViewModel @Inject constructor(
@Suppress("LongParameterList") @Suppress("LongParameterList")
fun sendChatMessage( fun sendChatMessage(
roomToken: String, internalId: String,
credentials: String, credentials: String,
url: String, url: String,
message: CharSequence, message: CharSequence,
@ -142,10 +142,12 @@ class MessageInputViewModel @Inject constructor(
if (isQueueing) { if (isQueueing) {
val tempID = System.currentTimeMillis().toInt() val tempID = System.currentTimeMillis().toInt()
val qMsg = QueuedMessage(tempID, message, displayName, replyTo, sendWithoutNotification) val qMsg = QueuedMessage(tempID, message, displayName, replyTo, sendWithoutNotification)
messageQueue = dataStore.getMessageQueue(roomToken) messageQueue = dataStore.getMessageQueue(internalId)
messageQueue.add(qMsg) messageQueue.add(qMsg)
dataStore.saveMessageQueue(roomToken, messageQueue) dataStore.saveMessageQueue(internalId, messageQueue)
_messageQueueSizeFlow.update { messageQueue.size } _messageQueueSizeFlow.update { messageQueue.size }
val id = internalId.substringBefore('@')
dataStore.deleteAllMessageQueuesFor(id)
_messageQueueFlow.postValue(listOf(qMsg)) _messageQueueFlow.postValue(listOf(qMsg))
return return
} }
@ -251,16 +253,16 @@ class MessageInputViewModel @Inject constructor(
_getRecordingTime.postValue(time) _getRecordingTime.postValue(time)
} }
fun sendAndEmptyMessageQueue(roomToken: String, credentials: String, url: String) { fun sendAndEmptyMessageQueue(internalId: String, credentials: String, url: String) {
if (isQueueing) return if (isQueueing) return
messageQueue.clear() messageQueue.clear()
val queue = dataStore.getMessageQueue(roomToken) val queue = dataStore.getMessageQueue(internalId)
dataStore.saveMessageQueue(roomToken, null) // empties the queue dataStore.saveMessageQueue(internalId, null) // empties the queue
while (queue.size > 0) { while (queue.size > 0) {
val msg = queue.removeAt(0) val msg = queue.removeAt(0)
sendChatMessage( sendChatMessage(
roomToken, internalId,
credentials, credentials,
url, url,
msg.message!!, msg.message!!,
@ -273,8 +275,8 @@ class MessageInputViewModel @Inject constructor(
_messageQueueSizeFlow.tryEmit(0) _messageQueueSizeFlow.tryEmit(0)
} }
fun getTempMessagesFromMessageQueue(roomToken: String) { fun getTempMessagesFromMessageQueue(internalId: String) {
val queue = dataStore.getMessageQueue(roomToken) val queue = dataStore.getMessageQueue(internalId)
val list = mutableListOf<QueuedMessage>() val list = mutableListOf<QueuedMessage>()
for (msg in queue) { for (msg in queue) {
Log.d("Julius", "Msg: ${msg.message}") Log.d("Julius", "Msg: ${msg.message}")
@ -287,32 +289,32 @@ class MessageInputViewModel @Inject constructor(
isQueueing = shouldQueue isQueueing = shouldQueue
} }
fun restoreMessageQueue(roomToken: String) { fun restoreMessageQueue(internalId: String) {
messageQueue = dataStore.getMessageQueue(roomToken) messageQueue = dataStore.getMessageQueue(internalId)
_messageQueueSizeFlow.tryEmit(messageQueue.size) _messageQueueSizeFlow.tryEmit(messageQueue.size)
} }
fun removeFromQueue(roomToken: String, id: Int) { fun removeFromQueue(internalId: String, id: Int) {
val queue = dataStore.getMessageQueue(roomToken) val queue = dataStore.getMessageQueue(internalId)
for (qMsg in queue) { for (qMsg in queue) {
if (qMsg.id == id) { if (qMsg.id == id) {
queue.remove(qMsg) queue.remove(qMsg)
break break
} }
} }
dataStore.saveMessageQueue(roomToken, queue) dataStore.saveMessageQueue(internalId, queue)
_messageQueueSizeFlow.tryEmit(queue.size) _messageQueueSizeFlow.tryEmit(queue.size)
} }
fun editQueuedMessage(roomToken: String, id: Int, newMessage: String) { fun editQueuedMessage(internalId: String, id: Int, newMessage: String) {
val queue = dataStore.getMessageQueue(roomToken) val queue = dataStore.getMessageQueue(internalId)
for (qMsg in queue) { for (qMsg in queue) {
if (qMsg.id == id) { if (qMsg.id == id) {
qMsg.message = newMessage qMsg.message = newMessage
break break
} }
} }
dataStore.saveMessageQueue(roomToken, queue) dataStore.saveMessageQueue(internalId, queue)
} }
companion object { companion object {

View File

@ -25,6 +25,7 @@ import com.nextcloud.talk.models.json.generic.GenericOverall;
import com.nextcloud.talk.models.json.push.PushConfigurationState; import com.nextcloud.talk.models.json.push.PushConfigurationState;
import com.nextcloud.talk.users.UserManager; import com.nextcloud.talk.users.UserManager;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.webrtc.WebSocketConnectionHelper; import com.nextcloud.talk.webrtc.WebSocketConnectionHelper;
import java.net.CookieManager; import java.net.CookieManager;
@ -53,6 +54,8 @@ public class AccountRemovalWorker extends Worker {
@Inject ArbitraryStorageManager arbitraryStorageManager; @Inject ArbitraryStorageManager arbitraryStorageManager;
@Inject AppPreferences appPreferences;
@Inject Retrofit retrofit; @Inject Retrofit retrofit;
@Inject OkHttpClient okHttpClient; @Inject OkHttpClient okHttpClient;
@ -193,6 +196,7 @@ public class AccountRemovalWorker extends Worker {
if (user.getId() != null) { if (user.getId() != null) {
String username = user.getUsername(); String username = user.getUsername();
try { try {
// appPreferences.deleteAllMessageQueuesFor(user.getUserId()); // TODO uncomment this when done
userManager.deleteUser(user.getId()); userManager.deleteUser(user.getId());
Log.d(TAG, "deleted user: " + username); Log.d(TAG, "deleted user: " + username);
} catch (Throwable e) { } catch (Throwable e) {

View File

@ -176,6 +176,8 @@ public interface AppPreferences {
List<MessageInputViewModel.QueuedMessage> getMessageQueue(String internalConversationId); List<MessageInputViewModel.QueuedMessage> getMessageQueue(String internalConversationId);
void deleteAllMessageQueuesFor(String userId);
void clear(); void clear();
} }

View File

@ -524,6 +524,20 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
return queue 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() {} override fun clear() {}
private suspend fun writeString(key: String, value: String) = private suspend fun writeString(key: String, value: String) =