Skip to content

Commit

Permalink
Refactor ImportCexAccount screens
Browse files Browse the repository at this point in the history
- make separate ImportBinanceCexAccountScreen and ImportCoinzixCexAccountScreen with its own Scaffold
  • Loading branch information
omurovch committed Jun 19, 2023
1 parent 8b73364 commit f1918b4
Showing 1 changed file with 174 additions and 148 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,22 @@ package io.horizontalsystems.bankwallet.modules.importcexaccount
import android.app.Activity
import android.content.Intent
import android.util.Log
import androidx.activity.result.ActivityResult
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.Scaffold
import androidx.compose.runtime.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
Expand All @@ -23,7 +32,16 @@ import io.horizontalsystems.bankwallet.modules.evmfee.ButtonsGroupWithShade
import io.horizontalsystems.bankwallet.modules.qrscanner.QRScannerActivity
import io.horizontalsystems.bankwallet.ui.compose.ComposeAppTheme
import io.horizontalsystems.bankwallet.ui.compose.TranslatableString
import io.horizontalsystems.bankwallet.ui.compose.components.*
import io.horizontalsystems.bankwallet.ui.compose.components.AppBar
import io.horizontalsystems.bankwallet.ui.compose.components.ButtonPrimaryTransparent
import io.horizontalsystems.bankwallet.ui.compose.components.ButtonPrimaryYellow
import io.horizontalsystems.bankwallet.ui.compose.components.ButtonPrimaryYellowWithSpinner
import io.horizontalsystems.bankwallet.ui.compose.components.FormsInput
import io.horizontalsystems.bankwallet.ui.compose.components.FormsInputPassword
import io.horizontalsystems.bankwallet.ui.compose.components.HsBackButton
import io.horizontalsystems.bankwallet.ui.compose.components.InfoText
import io.horizontalsystems.bankwallet.ui.compose.components.MenuItem
import io.horizontalsystems.bankwallet.ui.compose.components.VSpacer
import io.horizontalsystems.core.helpers.HudHelper

