diff --git a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt index 41a8b85226..1c66e62a33 100644 --- a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt +++ b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/QrScanningFragment.kt @@ -20,10 +20,10 @@ import com.google.mlkit.vision.common.InputImage import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.screen.ComposeFragment import com.tangem.core.ui.theme.AppThemeModeHolder -import com.tangem.feature.qrscanning.presentation.QrScanningContent -import com.tangem.feature.qrscanning.viewmodel.QrScanningViewModel import com.tangem.feature.qrscanning.inner.MLKitBarcodeAnalyzer import com.tangem.feature.qrscanning.navigation.QrScanningInnerRouter +import com.tangem.feature.qrscanning.presentation.QrScanningContent +import com.tangem.feature.qrscanning.viewmodel.QrScanningViewModel import dagger.hilt.android.AndroidEntryPoint import java.util.concurrent.ExecutorService import java.util.concurrent.Executors @@ -69,6 +69,11 @@ internal class QrScanningFragment : ComposeFragment() { requestCameraPermission() } + override fun onResume() { + super.onResume() + checkPermissionGranted() + } + override fun onDestroy() { super.onDestroy() cameraPermissionLauncher.unregister() @@ -80,11 +85,14 @@ internal class QrScanningFragment : ComposeFragment() { StatusBarTransparencyDisposable() QrScanningContent( executor = { cameraExecutor }, - analyzer = { analyzer }, + analyzer = { cameraAnalyzer }, uiState = viewModel.uiState.collectAsStateWithLifecycle().value, ) } + /** + * Method for requesting permission if there isn't one. + */ private fun requestCameraPermission() { if ( ContextCompat.checkSelfPermission( @@ -96,6 +104,20 @@ internal class QrScanningFragment : ComposeFragment() { } } + /** + * Method for checking if permission was granted after user opened Settings screen. + * If permission was granted dismiss bottom sheet. + */ + private fun checkPermissionGranted() { + if (ContextCompat.checkSelfPermission( + requireContext(), + Manifest.permission.CAMERA, + ) == PackageManager.PERMISSION_GRANTED + ) { + viewModel.onDismissBottomSheetState() + } + } + companion object { fun create() = QrScanningFragment() diff --git a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/presentation/QrScanningCameraDeniedBottomSheet.kt b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/presentation/QrScanningCameraDeniedBottomSheet.kt index a4ca7198dc..6edcbe2ea2 100644 --- a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/presentation/QrScanningCameraDeniedBottomSheet.kt +++ b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/presentation/QrScanningCameraDeniedBottomSheet.kt @@ -36,7 +36,7 @@ private fun CameraDeniedBottomSheet(content: CameraDeniedBottomSheetConfig) { val intent: Intent = Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", context.packageName, null), - ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + ) ContextCompat.startActivity(context, intent, null) }, ) diff --git a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt index 5402f469b0..9e17c2f6a7 100644 --- a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt +++ b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt @@ -10,8 +10,9 @@ import com.tangem.feature.qrscanning.SourceType import com.tangem.feature.qrscanning.navigation.QrScanningInnerRouter import com.tangem.feature.qrscanning.presentation.QrScanningState import com.tangem.feature.qrscanning.presentation.QrScanningStateController -import com.tangem.feature.qrscanning.presentation.transformers.ShowCameraDeniedBottomSheetTransformer +import com.tangem.feature.qrscanning.presentation.transformers.DismissBottomSheetTransformer import com.tangem.feature.qrscanning.presentation.transformers.InitializeQrScanningStateTransformer +import com.tangem.feature.qrscanning.presentation.transformers.ShowCameraDeniedBottomSheetTransformer import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.StateFlow import javax.inject.Inject @@ -43,4 +44,8 @@ internal class QrScanningViewModel @Inject constructor( fun onCameraDeniedState() { stateHolder.update(ShowCameraDeniedBottomSheetTransformer(clickIntents)) } + + fun onDismissBottomSheetState() { + stateHolder.update(DismissBottomSheetTransformer()) + } } \ No newline at end of file