mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-17 09:45:02 +01:00
impl marcel suggestions + adding deleting cache option
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
parent
9bdaf68232
commit
df2c6cfc06
@ -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 {
|
||||
|
@ -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!!) {
|
||||
|
@ -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,
|
||||
|
@ -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<QueuedMessage>()
|
||||
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 {
|
||||
|
@ -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) {
|
||||
|
@ -176,6 +176,8 @@ public interface AppPreferences {
|
||||
|
||||
List<MessageInputViewModel.QueuedMessage> getMessageQueue(String internalConversationId);
|
||||
|
||||
void deleteAllMessageQueuesFor(String userId);
|
||||
|
||||
|
||||
void clear();
|
||||
}
|
||||
|
@ -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) =
|
||||
|
Loading…
Reference in New Issue
Block a user