diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index a6698929d..6a6fea076 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -19,6 +19,7 @@ */ package org.linphone.ui.main.chat.fragment +import android.Manifest import android.app.Dialog import android.content.ClipData import android.content.ClipboardManager @@ -153,6 +154,17 @@ class ConversationFragment : GenericFragment() { } } + private val requestPermissionLauncher = registerForActivityResult( + ActivityResultContracts.RequestPermission() + ) { isGranted -> + if (isGranted) { + Log.i("$TAG RECORD_AUDIO permission has been granted, starting voice message recording") + sendMessageViewModel.startVoiceMessageRecording() + } else { + Log.e("$TAG RECORD_AUDIO permission has been denied") + } + } + private var bottomSheetDeliveryModel: ChatMessageDeliveryModel? = null private var bottomSheetReactionsModel: ChatMessageReactionsModel? = null @@ -325,6 +337,13 @@ class ConversationFragment : GenericFragment() { } } + sendMessageViewModel.askRecordAudioPermissionEvent.observe(viewLifecycleOwner) { + it.consume { + Log.w("$TAG Asking for RECORD_AUDIO permission") + requestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO) + } + } + viewModel.searchFilter.observe(viewLifecycleOwner) { filter -> viewModel.applyFilter(filter.trim()) } diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt index 6b20bdc90..ae058bab2 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt @@ -108,6 +108,10 @@ class SendMessageInConversationViewModel @UiThread constructor() : ViewModel() { MutableLiveData>() } + val askRecordAudioPermissionEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + lateinit var chatRoom: ChatRoom private var chatMessageToReplyTo: ChatMessage? = null @@ -343,9 +347,9 @@ class SendMessageInConversationViewModel @UiThread constructor() : ViewModel() { ) != PackageManager.PERMISSION_GRANTED ) { Log.w( - "$TAG Can't start voice message recording, AUDIO_RECORD permission wasn't granted yet" + "$TAG Can't start voice message recording, RECORD_AUDIO permission wasn't granted yet" ) - // TODO: request record audio permission + askRecordAudioPermissionEvent.postValue(Event(true)) return }