From 4094a426767f84610bbda742b03dac78e261f52b Mon Sep 17 00:00:00 2001 From: TrueWatcher Date: Sat, 29 Nov 2025 17:22:25 +0300 Subject: [PATCH 1/3] 5.1.0 workable --- atox/src/main/kotlin/ui/call/CallFragment.kt | 22 +++++++++++++++---- domain/src/main/kotlin/feature/CallManager.kt | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/atox/src/main/kotlin/ui/call/CallFragment.kt b/atox/src/main/kotlin/ui/call/CallFragment.kt index 1b2fa540e..0618b8d3a 100644 --- a/atox/src/main/kotlin/ui/call/CallFragment.kt +++ b/atox/src/main/kotlin/ui/call/CallFragment.kt @@ -7,6 +7,7 @@ package ltd.evilcorp.atox.ui.call import android.Manifest import android.os.Bundle +import android.util.Log import android.view.View import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts @@ -26,6 +27,7 @@ import ltd.evilcorp.atox.vmFactory import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.feature.CallState +private const val TAG = "CallFragment" private const val PERMISSION = Manifest.permission.RECORD_AUDIO class CallFragment : BaseFragment(FragmentCallBinding::inflate) { @@ -37,17 +39,24 @@ class CallFragment : BaseFragment(FragmentCallBinding::infl if (granted) { vm.startSendingAudio() } else { - Toast.makeText(requireContext(), getString(R.string.call_mic_permission_needed), Toast.LENGTH_LONG).show() + Log.d(TAG, "Got no permission") + //Toast.makeText(requireContext(), getString(R.string.call_mic_permission_needed), Toast.LENGTH_LONG).show() } } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) = binding.run { + override fun onViewCreated(view: View, savedInstanceState: Bundle?): Unit = binding.run { ViewCompat.setOnApplyWindowInsetsListener(view) { _, compat -> val insets = compat.getInsets(WindowInsetsCompat.Type.systemBars()) controlContainer.updatePadding(bottom = insets.bottom + controlContainer.paddingTop) compat } + if (! requireContext().hasPermission(PERMISSION)) { + + } + // proceed with existing permission (granted or repeatedly denied) + // if user changes it, the call will be aborted + vm.setActiveContact(PublicKey(requireStringArg(CONTACT_PUBLIC_KEY))) vm.contact.observe(viewLifecycleOwner) { avatarImageView.setFrom(it) @@ -73,7 +82,10 @@ class CallFragment : BaseFragment(FragmentCallBinding::infl if (requireContext().hasPermission(PERMISSION)) { vm.startSendingAudio() } else { - requestPermissionLauncher.launch(PERMISSION) + Toast.makeText(context, + R.string.call_mic_permission_needed, + Toast.LENGTH_LONG + ).show() } } } @@ -99,7 +111,9 @@ class CallFragment : BaseFragment(FragmentCallBinding::infl startCall() - if (requireContext().hasPermission(PERMISSION)) { + if (! requireContext().hasPermission(PERMISSION)) { + requestPermissionLauncher.launch(PERMISSION) + } else { vm.startSendingAudio() } } diff --git a/domain/src/main/kotlin/feature/CallManager.kt b/domain/src/main/kotlin/feature/CallManager.kt index 7a8240991..9301fb0cb 100644 --- a/domain/src/main/kotlin/feature/CallManager.kt +++ b/domain/src/main/kotlin/feature/CallManager.kt @@ -96,6 +96,7 @@ class CallManager @Inject constructor(private val tox: Tox, private val scope: C fun startSendingAudio(): Boolean { val to = (inCall.value as CallState.InCall?)?.publicKey ?: return false + if (_sendingAudio.value) { return true } val recorder = AudioCapture.create(AUDIO_SAMPLING_RATE_HZ, AUDIO_CHANNELS, AUDIO_SEND_INTERVAL_MS) ?: return false startAudioSender(recorder, to) From 93255926257c2739d7f7a8b0de8d572a47fca745 Mon Sep 17 00:00:00 2001 From: TrueWatcher Date: Sat, 29 Nov 2025 18:58:37 +0300 Subject: [PATCH 2/3] 5.0.1 edit --- atox/src/main/kotlin/ui/call/CallFragment.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/atox/src/main/kotlin/ui/call/CallFragment.kt b/atox/src/main/kotlin/ui/call/CallFragment.kt index 0618b8d3a..b1aec1059 100644 --- a/atox/src/main/kotlin/ui/call/CallFragment.kt +++ b/atox/src/main/kotlin/ui/call/CallFragment.kt @@ -51,12 +51,6 @@ class CallFragment : BaseFragment(FragmentCallBinding::infl compat } - if (! requireContext().hasPermission(PERMISSION)) { - - } - // proceed with existing permission (granted or repeatedly denied) - // if user changes it, the call will be aborted - vm.setActiveContact(PublicKey(requireStringArg(CONTACT_PUBLIC_KEY))) vm.contact.observe(viewLifecycleOwner) { avatarImageView.setFrom(it) From cdea8950cbe65ffb0d2132c0038d81f792d271dd Mon Sep 17 00:00:00 2001 From: TrueWatcher Date: Sat, 29 Nov 2025 20:10:21 +0300 Subject: [PATCH 3/3] ktlint --- atox/src/main/kotlin/ui/call/CallFragment.kt | 9 +++++---- domain/src/main/kotlin/feature/CallManager.kt | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/atox/src/main/kotlin/ui/call/CallFragment.kt b/atox/src/main/kotlin/ui/call/CallFragment.kt index b1aec1059..c44832a06 100644 --- a/atox/src/main/kotlin/ui/call/CallFragment.kt +++ b/atox/src/main/kotlin/ui/call/CallFragment.kt @@ -40,7 +40,7 @@ class CallFragment : BaseFragment(FragmentCallBinding::infl vm.startSendingAudio() } else { Log.d(TAG, "Got no permission") - //Toast.makeText(requireContext(), getString(R.string.call_mic_permission_needed), Toast.LENGTH_LONG).show() + // Toast.makeText(requireContext(), getString(R.string.call_mic_permission_needed), Toast.LENGTH_LONG).show() } } @@ -76,9 +76,10 @@ class CallFragment : BaseFragment(FragmentCallBinding::infl if (requireContext().hasPermission(PERMISSION)) { vm.startSendingAudio() } else { - Toast.makeText(context, + Toast.makeText( + context, R.string.call_mic_permission_needed, - Toast.LENGTH_LONG + Toast.LENGTH_LONG, ).show() } } @@ -105,7 +106,7 @@ class CallFragment : BaseFragment(FragmentCallBinding::infl startCall() - if (! requireContext().hasPermission(PERMISSION)) { + if (!requireContext().hasPermission(PERMISSION)) { requestPermissionLauncher.launch(PERMISSION) } else { vm.startSendingAudio() diff --git a/domain/src/main/kotlin/feature/CallManager.kt b/domain/src/main/kotlin/feature/CallManager.kt index 9301fb0cb..21ac7a6e1 100644 --- a/domain/src/main/kotlin/feature/CallManager.kt +++ b/domain/src/main/kotlin/feature/CallManager.kt @@ -96,7 +96,9 @@ class CallManager @Inject constructor(private val tox: Tox, private val scope: C fun startSendingAudio(): Boolean { val to = (inCall.value as CallState.InCall?)?.publicKey ?: return false - if (_sendingAudio.value) { return true } + if (_sendingAudio.value) { + return true + } val recorder = AudioCapture.create(AUDIO_SAMPLING_RATE_HZ, AUDIO_CHANNELS, AUDIO_SEND_INTERVAL_MS) ?: return false startAudioSender(recorder, to)