@Composable
Expand All @@ -33,69 +51,28 @@ fun ImportCexAccountEnterCexDataScreen(
onClose: () -> Unit,
onAccountCreate: () -> Unit,
) {
val context = LocalContext.current
var scannedData by remember { mutableStateOf<Pair<String, Long>?>(null) }

val viewModel =
viewModel<ImportCexAccountEnterCexDataViewModel>(factory = ImportCexAccountEnterCexDataViewModel.Factory(cexId))
val viewModel = viewModel<ImportCexAccountEnterCexDataViewModel>(factory = ImportCexAccountEnterCexDataViewModel.Factory(cexId))

val cex = viewModel.cex

val menuItems = buildList {
if (cex is CexBinance) {
val qrScannerLauncher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data?.getStringExtra(ModuleField.SCAN_ADDRESS) ?: ""
scannedData = Pair(data, System.currentTimeMillis())
}
}
add(
MenuItem(
title = TranslatableString.ResString(R.string.Button_ScanQr),
icon = R.drawable.ic_qr_scan_24px,
onClick = {
qrScannerLauncher.launch(QRScannerActivity.getScanQrIntent(context))
}
)
)
when (val cex = viewModel.cex) {
is CexBinance -> {
ImportBinanceCexAccountScreen(cex, onNavigateBack, onClose, onAccountCreate)
}
add(
MenuItem(
title = TranslatableString.ResString(R.string.Button_Close),
icon = R.drawable.ic_close,
onClick = onClose
)
)
}

if (cex != null) {
Scaffold(
backgroundColor = ComposeAppTheme.colors.tyler,
topBar = {
AppBar(
title = TranslatableString.PlainString(cex.name),
navigationIcon = {
HsBackButton(onClick = onNavigateBack)
},
menuItems = menuItems
)
}
) { paddingValues ->
when (cex) {
is CexBinance -> {
EnterCexDataBinanceForm(paddingValues, onAccountCreate, scannedData)
}

is CexCoinzix -> {
EnterCexDataCoinzixForm(paddingValues, onAccountCreate)
}
}
is CexCoinzix -> {
ImportCoinzixCexAccountScreen(cex, onNavigateBack, onClose, onAccountCreate)
}

else -> Unit
}
}

@Composable
private fun EnterCexDataCoinzixForm(paddingValues: PaddingValues, onAccountCreate: () -> Unit) {
private fun ImportCoinzixCexAccountScreen(
cex: CexCoinzix,
onNavigateBack: () -> Unit,
onClose: () -> Unit,
onAccountCreate: () -> Unit
) {
val viewModel = viewModel<EnterCexDataCoinzixViewModel>()

val intent = Intent(LocalContext.current, HCaptchaActivity::class.java)
Expand All @@ -104,9 +81,10 @@ private fun EnterCexDataCoinzixForm(paddingValues: PaddingValues, onAccountCreat
val data: Intent? = result.data
when (result.resultCode) {
Activity.RESULT_OK -> {
val token = data?.extras?.getString("captcha")?: ""
val token = data?.extras?.getString("captcha") ?: ""
viewModel.onResultCaptchaToken(token)
}

Activity.RESULT_CANCELED -> {
Log.d("hCaptcha", "hCaptcha failed")
}
Expand All @@ -120,64 +98,86 @@ private fun EnterCexDataCoinzixForm(paddingValues: PaddingValues, onAccountCreat
}

var hidePassphrase by remember { mutableStateOf(true) }
Column(modifier = Modifier.padding(paddingValues)) {
InfoText(text = stringResource(R.string.ImportCexAccountConzix_Description))
VSpacer(height = 20.dp)
FormsInput(
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.ImportCexAccountConzix_Email)
) {
viewModel.onEnterEmail(it)

Scaffold(
backgroundColor = ComposeAppTheme.colors.tyler,
topBar = {
AppBar(
title = TranslatableString.PlainString(cex.name),
navigationIcon = {
HsBackButton(onClick = onNavigateBack)
},
menuItems = listOf(
MenuItem(
title = TranslatableString.ResString(R.string.Button_Close),
icon = R.drawable.ic_close,
onClick = onClose
)
)
)
}
VSpacer(height = 16.dp)
FormsInputPassword(
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.Password),
//state = uiState.passphraseState,
onValueChange = {
viewModel.onEnterPassword(it)
},
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
hide = hidePassphrase,
onToggleHide = {
hidePassphrase = !hidePassphrase
) { paddingValues ->
Column(modifier = Modifier.padding(paddingValues)) {
InfoText(text = stringResource(R.string.ImportCexAccountConzix_Description))
VSpacer(height = 20.dp)
FormsInput(
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.ImportCexAccountConzix_Email)
) {
viewModel.onEnterEmail(it)
}
)

Spacer(modifier = Modifier.weight(1f))

ButtonsGroupWithShade {
Column(Modifier.padding(horizontal = 24.dp)) {
ButtonPrimaryYellowWithSpinner(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_Login),
showSpinner = false,
enabled = viewModel.loginEnabled,
onClick = {
launcher.launch(intent)
},
)
Spacer(Modifier.height(16.dp))
ButtonPrimaryTransparent(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_SignUp),
onClick = {
//viewModel.onSignUp()
}
)
VSpacer(height = 16.dp)
FormsInputPassword(
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.Password),
//state = uiState.passphraseState,
onValueChange = {
viewModel.onEnterPassword(it)
},
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
hide = hidePassphrase,
onToggleHide = {
hidePassphrase = !hidePassphrase
}
)

Spacer(modifier = Modifier.weight(1f))

ButtonsGroupWithShade {
Column(Modifier.padding(horizontal = 24.dp)) {
ButtonPrimaryYellowWithSpinner(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_Login),
showSpinner = false,
enabled = viewModel.loginEnabled,
onClick = {
launcher.launch(intent)
},
)
Spacer(Modifier.height(16.dp))
ButtonPrimaryTransparent(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_SignUp),
onClick = {
//viewModel.onSignUp()
}
)
}
}
}
}
}

@Composable
private fun EnterCexDataBinanceForm(
paddingValues: PaddingValues,
onAccountCreate: () -> Unit,
scannedData: Pair<String, Long>?
private fun ImportBinanceCexAccountScreen(
cex: CexBinance,
onNavigateBack: () -> Unit,
onClose: () -> Unit,
onAccountCreate: () -> Unit
) {
val viewModel = viewModel<EnterCexDataBinanceViewModel>()
val view = LocalView.current
val context = LocalContext.current
val uiState = viewModel.uiState
val accountCreated = uiState.accountCreated
val apiKey = uiState.apiKey
Expand All @@ -191,58 +191,84 @@ private fun EnterCexDataBinanceForm(
}
}

LaunchedEffect(scannedData) {
scannedData?.let { (text, _) ->
viewModel.onScannedData(text)
}
}

LaunchedEffect(errorMessage, uiState) {
errorMessage?.let {
HudHelper.showErrorMessage(view, it)
}
}

Column(modifier = Modifier.padding(paddingValues)) {
InfoText(text = stringResource(R.string.ImportCexAccountBinance_Description))
FormsInput(
initial = apiKey,
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.ImportCexAccountBinance_ApiKey)
) {
viewModel.onEnterApiKey(it)
}
VSpacer(height = 16.dp)
FormsInput(
initial = secretKey,
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.ImportCexAccountBinance_SecretKey)
) {
viewModel.onEnterSecretKey(it)
val qrScannerLauncher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data?.getStringExtra(ModuleField.SCAN_ADDRESS) ?: ""
viewModel.onScannedData(data)
}
}

