From 03c5d2561e5f4bf02d7f7320d87f4403d24097c2 Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Mon, 17 Mar 2025 11:45:34 -0500 Subject: [PATCH 1/2] this should work - didn't test yet tho Signed-off-by: rapterjet2004 --- .../main/java/com/nextcloud/talk/chat/ChatActivity.kt | 7 ++++++- .../nextcloud/talk/chat/data/io/MediaRecorderManager.kt | 9 ++++++++- .../com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-) 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 00dea104182..5b7ec450fb5 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -506,10 +506,15 @@ class ChatActivity : } override fun onSaveInstanceState(outState: Bundle) { - chatViewModel.handleOrientationChange() + chatViewModel.handleSavedInstance() super.onSaveInstanceState(outState) } + override fun onRestoreInstanceState(savedInstanceState: Bundle) { + chatViewModel.handleRestoreInstance() + super.onRestoreInstanceState(savedInstanceState) + } + override fun onStop() { super.onStop() active = false diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/io/MediaRecorderManager.kt b/app/src/main/java/com/nextcloud/talk/chat/data/io/MediaRecorderManager.kt index a08ef504e6d..3ec0984838d 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/io/MediaRecorderManager.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/io/MediaRecorderManager.kt @@ -35,6 +35,7 @@ class MediaRecorderManager : LifecycleAwareManager { } var currentVoiceRecordFile: String = "" + private var lockRecording = false enum class MediaRecorderState { INITIAL, @@ -166,6 +167,12 @@ class MediaRecorderManager : LifecycleAwareManager { } override fun handleOnStop() { - stop() + if (!lockRecording) { + stop() + } + } + + fun lockRecording(shouldLock: Boolean) { + lockRecording = shouldLock } } diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt index 0a2b4a0601c..b2d6949b6b2 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt @@ -667,8 +667,13 @@ class ChatViewModel @Inject constructor( audioFocusRequestManager.audioFocusRequest(request, callback) } - fun handleOrientationChange() { + fun handleSavedInstance() { _getCapabilitiesViewState.value = GetCapabilitiesStartState + mediaRecorderManager.lockRecording(true) + } + + fun handleRestoreInstance() { + mediaRecorderManager.lockRecording(false) } fun getMessageById(url: String, conversationModel: ConversationModel, messageId: Long): Flow = From 53c4329f913460df0f16d2c14f162ad64a867b69 Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Fri, 18 Apr 2025 12:26:35 -0500 Subject: [PATCH 2/2] WIP Signed-off-by: rapterjet2004 --- .../com/nextcloud/talk/chat/ChatActivity.kt | 32 ++++++++----------- .../chat/viewmodels/MessageInputViewModel.kt | 13 +++++++- 2 files changed, 25 insertions(+), 20 deletions(-) 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 5b7ec450fb5..aa82d0996c4 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -50,6 +50,7 @@ import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts +import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia import androidx.appcompat.view.ContextThemeWrapper import androidx.cardview.widget.CardView import androidx.compose.runtime.mutableStateOf @@ -213,9 +214,7 @@ import java.util.Date import java.util.Locale import java.util.concurrent.ExecutionException import javax.inject.Inject -import kotlin.collections.set import kotlin.math.roundToInt -import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia @AutoInjector(NextcloudTalkApplication::class) class ChatActivity : @@ -347,8 +346,6 @@ class ChatActivity : } } - private lateinit var messageInputFragment: MessageInputFragment - val typingParticipants = HashMap() var callStarted = false @@ -425,9 +422,9 @@ class ChatActivity : roomToken ) - messageInputFragment = getMessageInputFragment() messageInputViewModel = ViewModelProvider(this, viewModelFactory)[MessageInputViewModel::class.java] - messageInputViewModel.setData(chatViewModel.getChatRepository()) + val internalId = conversationUser!!.id.toString() + "@" + roomToken + messageInputViewModel.setData(chatViewModel.getChatRepository(), internalId) binding.progressBar.visibility = View.VISIBLE @@ -444,15 +441,6 @@ class ChatActivity : } } - private fun getMessageInputFragment(): MessageInputFragment { - val internalId = conversationUser!!.id.toString() + "@" + roomToken - return MessageInputFragment().apply { - arguments = Bundle().apply { - putString(CONVERSATION_INTERNAL_ID, internalId) - } - } - } - override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) val extras: Bundle? = intent.extras @@ -588,9 +576,13 @@ class ChatActivity : chatApiVersion = ApiUtils.getChatApiVersion(spreedCapabilities, intArrayOf(1)) participantPermissions = ParticipantPermissions(spreedCapabilities, currentConversation!!) - supportFragmentManager.commit { - setReorderingAllowed(true) // optimizes out redundant replace operations - replace(R.id.fragment_container_activity_chat, messageInputFragment) + if (chatViewModel.getVoiceRecordingLocked.value != true) { + supportFragmentManager.commit { + setReorderingAllowed(true) // optimizes out redundant replace operations + messageInputViewModel.messageInputFragment?.let { + replace(R.id.fragment_container_activity_chat, it) + } + } } joinRoomWithPassword() @@ -967,7 +959,9 @@ class ChatActivity : } else { supportFragmentManager.commit { setReorderingAllowed(true) - replace(R.id.fragment_container_activity_chat, getMessageInputFragment()) + messageInputViewModel.messageInputFragment?.let { + replace(R.id.fragment_container_activity_chat, it) + } } } } 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 12ced9f46c6..c6e3cf41866 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 @@ -8,6 +8,7 @@ package com.nextcloud.talk.chat.viewmodels import android.content.Context +import android.os.Bundle import android.util.Log import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner @@ -15,6 +16,8 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.nextcloud.talk.chat.ChatActivity.Companion.CONVERSATION_INTERNAL_ID +import com.nextcloud.talk.chat.MessageInputFragment import com.nextcloud.talk.chat.data.ChatMessageRepository import com.nextcloud.talk.chat.data.io.AudioFocusRequestManager import com.nextcloud.talk.chat.data.io.AudioRecorderManager @@ -45,9 +48,17 @@ class MessageInputViewModel @Inject constructor( lateinit var chatRepository: ChatMessageRepository lateinit var currentLifeCycleFlag: LifeCycleFlag val disposableSet = mutableSetOf() + var messageInputFragment: MessageInputFragment? = null - fun setData(chatMessageRepository: ChatMessageRepository) { + fun setData(chatMessageRepository: ChatMessageRepository, internalId: String) { chatRepository = chatMessageRepository + if (messageInputFragment == null) { + messageInputFragment = MessageInputFragment().apply { + arguments = Bundle().apply { + putString(CONVERSATION_INTERNAL_ID, internalId) + } + } + } } override fun onResume(owner: LifecycleOwner) {