Remove ability to scan qr code from gallery.

This commit is contained in:
Michelle Tang 2024-06-14 12:28:47 -07:00 committed by Greyson Parrelli
parent 6b50be78c0
commit 958e815933
5 changed files with 23 additions and 62 deletions

View file

@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.components.settings.app.usernamelinks.main
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@ -7,17 +8,22 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.LifecycleOwner
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import org.signal.core.ui.Dialogs
import org.signal.core.ui.theme.SignalTheme
import org.signal.qr.QrScannerView
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.mediasend.camerax.CameraXModelBlocklist
@ -96,9 +102,20 @@ fun UsernameQrScanScreen(
},
hasPermission = hasCameraPermission,
onRequestPermissions = onOpenCameraClicked,
qrHeaderLabelString = "",
onGalleryOpened = onOpenGalleryClicked
qrHeaderLabelString = ""
)
FloatingActionButton(
shape = CircleShape,
containerColor = SignalTheme.colors.colorSurface1,
modifier = Modifier.align(Alignment.BottomCenter).padding(bottom = 24.dp),
onClick = onOpenGalleryClicked
) {
Image(
painter = painterResource(id = R.drawable.symbol_album_24),
contentDescription = null,
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurface)
)
}
}
Row(

View file

@ -34,7 +34,6 @@ import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.BiometricDeviceAuthentication
import org.thoughtcrime.securesms.BiometricDeviceLockContract
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.main.QrImageSelectionActivity
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.util.navigation.safeNavigate
@ -51,7 +50,6 @@ class AddLinkDeviceFragment : ComposeFragment() {
private val viewModel: LinkDeviceViewModel by activityViewModels()
private lateinit var biometricAuth: BiometricDeviceAuthentication
private lateinit var biometricDeviceLockLauncher: ActivityResultLauncher<String>
private lateinit var galleryLauncher: ActivityResultLauncher<Unit>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -74,12 +72,6 @@ class AddLinkDeviceFragment : ComposeFragment() {
BiometricPrompt(requireActivity(), BiometricAuthenticationListener()),
promptInfo
)
galleryLauncher = registerForActivityResult(QrImageSelectionActivity.Contract()) { uri ->
if (uri != null) {
viewModel.scanImage(requireContext(), uri)
}
}
}
override fun onPause() {
@ -125,8 +117,7 @@ class AddLinkDeviceFragment : ComposeFragment() {
viewModel.onLinkDeviceResult(true)
navController.popBackStack()
},
onLinkDeviceFailure = { viewModel.onLinkDeviceResult(false) },
onGalleryOpened = { galleryLauncher.launch(Unit) }
onLinkDeviceFailure = { viewModel.onLinkDeviceResult(false) }
)
}
@ -174,8 +165,7 @@ private fun MainScreen(
onQrCodeDismissed: () -> Unit = {},
onQrCodeRetry: () -> Unit = {},
onLinkDeviceSuccess: () -> Unit = {},
onLinkDeviceFailure: () -> Unit = {},
onGalleryOpened: () -> Unit = {}
onLinkDeviceFailure: () -> Unit = {}
) {
Scaffolds.Settings(
title = "",
@ -202,7 +192,6 @@ private fun MainScreen(
linkDeviceResult = state.linkDeviceResult,
onLinkDeviceSuccess = onLinkDeviceSuccess,
onLinkDeviceFailure = onLinkDeviceFailure,
onGalleryOpened = onGalleryOpened,
modifier = Modifier.padding(contentPadding)
)
}

View file

@ -37,7 +37,6 @@ fun LinkDeviceQrScanScreen(
linkDeviceResult: LinkDeviceRepository.LinkDeviceResult,
onLinkDeviceSuccess: () -> Unit,
onLinkDeviceFailure: () -> Unit,
onGalleryOpened: () -> Unit,
modifier: Modifier = Modifier
) {
val lifecycleOwner = LocalLifecycleOwner.current
@ -107,8 +106,7 @@ fun LinkDeviceQrScanScreen(
},
hasPermission = hasPermission,
onRequestPermissions = onRequestPermissions,
qrHeaderLabelString = stringResource(R.string.AddLinkDeviceFragment__scan_the_qr_code),
onGalleryOpened = onGalleryOpened
qrHeaderLabelString = stringResource(R.string.AddLinkDeviceFragment__scan_the_qr_code)
)
}
}

View file

@ -4,15 +4,11 @@ import android.content.Context
import android.net.Uri
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DecodeFormat
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.signal.core.util.toOptional
import org.signal.qr.QrProcessor
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobmanager.Job
@ -205,26 +201,6 @@ class LinkDeviceViewModel : ViewModel() {
}
}
fun scanImage(context: Context, uri: Uri) {
viewModelScope.launch(Dispatchers.IO) {
val loadBitmap = Glide.with(context)
.asBitmap()
.format(DecodeFormat.PREFER_ARGB_8888)
.load(uri)
.submit()
val result = QrProcessor().getScannedData(loadBitmap.get()).toOptional()
if (result.isPresent) {
onQrCodeScanned(result.get())
} else {
_state.value = _state.value.copy(
qrCodeInvalid = true,
showFrontCamera = null
)
}
}
}
fun clearToast() {
_state.update {
it.copy(

View file

@ -1,16 +1,13 @@
package org.thoughtcrime.securesms.qr
import android.content.Context
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -20,19 +17,16 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.PathEffect
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.compose.ui.viewinterop.NoOpUpdate
import org.signal.core.ui.Buttons
import org.signal.core.ui.theme.SignalTheme
import org.signal.qr.QrScannerView
import org.thoughtcrime.securesms.R
@ -46,8 +40,7 @@ object QrScanScreens {
update: (QrScannerView) -> Unit = NoOpUpdate,
hasPermission: Boolean,
onRequestPermissions: () -> Unit = {},
qrHeaderLabelString: String,
onGalleryOpened: () -> Unit = {}
qrHeaderLabelString: String
) {
val path = remember { Path() }
@ -104,18 +97,6 @@ object QrScanScreens {
modifier = Modifier.padding(top = 24.dp).fillMaxWidth()
)
}
FloatingActionButton(
shape = CircleShape,
containerColor = SignalTheme.colors.colorSurface1,
modifier = Modifier.align(Alignment.BottomCenter).padding(bottom = 24.dp),
onClick = onGalleryOpened
) {
Image(
painter = painterResource(id = R.drawable.symbol_album_24),
contentDescription = null,
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurface)
)
}
}
}
}