Spacer(modifier = Modifier.weight(1f))

ButtonsGroupWithShade {
Column(Modifier.padding(horizontal = 24.dp)) {
ButtonPrimaryYellow(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_Connect),
enabled = connectEnabled,
onClick = {
viewModel.onClickConnect()
},
)
Spacer(Modifier.height(16.dp))
ButtonPrimaryTransparent(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_GetApiKeys),
onClick = {

}
Scaffold(
backgroundColor = ComposeAppTheme.colors.tyler,
topBar = {
AppBar(
title = TranslatableString.PlainString(cex.name),
navigationIcon = {
HsBackButton(onClick = onNavigateBack)
},
menuItems = listOf(
MenuItem(
title = TranslatableString.ResString(R.string.Button_ScanQr),
icon = R.drawable.ic_qr_scan_24px,
onClick = {
qrScannerLauncher.launch(QRScannerActivity.getScanQrIntent(context))
}
),
MenuItem(
title = TranslatableString.ResString(R.string.Button_Close),
icon = R.drawable.ic_close,
onClick = onClose
)
)
)
}
) { paddingValues ->
Column(modifier = Modifier.padding(paddingValues)) {
InfoText(text = stringResource(R.string.ImportCexAccountBinance_Description))
FormsInput(
initial = apiKey,
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.ImportCexAccountBinance_ApiKey)
) {
viewModel.onEnterApiKey(it)
}
VSpacer(height = 16.dp)
FormsInput(
initial = secretKey,
modifier = Modifier.padding(horizontal = 16.dp),
hint = stringResource(R.string.ImportCexAccountBinance_SecretKey)
) {
viewModel.onEnterSecretKey(it)
}

Spacer(modifier = Modifier.weight(1f))

ButtonsGroupWithShade {
Column(Modifier.padding(horizontal = 24.dp)) {
ButtonPrimaryYellow(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_Connect),
enabled = connectEnabled,
onClick = {
viewModel.onClickConnect()
},
)
Spacer(Modifier.height(16.dp))
ButtonPrimaryTransparent(
modifier = Modifier.fillMaxWidth(),
title = stringResource(R.string.Button_GetApiKeys),
onClick = {

}
)
}
}
}
}
}

0 comments on commit f1918b4

Please sign in to comment.