mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-19 18:55:05 +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 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 {
|
||||||
|
@ -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!!) {
|
||||||
|
@ -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,
|
||||||
|
@ -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 {
|
||||||
|
@ -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) {
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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) =
|
||||||
|
Loading…
Reference in New Issue
Block a user