fix no sound after mic permission granted

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2025-03-14 14:45:08 +01:00
parent 7e609d80c0
commit fbad489ecb
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
2 changed files with 42 additions and 35 deletions

View File

@ -317,9 +317,7 @@ class CallActivity : CallBaseActivity() {
val audioPermission = permissionMap[Manifest.permission.RECORD_AUDIO] val audioPermission = permissionMap[Manifest.permission.RECORD_AUDIO]
if (audioPermission != null) { if (audioPermission != null) {
if (java.lang.Boolean.TRUE == audioPermission) { if (java.lang.Boolean.TRUE == audioPermission) {
if (!microphoneOn) { Log.d(TAG, "Microphone permission was granted")
onMicrophoneClick()
}
} else { } else {
rationaleList.add(resources.getString(R.string.nc_microphone_permission_hint)) rationaleList.add(resources.getString(R.string.nc_microphone_permission_hint))
} }
@ -327,15 +325,7 @@ class CallActivity : CallBaseActivity() {
val cameraPermission = permissionMap[Manifest.permission.CAMERA] val cameraPermission = permissionMap[Manifest.permission.CAMERA]
if (cameraPermission != null) { if (cameraPermission != null) {
if (java.lang.Boolean.TRUE == cameraPermission) { if (java.lang.Boolean.TRUE == cameraPermission) {
if (!videoOn) { Log.d(TAG, "Camera permission was granted")
onCameraClick()
}
if (cameraEnumerator!!.deviceNames.isEmpty()) {
binding!!.cameraButton.visibility = View.GONE
}
if (cameraEnumerator!!.deviceNames.size > 1) {
binding!!.switchSelfVideoButton.visibility = View.VISIBLE
}
} else { } else {
rationaleList.add(resources.getString(R.string.nc_camera_permission_hint)) rationaleList.add(resources.getString(R.string.nc_camera_permission_hint))
} }
@ -357,6 +347,10 @@ class CallActivity : CallBaseActivity() {
if (rationaleList.isNotEmpty()) { if (rationaleList.isNotEmpty()) {
showRationaleDialogForSettings(rationaleList) showRationaleDialogForSettings(rationaleList)
} }
if (!isConnectionEstablished) {
prepareCall()
}
} }
private var canPublishAudioStream = false private var canPublishAudioStream = false
private var canPublishVideoStream = false private var canPublishVideoStream = false
@ -404,14 +398,11 @@ class CallActivity : CallBaseActivity() {
.setDuration(PULSE_ANIMATION_DURATION) .setDuration(PULSE_ANIMATION_DURATION)
.setRepeatCount(PulseAnimation.INFINITE) .setRepeatCount(PulseAnimation.INFINITE)
.setRepeatMode(PulseAnimation.REVERSE) .setRepeatMode(PulseAnimation.REVERSE)
basicInitialization()
callParticipants = HashMap() callParticipants = HashMap()
participantDisplayItems = HashMap() participantDisplayItems = HashMap()
initViews()
updateSelfVideoViewPosition()
reactionAnimator = ReactionAnimator(context, binding!!.reactionAnimationWrapper, viewThemeUtils) reactionAnimator = ReactionAnimator(context, binding!!.reactionAnimationWrapper, viewThemeUtils)
checkRecordingConsentAndInitiateCall() checkInitialDevicePermissions()
} }
private fun initCallRecordingViewModel(recordingState: Int) { private fun initCallRecordingViewModel(recordingState: Int) {
@ -877,7 +868,6 @@ class CallActivity : CallBaseActivity() {
private fun initViews() { private fun initViews() {
Log.d(TAG, "initViews") Log.d(TAG, "initViews")
binding!!.callInfosLinearLayout.visibility = View.VISIBLE binding!!.callInfosLinearLayout.visibility = View.VISIBLE
binding!!.selfVideoViewWrapper.visibility = View.VISIBLE
if (!isPipModePossible) { if (!isPipModePossible) {
binding!!.pictureInPictureButton.visibility = View.GONE binding!!.pictureInPictureButton.visibility = View.GONE
} }
@ -995,13 +985,11 @@ class CallActivity : CallBaseActivity() {
} }
} }
private fun checkDevicePermissions() { private fun checkInitialDevicePermissions() {
val permissionsToRequest: MutableList<String> = ArrayList() val permissionsToRequest: MutableList<String> = ArrayList()
val rationaleList: MutableList<String> = ArrayList() val rationaleList: MutableList<String> = ArrayList()
if (permissionUtil!!.isMicrophonePermissionGranted()) { if (permissionUtil!!.isMicrophonePermissionGranted()) {
if (!microphoneOn) { Log.d(TAG, "Microphone permission already granted")
onMicrophoneClick()
}
} else if (shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) { } else if (shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) {
permissionsToRequest.add(Manifest.permission.RECORD_AUDIO) permissionsToRequest.add(Manifest.permission.RECORD_AUDIO)
rationaleList.add(resources.getString(R.string.nc_microphone_permission_hint)) rationaleList.add(resources.getString(R.string.nc_microphone_permission_hint))
@ -1011,15 +999,7 @@ class CallActivity : CallBaseActivity() {
if (!isVoiceOnlyCall) { if (!isVoiceOnlyCall) {
if (permissionUtil!!.isCameraPermissionGranted()) { if (permissionUtil!!.isCameraPermissionGranted()) {
if (!videoOn) { Log.d(TAG, "Camera permission already granted")
onCameraClick()
}
if (cameraEnumerator!!.deviceNames.isEmpty()) {
binding!!.cameraButton.visibility = View.GONE
}
if (cameraEnumerator!!.deviceNames.size > 1) {
binding!!.switchSelfVideoButton.visibility = View.VISIBLE
}
} else if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) { } else if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
permissionsToRequest.add(Manifest.permission.CAMERA) permissionsToRequest.add(Manifest.permission.CAMERA)
rationaleList.add(resources.getString(R.string.nc_camera_permission_hint)) rationaleList.add(resources.getString(R.string.nc_camera_permission_hint))
@ -1037,16 +1017,41 @@ class CallActivity : CallBaseActivity() {
permissionsToRequest.add(Manifest.permission.BLUETOOTH_CONNECT) permissionsToRequest.add(Manifest.permission.BLUETOOTH_CONNECT)
} }
} }
if (permissionsToRequest.isNotEmpty()) { if (permissionsToRequest.isNotEmpty()) {
if (rationaleList.isNotEmpty()) { if (rationaleList.isNotEmpty()) {
showRationaleDialog(permissionsToRequest, rationaleList) showRationaleDialog(permissionsToRequest, rationaleList)
} else { } else {
requestPermissionLauncher.launch(permissionsToRequest.toTypedArray()) requestPermissionLauncher.launch(permissionsToRequest.toTypedArray())
} }
} else if (!isConnectionEstablished) {
prepareCall()
}
}
private fun prepareCall() {
basicInitialization()
initViews()
updateSelfVideoViewPosition()
checkRecordingConsentAndInitiateCall()
if (permissionUtil!!.isMicrophonePermissionGranted()) {
if (!microphoneOn) {
onMicrophoneClick()
}
} }
if (!isConnectionEstablished) { if (isVoiceOnlyCall) {
fetchSignalingSettings() binding!!.selfVideoViewWrapper.visibility = View.GONE
} else if (permissionUtil!!.isCameraPermissionGranted()) {
binding!!.selfVideoViewWrapper.visibility = View.VISIBLE
onCameraClick()
if (cameraEnumerator!!.deviceNames.isEmpty()) {
binding!!.cameraButton.visibility = View.GONE
}
if (cameraEnumerator!!.deviceNames.size > 1) {
binding!!.switchSelfVideoButton.visibility = View.VISIBLE
}
} }
} }
@ -1603,8 +1608,8 @@ class CallActivity : CallBaseActivity() {
} }
override fun onError(e: Throwable) { override fun onError(e: Throwable) {
Snackbar.make(binding!!.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
Log.e(TAG, "Failed to fetch capabilities", e) Log.e(TAG, "Failed to fetch capabilities", e)
Snackbar.make(binding!!.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
// unused atm // unused atm
} }
@ -1925,7 +1930,7 @@ class CallActivity : CallBaseActivity() {
Log.d(TAG, "connection already established") Log.d(TAG, "connection already established")
return return
} }
checkDevicePermissions() fetchSignalingSettings()
} }
@Subscribe(threadMode = ThreadMode.BACKGROUND) @Subscribe(threadMode = ThreadMode.BACKGROUND)

View File

@ -46,7 +46,9 @@
<FrameLayout <FrameLayout
android:id="@+id/selfVideoViewWrapper" android:id="@+id/selfVideoViewWrapper"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible">
<org.webrtc.SurfaceViewRenderer <org.webrtc.SurfaceViewRenderer
android:id="@+id/selfVideoRenderer" android:id="@+id/selfVideoRenderer"