From 7ccd42580d89b56a60252bb808a8445587d1467f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 13 Feb 2025 10:47:03 +0100 Subject: [PATCH] Handle remote provisioning failure from QR Code assistant --- .../assistant/fragment/QrCodeScannerFragment.kt | 14 ++++++++------ .../ui/assistant/viewmodel/QrCodeViewModel.kt | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/QrCodeScannerFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/QrCodeScannerFragment.kt index e11e3201c..3bca100db 100644 --- a/app/src/main/java/org/linphone/ui/assistant/fragment/QrCodeScannerFragment.kt +++ b/app/src/main/java/org/linphone/ui/assistant/fragment/QrCodeScannerFragment.kt @@ -85,17 +85,19 @@ class QrCodeScannerFragment : GenericFragment() { viewModel.qrCodeFoundEvent.observe(viewLifecycleOwner) { it.consume { isValid -> - if (!isValid) { - (requireActivity() as GenericActivity).showRedToast( - getString(R.string.assistant_qr_code_invalid_toast), - R.drawable.warning_circle - ) - } else { + if (isValid) { requireActivity().finish() } } } + viewModel.onErrorEvent.observe(viewLifecycleOwner) { + it.consume { + // Core has restarted but something went wrong, restart video capture + enableQrCodeVideoScanner() + } + } + if (!isCameraPermissionGranted()) { if (ActivityCompat.shouldShowRequestPermissionRationale(requireActivity(), Manifest.permission.CAMERA)) { Log.w("$TAG CAMERA permission wasn't granted yet, asking for it now") diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/QrCodeViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/QrCodeViewModel.kt index 69146fabd..f5a0da65d 100644 --- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/QrCodeViewModel.kt +++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/QrCodeViewModel.kt @@ -30,6 +30,7 @@ import org.linphone.core.CoreListenerStub import org.linphone.core.tools.Log import org.linphone.ui.GenericViewModel import org.linphone.utils.Event +import org.linphone.R class QrCodeViewModel @UiThread @@ -40,12 +41,18 @@ class QrCodeViewModel val qrCodeFoundEvent = MutableLiveData>() + val onErrorEvent = MutableLiveData>() + private val coreListener = object : CoreListenerStub() { @WorkerThread override fun onConfiguringStatus(core: Core, status: ConfiguringState, message: String?) { Log.i("$TAG Configuring state is [$status]") if (status == ConfiguringState.Successful) { qrCodeFoundEvent.postValue(Event(true)) + } else if (status == ConfiguringState.Failed) { + Log.e("$TAG Failure applying remote provisioning: $message") + showRedToast(R.string.remote_provisioning_config_failed_toast, R.drawable.warning_circle) + onErrorEvent.postValue(Event(true)) } } @@ -53,16 +60,20 @@ class QrCodeViewModel override fun onQrcodeFound(core: Core, result: String?) { Log.i("$TAG QR Code found: [$result]") if (result == null) { - qrCodeFoundEvent.postValue(Event(false)) + showRedToast(R.string.assistant_qr_code_invalid_toast, R.drawable.warning_circle) } else { val isValidUrl = Patterns.WEB_URL.matcher(result).matches() if (!isValidUrl) { Log.e("$TAG The content of the QR Code doesn't seem to be a valid web URL") - qrCodeFoundEvent.postValue(Event(false)) + showRedToast(R.string.assistant_qr_code_invalid_toast, R.drawable.warning_circle) } else { Log.i( "$TAG QR code URL set, restarting the Core to apply configuration changes" ) + core.nativePreviewWindowId = null + core.isVideoPreviewEnabled = false + core.isQrcodeVideoPreviewEnabled = false + core.provisioningUri = result coreContext.core.stop() Log.i("$TAG Core has been stopped, restarting it")