diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/compose/ScreenBrightness.kt b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/ScreenBrightness.kt similarity index 83% rename from ui-lib/src/main/java/co/electriccoin/zcash/ui/common/compose/ScreenBrightness.kt rename to ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/ScreenBrightness.kt index c0222b477..9890df7ba 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/compose/ScreenBrightness.kt +++ b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/ScreenBrightness.kt @@ -1,4 +1,4 @@ -package co.electriccoin.zcash.ui.common.compose +package co.electriccoin.zcash.ui.design.component import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -37,13 +37,12 @@ val LocalScreenBrightness = compositionLocalOf { ScreenBrightness } fun BrightenScreen() { val screenBrightness = LocalScreenBrightness.current DisposableEffect(screenBrightness) { - screenBrightness.fullBrightness() - onDispose { screenBrightness.restoreBrightness() } + ScreenBrightness.fullBrightness() + onDispose { ScreenBrightness.restoreBrightness() } } } @Composable fun RestoreScreenBrightness() { - val screenBrightness = LocalScreenBrightness.current - screenBrightness.restoreBrightness() + ScreenBrightness.restoreBrightness() } diff --git a/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/ZashiQr.kt b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/ZashiQr.kt index 2d7bc2db9..94032a6f4 100644 --- a/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/ZashiQr.kt +++ b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/ZashiQr.kt @@ -1,26 +1,39 @@ package co.electriccoin.zcash.ui.design.component +import android.util.Log import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.isSpecified -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import androidx.compose.ui.window.DialogWindowProvider import co.electriccoin.zcash.ui.design.theme.colors.ZashiColors import co.electriccoin.zcash.ui.design.theme.dimensions.ZashiDimensions import co.electriccoin.zcash.ui.design.util.AndroidQrCodeImageGenerator @@ -37,9 +50,81 @@ fun ZashiQr( qrSize: Dp = ZashiQrDefaults.width, colors: QrCodeColors = QrCodeDefaults.colors(), contentPadding: PaddingValues = QrCodeDefaults.contentPadding() +) { + var isFullscreenDialogVisible by remember { mutableStateOf(false) } + + ZashiQrInternal( + state = state, + modifier = + modifier + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null, + onClick = { + isFullscreenDialogVisible = true + } + ), + colors = colors, + contentPadding = contentPadding, + qrSize = qrSize, + enableBitmapReload = !isFullscreenDialogVisible, + centerImageResId = state.centerImageResId, + tag = "kktina 1" + ) + + if (isFullscreenDialogVisible) { + Dialog( + onDismissRequest = { isFullscreenDialogVisible = false }, + properties = + DialogProperties( + usePlatformDefaultWidth = false, + dismissOnClickOutside = true, + dismissOnBackPress = true + ) + ) { + val parent = LocalView.current.parent + + BrightenScreen() + + FullscreenDialogContent( + state = state, + onBack = { isFullscreenDialogVisible = false }, + ) + + SideEffect { + (parent as? DialogWindowProvider)?.window?.setDimAmount(FULLSCREEN_DIM) + } + } + } +} + +@Composable +private fun ZashiQrInternal( + state: QrState, + qrSize: Dp, + colors: QrCodeColors, + contentPadding: PaddingValues, + enableBitmapReload: Boolean, + centerImageResId: Int?, + tag: String, + modifier: Modifier = Modifier, ) { val qrSizePx = with(LocalDensity.current) { qrSize.roundToPx() } - val bitmap = getQrCode(state.qrData, qrSizePx, colors) + var bitmap: ImageBitmap? by remember { + Log.d(tag, "loaded") + mutableStateOf(getQrCode(state.qrData, qrSizePx, colors)) + } + + var reload by remember { mutableStateOf(false) } + + LaunchedEffect(state.qrData, qrSizePx, colors) { + if (enableBitmapReload && reload) { + bitmap = getQrCode(state.qrData, qrSizePx, colors) + Log.d(tag, "launchedeffect") + } + + reload = true + } Surface( modifier = modifier, @@ -50,23 +135,25 @@ fun ZashiQr( Box( modifier = Modifier.padding(contentPadding) ) { - Image( - bitmap = bitmap, - contentDescription = state.contentDescription?.getValue(), - Modifier then - if (state.onClick != null) { - Modifier.clickable { state.onClick.invoke() } - } else { - Modifier - } - ) - if (state.centerImageResId != null) { + if (bitmap == null) { + Box(modifier = Modifier.size(qrSize)) + } else { + bitmap?.let { + Image( + modifier = Modifier, + bitmap = it, + contentDescription = state.contentDescription?.getValue(), + ) + } + } + + if (centerImageResId != null) { Image( modifier = Modifier .size(64.dp) .align(Alignment.Center), - imageVector = ImageVector.vectorResource(state.centerImageResId), + painter = painterResource(centerImageResId), contentDescription = null, ) } @@ -74,6 +161,43 @@ fun ZashiQr( } } +@Composable +private fun FullscreenDialogContent( + state: QrState, + onBack: () -> Unit +) { + Box( + modifier = + Modifier + .fillMaxSize() + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null, + onClick = onBack + ) + .padding(start = 16.dp, end = 16.dp, bottom = 64.dp) + ) { + ZashiQrInternal( + modifier = + Modifier + .fillMaxWidth() + .align(Alignment.Center), + state = state, + contentPadding = PaddingValues(6.dp), + colors = + QrCodeDefaults.colors( + background = Color.White, + foreground = Color.Black, + border = Color.Unspecified + ), + qrSize = LocalConfiguration.current.screenWidthDp.dp - 44.dp, + enableBitmapReload = true, + centerImageResId = state.fullscreenCenterImageResId, + tag = "kktina 2" + ) + } +} + private fun getQrCode( address: String, size: Int, @@ -109,6 +233,8 @@ object QrCodeDefaults { data class QrState( val qrData: String, val contentDescription: StringResource? = null, - val onClick: (() -> Unit)? = null, val centerImageResId: Int? = null, + val fullscreenCenterImageResId: Int? = null, ) + +private const val FULLSCREEN_DIM = .9f diff --git a/ui-design-lib/src/main/res/ui/common/drawable/ic_item_keystone_qr_white.xml b/ui-design-lib/src/main/res/ui/common/drawable/ic_item_keystone_qr_white.xml new file mode 100644 index 000000000..05c78f999 --- /dev/null +++ b/ui-design-lib/src/main/res/ui/common/drawable/ic_item_keystone_qr_white.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/common/ScreenBrightnessTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/common/ScreenBrightnessTest.kt index 6d99d6d26..71a9e673c 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/common/ScreenBrightnessTest.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/common/ScreenBrightnessTest.kt @@ -8,10 +8,10 @@ import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.test.filters.MediumTest import co.electriccoin.zcash.test.UiTestPrerequisites -import co.electriccoin.zcash.ui.common.compose.BrightenScreen -import co.electriccoin.zcash.ui.common.compose.LocalScreenBrightness -import co.electriccoin.zcash.ui.common.compose.ScreenBrightness -import co.electriccoin.zcash.ui.common.compose.ScreenBrightnessState +import co.electriccoin.zcash.ui.design.component.BrightenScreen +import co.electriccoin.zcash.ui.design.component.LocalScreenBrightness +import co.electriccoin.zcash.ui.design.component.ScreenBrightness +import co.electriccoin.zcash.ui.design.component.ScreenBrightnessState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/Navigation.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/Navigation.kt index 6da24dab3..7c0209cb9 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/Navigation.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/Navigation.kt @@ -77,8 +77,6 @@ import co.electriccoin.zcash.ui.screen.feedback.WrapFeedback import co.electriccoin.zcash.ui.screen.home.WrapHome import co.electriccoin.zcash.ui.screen.integrations.WrapIntegrations import co.electriccoin.zcash.ui.screen.qrcode.WrapQrCode -import co.electriccoin.zcash.ui.screen.qrdialog.AndroidQrDialog -import co.electriccoin.zcash.ui.screen.qrdialog.QrDialog import co.electriccoin.zcash.ui.screen.receive.model.ReceiveAddressType import co.electriccoin.zcash.ui.screen.request.WrapRequest import co.electriccoin.zcash.ui.screen.reviewtransaction.AndroidReviewTransaction @@ -427,16 +425,6 @@ internal fun MainActivity.Navigation() { composable { AndroidTransactionDetail(it.toRoute()) } - dialog( - dialogProperties = - DialogProperties( - dismissOnBackPress = false, - dismissOnClickOutside = false, - usePlatformDefaultWidth = false - ) - ) { - AndroidQrDialog(it.toRoute()) - } } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/compose/CompositionLocalBinder.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/compose/CompositionLocalBinder.kt index 33100dbe9..fcd529967 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/compose/CompositionLocalBinder.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/compose/CompositionLocalBinder.kt @@ -10,6 +10,9 @@ import cash.z.ecc.android.sdk.ext.collectWith import co.electriccoin.zcash.spackle.EmulatorWtfUtil import co.electriccoin.zcash.spackle.FirebaseTestLabUtil import co.electriccoin.zcash.ui.MainActivity +import co.electriccoin.zcash.ui.design.component.LocalScreenBrightness +import co.electriccoin.zcash.ui.design.component.ScreenBrightness +import co.electriccoin.zcash.ui.design.component.ScreenBrightnessState import kotlinx.coroutines.flow.map @Composable diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt index d59a14e9a..c7660e021 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/home/AndroidHome.kt @@ -20,12 +20,12 @@ import co.electriccoin.zcash.di.koinActivityViewModel import co.electriccoin.zcash.ui.HomeTabNavigationRouter import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.LocalActivity -import co.electriccoin.zcash.ui.common.compose.RestoreScreenBrightness import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.viewmodel.HomeViewModel import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.common.viewmodel.isSynced +import co.electriccoin.zcash.ui.design.component.RestoreScreenBrightness import co.electriccoin.zcash.ui.screen.account.WrapAccount import co.electriccoin.zcash.ui.screen.balances.WrapBalances import co.electriccoin.zcash.ui.screen.home.model.TabItem diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/model/QrCodeState.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/model/QrCodeState.kt index 59941f2b9..2da1d43a3 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/model/QrCodeState.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/model/QrCodeState.kt @@ -13,17 +13,17 @@ sealed class QrCodeState { val walletAddress: WalletAddress, val onAddressCopy: (String) -> Unit, val onQrCodeShare: (ImageBitmap) -> Unit, - val onQrCodeClick: () -> Unit, val onBack: () -> Unit, ) : QrCodeState() { fun toQrState( contentDescription: StringResource? = null, - centerImageResId: Int? = null + centerImageResId: Int? = null, + fullscreenCenterImageResId: Int? = null ) = QrState( qrData = walletAddress.address, - onClick = onQrCodeClick, contentDescription = contentDescription, - centerImageResId = centerImageResId + centerImageResId = centerImageResId, + fullscreenCenterImageResId = fullscreenCenterImageResId ) } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/view/QrCodeView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/view/QrCodeView.kt index d96e65e46..2f5379607 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/view/QrCodeView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/view/QrCodeView.kt @@ -86,7 +86,6 @@ private fun ZashiPreview() = walletAddress = runBlocking { WalletAddressFixture.unified() }, onAddressCopy = {}, onQrCodeShare = {}, - onQrCodeClick = {}, onBack = {}, ), snackbarHostState = SnackbarHostState(), @@ -105,7 +104,6 @@ private fun KeystonePreview() = walletAddress = runBlocking { WalletAddressFixture.unified() }, onAddressCopy = {}, onQrCodeShare = {}, - onQrCodeClick = {}, onBack = {}, ), snackbarHostState = SnackbarHostState(), @@ -438,6 +436,11 @@ private fun ColumnScope.QrCode( when (preparedState.qrCodeType) { QrCodeType.ZASHI -> R.drawable.logo_zec_fill_stroke QrCodeType.KEYSTONE -> co.electriccoin.zcash.ui.design.R.drawable.ic_item_keystone_qr + }, + fullscreenCenterImageResId = + when (preparedState.qrCodeType) { + QrCodeType.ZASHI -> R.drawable.logo_zec_fill_stroke_white + QrCodeType.KEYSTONE -> co.electriccoin.zcash.ui.design.R.drawable.ic_item_keystone_qr_white } ), modifier = modifier.align(CenterHorizontally), diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/viewmodel/QrCodeViewModel.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/viewmodel/QrCodeViewModel.kt index 444b429b6..e7e42ee9c 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/viewmodel/QrCodeViewModel.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrcode/viewmodel/QrCodeViewModel.kt @@ -21,7 +21,6 @@ import co.electriccoin.zcash.ui.common.usecase.ObserveSelectedWalletAccountUseCa import co.electriccoin.zcash.ui.screen.qrcode.ext.fromReceiveAddressType import co.electriccoin.zcash.ui.screen.qrcode.model.QrCodeState import co.electriccoin.zcash.ui.screen.qrcode.model.QrCodeType -import co.electriccoin.zcash.ui.screen.qrdialog.QrDialog import co.electriccoin.zcash.ui.screen.receive.model.ReceiveAddressType import co.electriccoin.zcash.ui.util.FileShareUtil import kotlinx.coroutines.Dispatchers @@ -58,13 +57,6 @@ class QrCodeViewModel( walletAddress = walletAddress, onAddressCopy = { address -> onAddressCopyClick(address) }, onQrCodeShare = { onQrCodeShareClick(it, versionInfo) }, - onQrCodeClick = { - navigationRouter.forward( - QrDialog( - qr = walletAddress.address, - ) - ) - }, onBack = ::onBack, qrCodeType = when (account) { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/AndroidQrDialog.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/AndroidQrDialog.kt deleted file mode 100644 index f1fb9ed02..000000000 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/AndroidQrDialog.kt +++ /dev/null @@ -1,37 +0,0 @@ -package co.electriccoin.zcash.ui.screen.qrdialog - -import androidx.activity.compose.BackHandler -import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.platform.LocalView -import androidx.compose.ui.window.DialogWindowProvider -import co.electriccoin.zcash.ui.NavigationRouter -import co.electriccoin.zcash.ui.design.component.QrState -import org.koin.compose.koinInject - -@Composable -fun AndroidQrDialog(arg: QrDialog) { - val navigationRouter = koinInject() - - val parent = LocalView.current.parent - - SideEffect { - (parent as? DialogWindowProvider)?.window?.setDimAmount(DIALOG_DIM) - } - - BackHandler { - navigationRouter.back() - } - - QrDialogView( - state = - QrState( - qrData = arg.qr, - ), - onBack = { - navigationRouter.back() - } - ) -} - -private const val DIALOG_DIM = .8f diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/QrDialog.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/QrDialog.kt deleted file mode 100644 index af8409cd2..000000000 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/QrDialog.kt +++ /dev/null @@ -1,8 +0,0 @@ -package co.electriccoin.zcash.ui.screen.qrdialog - -import kotlinx.serialization.Serializable - -@Serializable -data class QrDialog( - val qr: String, -) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/QrDialogView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/QrDialogView.kt deleted file mode 100644 index cbe788918..000000000 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/qrdialog/QrDialogView.kt +++ /dev/null @@ -1,74 +0,0 @@ -package co.electriccoin.zcash.ui.screen.qrdialog - -import androidx.compose.foundation.clickable -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import co.electriccoin.zcash.ui.design.component.QrCodeDefaults -import co.electriccoin.zcash.ui.design.component.QrState -import co.electriccoin.zcash.ui.design.component.ZashiQr -import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens -import co.electriccoin.zcash.ui.design.theme.ZcashTheme - -@Composable -fun QrDialogView( - state: QrState, - onBack: () -> Unit -) { - Box( - modifier = - Modifier - .fillMaxSize() - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = null, - onClick = onBack - ) - .padding(start = 16.dp, end = 16.dp, bottom = 64.dp) - ) { - ZashiQr( - modifier = - Modifier - .fillMaxWidth() - .align(Alignment.Center), - state = state, - qrSize = LocalConfiguration.current.screenWidthDp.dp - 44.dp, - contentPadding = PaddingValues(6.dp), - colors = - QrCodeDefaults.colors( - background = Color.White, - foreground = Color.Black, - border = Color.Unspecified - ) - ) - } -} - -@PreviewScreens -@Composable -private fun Preview() = - ZcashTheme { - Dialog( - onDismissRequest = {} - ) { - QrDialogView( - state = - QrState( - qrData = "test", - centerImageResId = co.electriccoin.zcash.ui.design.R.drawable.ic_item_keystone_qr - ), - onBack = {} - ) - } - } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/model/RequestState.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/model/RequestState.kt index 6d51b049f..854e819ff 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/model/RequestState.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/model/RequestState.kt @@ -36,9 +36,9 @@ internal sealed class RequestState { data class QrCode( val icon: Int, + val fullScreenIcon: Int, val request: Request, val walletAddress: WalletAddress, - val onQrCodeClick: () -> Unit, val onQrCodeShare: (colors: QrCodeColors, pixels: Int, uri: String) -> Unit, override val onBack: () -> Unit, val onClose: () -> Unit, @@ -47,11 +47,12 @@ internal sealed class RequestState { fun toQrState( contentDescription: StringResource? = null, centerImageResId: Int? = null, + fullscreenCenterImageResId: Int? = null ) = QrState( qrData = request.qrCodeState.requestUri, - onClick = onQrCodeClick, contentDescription = contentDescription, - centerImageResId = centerImageResId + centerImageResId = centerImageResId, + fullscreenCenterImageResId = fullscreenCenterImageResId ) } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestQrCodeView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestQrCodeView.kt index 3a98dd497..dfc715e2d 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestQrCodeView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/view/RequestQrCodeView.kt @@ -101,7 +101,8 @@ private fun ColumnScope.QrCode( state = requestState.toQrState( contentDescription = stringRes(R.string.request_qr_code_content_description), - centerImageResId = requestState.icon + centerImageResId = requestState.icon, + fullscreenCenterImageResId = requestState.fullScreenIcon ), modifier = modifier.align(CenterHorizontally), ) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/viewmodel/RequestViewModel.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/viewmodel/RequestViewModel.kt index 02ea95ac0..1d50d8759 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/viewmodel/RequestViewModel.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/request/viewmodel/RequestViewModel.kt @@ -24,7 +24,6 @@ import co.electriccoin.zcash.ui.design.util.AndroidQrCodeImageGenerator import co.electriccoin.zcash.ui.design.util.JvmQrCodeGenerator import co.electriccoin.zcash.ui.design.util.QrCodeColors import co.electriccoin.zcash.ui.screen.qrcode.ext.fromReceiveAddressType -import co.electriccoin.zcash.ui.screen.qrdialog.QrDialog import co.electriccoin.zcash.ui.screen.receive.model.ReceiveAddressType import co.electriccoin.zcash.ui.screen.request.ext.convertToDouble import co.electriccoin.zcash.ui.screen.request.model.AmountState @@ -139,15 +138,15 @@ class RequestViewModel( .ic_item_keystone_qr is ZashiAccount -> R.drawable.logo_zec_fill_stroke }, + fullScreenIcon = + when (account) { + is KeystoneAccount -> + co.electriccoin.zcash.ui.design.R.drawable + .ic_item_keystone_qr_white + is ZashiAccount -> R.drawable.logo_zec_fill_stroke_white + }, walletAddress = walletAddress, request = request, - onQrCodeClick = { - navigationRouter.forward( - QrDialog( - qr = request.qrCodeState.requestUri - ) - ) - }, onQrCodeShare = { colors, pixels, uri -> onShareQrCode( colors = colors, diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/viewmodel/ScreenBrightnessViewModel.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/viewmodel/ScreenBrightnessViewModel.kt index aa7007c13..bf5b5f69d 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/viewmodel/ScreenBrightnessViewModel.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/viewmodel/ScreenBrightnessViewModel.kt @@ -2,7 +2,7 @@ package co.electriccoin.zcash.ui.screen.settings.viewmodel import android.app.Application import androidx.lifecycle.AndroidViewModel -import co.electriccoin.zcash.ui.common.compose.ScreenBrightness +import co.electriccoin.zcash.ui.design.component.ScreenBrightness import kotlinx.coroutines.flow.MutableStateFlow class ScreenBrightnessViewModel(application: Application) : AndroidViewModel(application) { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/state/SignKeystoneTransactionState.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/state/SignKeystoneTransactionState.kt index 10f5c14d7..ea93eb294 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/state/SignKeystoneTransactionState.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/state/SignKeystoneTransactionState.kt @@ -7,7 +7,6 @@ import co.electriccoin.zcash.ui.design.util.StringResource data class SignKeystoneTransactionState( val onBack: () -> Unit, - val onQrCodeClick: () -> Unit, val accountInfo: ZashiAccountInfoListItemState, val qrData: String?, val generateNextQrCode: () -> Unit, @@ -22,7 +21,6 @@ data class SignKeystoneTransactionState( requireNotNull(qrData) { "The QR code data needs to be set at this point" } return QrState( qrData = qrData, - onClick = onQrCodeClick, contentDescription = contentDescription, centerImageResId = centerImageResId ) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/view/SignKeystoneTransactionView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/view/SignKeystoneTransactionView.kt index 49d586cd6..c4a9ef174 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/view/SignKeystoneTransactionView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/view/SignKeystoneTransactionView.kt @@ -192,7 +192,6 @@ private fun Preview() = positiveButton = ButtonState(stringRes("Get Signature")), negativeButton = ButtonState(stringRes("Reject")), onBack = {}, - onQrCodeClick = {}, ) ) } @@ -216,7 +215,6 @@ private fun DebugPreview() = positiveButton = ButtonState(stringRes("Get Signature")), negativeButton = ButtonState(stringRes("Reject")), onBack = {}, - onQrCodeClick = {}, ) ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/viewmodel/SignKeystoneTransactionViewModel.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/viewmodel/SignKeystoneTransactionViewModel.kt index ff44dbc77..9dcbe7f30 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/viewmodel/SignKeystoneTransactionViewModel.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/signkeystonetransaction/viewmodel/SignKeystoneTransactionViewModel.kt @@ -15,7 +15,6 @@ import co.electriccoin.zcash.ui.common.usecase.SharePCZTUseCase import co.electriccoin.zcash.ui.design.component.ButtonState import co.electriccoin.zcash.ui.design.util.stringRes import co.electriccoin.zcash.ui.screen.addressbook.viewmodel.ADDRESS_MAX_LENGTH -import co.electriccoin.zcash.ui.screen.qrdialog.QrDialog import co.electriccoin.zcash.ui.screen.scankeystone.ScanKeystonePCZTRequest import co.electriccoin.zcash.ui.screen.signkeystonetransaction.state.SignKeystoneTransactionState import co.electriccoin.zcash.ui.screen.signkeystonetransaction.state.ZashiAccountInfoListItemState @@ -77,13 +76,6 @@ class SignKeystoneTransactionViewModel( onClick = ::onSharePCZTClick ).takeIf { BuildConfig.DEBUG }, onBack = ::onBack, - onQrCodeClick = { - navigationRouter.forward( - QrDialog( - qr = qrData.orEmpty(), - ) - ) - }, ) }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(ANDROID_STATE_FLOW_TIMEOUT), null) diff --git a/ui-lib/src/main/res/ui/qr_code/drawable/logo_zec_fill_stroke_white.xml b/ui-lib/src/main/res/ui/qr_code/drawable/logo_zec_fill_stroke_white.xml new file mode 100644 index 000000000..eee50f2ec --- /dev/null +++ b/ui-lib/src/main/res/ui/qr_code/drawable/logo_zec_fill_stroke_white.xml @@ -0,0 +1,22 @@ + + + + + + + +