Skip to content

Commit fdff73e

Browse files
committed
feat: permission denied view
1 parent 5ee42a0 commit fdff73e

File tree

2 files changed

+69
-24
lines changed

2 files changed

+69
-24
lines changed

app/src/main/java/to/bitkit/ui/screens/wallets/send/SendRecipientScreen.kt

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import androidx.compose.foundation.background
1717
import androidx.compose.foundation.layout.Arrangement
1818
import androidx.compose.foundation.layout.Box
1919
import androidx.compose.foundation.layout.Column
20+
import androidx.compose.foundation.layout.fillMaxHeight
2021
import androidx.compose.foundation.layout.fillMaxSize
2122
import androidx.compose.foundation.layout.fillMaxWidth
2223
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -49,7 +50,6 @@ import androidx.lifecycle.LifecycleEventObserver
4950
import androidx.lifecycle.compose.LocalLifecycleOwner
5051
import com.google.accompanist.permissions.ExperimentalPermissionsApi
5152
import com.google.accompanist.permissions.rememberPermissionState
52-
import com.google.accompanist.permissions.shouldShowRationale
5353
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
5454
import com.google.mlkit.vision.barcode.BarcodeScanning
5555
import com.google.mlkit.vision.barcode.common.Barcode
@@ -58,21 +58,24 @@ import kotlinx.coroutines.Dispatchers
5858
import kotlinx.coroutines.launch
5959
import kotlinx.coroutines.withContext
6060
import to.bitkit.R
61-
import to.bitkit.ext.getClipboardText
6261
import to.bitkit.ext.startActivityAppSettings
6362
import to.bitkit.models.Toast
6463
import to.bitkit.ui.appViewModel
64+
import to.bitkit.ui.components.BodyM
6565
import to.bitkit.ui.components.BottomSheetPreview
66+
import to.bitkit.ui.components.Display
67+
import to.bitkit.ui.components.PrimaryButton
6668
import to.bitkit.ui.components.RectangleButton
69+
import to.bitkit.ui.components.VerticalSpacer
6770
import to.bitkit.ui.scaffold.SheetTopBar
6871
import to.bitkit.ui.screens.scanner.CameraPermissionView
69-
import to.bitkit.ui.screens.scanner.DeniedContent
7072
import to.bitkit.ui.screens.scanner.QrCodeAnalyzer
7173
import to.bitkit.ui.shared.modifiers.sheetHeight
7274
import to.bitkit.ui.shared.util.gradientBackground
7375
import to.bitkit.ui.theme.AppThemeSurface
7476
import to.bitkit.ui.theme.Colors
7577
import to.bitkit.ui.theme.Shapes
78+
import to.bitkit.ui.utils.withAccent
7679
import to.bitkit.utils.Logger
7780
import to.bitkit.viewmodels.SendEvent
7881
import java.util.concurrent.Executors
@@ -219,33 +222,21 @@ fun SendRecipientScreen(
219222
.fillMaxSize()
220223
.padding(horizontal = 16.dp)
221224
) {
222-
Box(modifier = Modifier
223-
.fillMaxWidth()
224-
.weight(1f)
225+
Box(
226+
modifier = Modifier
227+
.fillMaxWidth()
228+
.weight(1f)
225229
) {
226230
CameraPermissionView(
227231
permissionState = cameraPermissionState,
228232
deniedContent = {
229-
DeniedContent(
230-
shouldShowRationale = cameraPermissionState.status.shouldShowRationale,
231-
inSheet = true,
232-
onClickOpenSettings = {
233+
PermissionDenied(
234+
onClickRetry = {
233235
context.startActivityAppSettings()
234236
},
235-
onClickRetry = cameraPermissionState::launchPermissionRequest,
236-
onClickPaste = {
237-
val clipboard = context.getClipboardText()?.trim()
238-
if (clipboard.isNullOrBlank()) {
239-
app?.toast(
240-
type = Toast.ToastType.WARNING,
241-
title = context.getString(R.string.wallet__send_clipboard_empty_title),
242-
description = context.getString(R.string.wallet__send_clipboard_empty_text),
243-
)
244-
} else {
245-
onEvent(SendEvent.AddressContinue(clipboard))
246-
}
247-
},
248-
onBack = { /* No back needed in sheet */ },
237+
modifier = Modifier
238+
.fillMaxWidth()
239+
.fillMaxHeight()
249240
)
250241
},
251242
grantedContent = {
@@ -403,6 +394,41 @@ private fun CameraPreviewWithControls(
403394
}
404395
}
405396

397+
398+
@Composable
399+
private fun PermissionDenied(
400+
onClickRetry: () -> Unit,
401+
modifier: Modifier = Modifier,
402+
) {
403+
Column(
404+
modifier = modifier
405+
.clip(Shapes.medium)
406+
.background(Colors.Black)
407+
.padding(32.dp)
408+
) {
409+
Display("SCAN\n<accent>QR CODE</accent>".withAccent(accentColor = Colors.Brand), color = Colors.White)
410+
411+
VerticalSpacer(8.dp)
412+
413+
BodyM(
414+
"Allow camera access to scan bitcoin invoices and pay more quickly.",
415+
color = Colors.White64,
416+
modifier = Modifier.fillMaxWidth()
417+
)
418+
419+
VerticalSpacer(32.dp)
420+
421+
PrimaryButton(
422+
text = "Enable camera",
423+
icon = {
424+
Icon(painter = painterResource(R.drawable.ic_camera), contentDescription = null)
425+
},
426+
onClick = onClickRetry,
427+
)
428+
}
429+
}
430+
431+
406432
private fun processImageFromGallery(
407433
context: Context,
408434
uri: Uri,
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="16dp"
3+
android:height="16dp"
4+
android:viewportWidth="16"
5+
android:viewportHeight="16">
6+
<path
7+
android:pathData="M13,4H11L10,2.5H6L5,4H3C2.735,4 2.48,4.105 2.293,4.293C2.105,4.48 2,4.735 2,5V12C2,12.265 2.105,12.52 2.293,12.707C2.48,12.895 2.735,13 3,13H13C13.265,13 13.52,12.895 13.707,12.707C13.895,12.52 14,12.265 14,12V5C14,4.735 13.895,4.48 13.707,4.293C13.52,4.105 13.265,4 13,4ZM8,10.5C7.555,10.5 7.12,10.368 6.75,10.121C6.38,9.874 6.092,9.522 5.921,9.111C5.751,8.7 5.706,8.248 5.793,7.811C5.88,7.375 6.094,6.974 6.409,6.659C6.724,6.344 7.125,6.13 7.561,6.043C7.997,5.956 8.45,6.001 8.861,6.171C9.272,6.342 9.624,6.63 9.871,7C10.118,7.37 10.25,7.805 10.25,8.25C10.25,8.847 10.013,9.419 9.591,9.841C9.169,10.263 8.597,10.5 8,10.5Z"
8+
android:strokeAlpha="0.2"
9+
android:fillColor="#FF4400"
10+
android:fillAlpha="0.2"/>
11+
<path
12+
android:pathData="M5.584,2.223C5.676,2.084 5.832,2 6,2H10C10.167,2 10.323,2.084 10.416,2.223L11.267,3.5H13C13.398,3.5 13.779,3.658 14.061,3.939C14.342,4.221 14.5,4.602 14.5,5V12C14.5,12.398 14.342,12.779 14.061,13.061C13.779,13.342 13.398,13.5 13,13.5H3C2.602,13.5 2.221,13.342 1.939,13.061C1.658,12.779 1.5,12.398 1.5,12V5C1.5,4.602 1.658,4.221 1.939,3.939C2.221,3.658 2.602,3.5 3,3.5H4.732L5.584,2.223ZM6.267,3L5.416,4.277C5.323,4.416 5.167,4.5 5,4.5H3C2.867,4.5 2.74,4.553 2.646,4.646C2.553,4.74 2.5,4.867 2.5,5V12C2.5,12.133 2.553,12.26 2.646,12.354C2.74,12.447 2.867,12.5 3,12.5H13C13.133,12.5 13.26,12.447 13.354,12.354C13.447,12.26 13.5,12.133 13.5,12V5C13.5,4.867 13.447,4.74 13.354,4.646C13.26,4.553 13.133,4.5 13,4.5H11C10.833,4.5 10.676,4.416 10.584,4.277L9.732,3H6.267Z"
13+
android:fillColor="#ffffff"
14+
android:fillType="evenOdd"/>
15+
<path
16+
android:pathData="M8,6.5C7.034,6.5 6.25,7.284 6.25,8.25C6.25,9.217 7.034,10 8,10C8.967,10 9.75,9.217 9.75,8.25C9.75,7.284 8.967,6.5 8,6.5ZM5.25,8.25C5.25,6.731 6.481,5.5 8,5.5C9.519,5.5 10.75,6.731 10.75,8.25C10.75,9.769 9.519,11 8,11C6.481,11 5.25,9.769 5.25,8.25Z"
17+
android:fillColor="#ffffff"
18+
android:fillType="evenOdd"/>
19+
</vector>

0 commit comments

Comments
 (0)