From 90c6d6c8f81c1259a964e218de28488eb791e658 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Wed, 13 Sep 2023 06:42:37 -0300 Subject: [PATCH] fix login with amber --- .../ui/screen/loggedOff/LoginScreen.kt | 80 ++++++++++++++----- 1 file changed, 59 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt index 5cb89ace8..734972693 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt @@ -1,6 +1,10 @@ package com.vitorpamplona.amethyst.ui.screen.loggedOff +import android.app.Activity import android.util.Log +import android.widget.Toast +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -35,9 +39,12 @@ import androidx.compose.ui.text.input.* import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp +import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.ServiceManager import com.vitorpamplona.amethyst.service.AmberUtils import com.vitorpamplona.amethyst.service.PackageUtils +import com.vitorpamplona.amethyst.ui.actions.SignerType import com.vitorpamplona.amethyst.ui.qrcode.SimpleQrCodeScanner import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.ConnectOrbotDialog @@ -67,6 +74,57 @@ fun LoginPage( val proxyPort = remember { mutableStateOf("9050") } var connectOrbotDialogOpen by remember { mutableStateOf(false) } val scope = rememberCoroutineScope() + var loginWithAmber by remember { mutableStateOf(false) } + val activity = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult(), + onResult = { + loginWithAmber = false + AmberUtils.isActivityRunning = false + ServiceManager.shouldPauseService = true + if (it.resultCode != Activity.RESULT_OK) { + scope.launch(Dispatchers.Main) { + Toast.makeText( + Amethyst.instance, + "Sign request rejected", + Toast.LENGTH_SHORT + ).show() + } + return@rememberLauncherForActivityResult + } else { + val event = it.data?.getStringExtra("signature") ?: "" + key.value = TextFieldValue(event) + if (!acceptedTerms.value) { + termsAcceptanceIsRequired = + context.getString(R.string.acceptance_of_terms_is_required) + } + + if (key.value.text.isBlank()) { + errorMessage = context.getString(R.string.key_is_required) + } + + if (acceptedTerms.value && key.value.text.isNotBlank()) { + try { + accountViewModel.startUI(key.value.text, useProxy.value, proxyPort.value.toInt(), true) + } catch (e: Exception) { + Log.e("Login", "Could not sign in", e) + errorMessage = context.getString(R.string.invalid_key) + } + } + } + } + ) + + LaunchedEffect(loginWithAmber) { + if (loginWithAmber) { + AmberUtils.openAmber( + "", + SignerType.GET_PUBLIC_KEY, + activity, + "", + "" + ) + } + } Column( modifier = Modifier @@ -299,27 +357,7 @@ fun LoginPage( Box(modifier = Modifier.padding(40.dp, 40.dp, 40.dp, 0.dp)) { Button( onClick = { - scope.launch(Dispatchers.IO) { - AmberUtils.loginWithAmber() - key.value = TextFieldValue(AmberUtils.content) - if (!acceptedTerms.value) { - termsAcceptanceIsRequired = - context.getString(R.string.acceptance_of_terms_is_required) - } - - if (key.value.text.isBlank()) { - errorMessage = context.getString(R.string.key_is_required) - } - - if (acceptedTerms.value && key.value.text.isNotBlank()) { - try { - accountViewModel.startUI(key.value.text, useProxy.value, proxyPort.value.toInt(), true) - } catch (e: Exception) { - Log.e("Login", "Could not sign in", e) - errorMessage = context.getString(R.string.invalid_key) - } - } - } + loginWithAmber = true }, shape = RoundedCornerShape(Size35dp), modifier = Modifier