fix
This commit is contained in:
@@ -13,12 +13,6 @@ class ExternalSignerLauncher {
|
|||||||
this.launcher = launcher
|
this.launcher = launcher
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unregister() {
|
|
||||||
launcher = null
|
|
||||||
pendingResult?.cancel()
|
|
||||||
pendingResult = null
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun launch(intent: Intent): ActivityResult {
|
suspend fun launch(intent: Intent): ActivityResult {
|
||||||
val deferred = CompletableDeferred<ActivityResult>()
|
val deferred = CompletableDeferred<ActivityResult>()
|
||||||
pendingResult = deferred
|
pendingResult = deferred
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ import su.reya.coop.coop.storage.SecretStore
|
|||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
private val externalSignerLauncher = ExternalSignerLauncher()
|
companion object {
|
||||||
|
val externalSignerLauncher = ExternalSignerLauncher()
|
||||||
|
}
|
||||||
|
|
||||||
private val viewModel: NostrViewModel by viewModels {
|
private val viewModel: NostrViewModel by viewModels {
|
||||||
object : ViewModelProvider.Factory {
|
object : ViewModelProvider.Factory {
|
||||||
@@ -81,9 +83,4 @@ class MainActivity : ComponentActivity() {
|
|||||||
super.onNewIntent(intent)
|
super.onNewIntent(intent)
|
||||||
setIntent(intent)
|
setIntent(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
externalSignerLauncher.unregister()
|
|
||||||
super.onDestroy()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -160,10 +160,9 @@ fun OnboardingScreen() {
|
|||||||
if (viewModel.isExternalSignerAvailable()) {
|
if (viewModel.isExternalSignerAvailable()) {
|
||||||
try {
|
try {
|
||||||
viewModel.connectExternalSigner()
|
viewModel.connectExternalSigner()
|
||||||
|
navigator.navigate(Screen.Home)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.message?.let { snackbarHostState.showSnackbar(it) }
|
e.message?.let { snackbarHostState.showSnackbar(it) }
|
||||||
} finally {
|
|
||||||
navigator.navigate(Screen.Home)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val result = snackbarHostState.showSnackbar(
|
val result = snackbarHostState.showSnackbar(
|
||||||
|
|||||||
@@ -413,10 +413,10 @@ class NostrViewModel(
|
|||||||
val newMetadata = nostr.updateProfile(name, bio, avatarUrl)
|
val newMetadata = nostr.updateProfile(name, bio, avatarUrl)
|
||||||
// Update the metadata state after successfully published
|
// Update the metadata state after successfully published
|
||||||
updateMetadata(nostr.signer.currentUser!!, newMetadata)
|
updateMetadata(nostr.signer.currentUser!!, newMetadata)
|
||||||
|
// Update local state
|
||||||
|
_isBusy.value = false
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
showError("Error: ${e.message}")
|
showError("Error: ${e.message}")
|
||||||
} finally {
|
|
||||||
_isBusy.value = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,12 +435,13 @@ class NostrViewModel(
|
|||||||
val avatarUrl = picture?.let { blossomUpload(it, contentType ?: "image/jpeg") }
|
val avatarUrl = picture?.let { blossomUpload(it, contentType ?: "image/jpeg") }
|
||||||
// Create identity
|
// Create identity
|
||||||
nostr.createIdentity(keys = keys, name = name, bio, picture = avatarUrl)
|
nostr.createIdentity(keys = keys, name = name, bio, picture = avatarUrl)
|
||||||
} catch (e: Exception) {
|
// Persist the secret in the secret storage
|
||||||
showError("Error: ${e.message}")
|
|
||||||
} finally {
|
|
||||||
secretStore.set("user_signer", secret)
|
secretStore.set("user_signer", secret)
|
||||||
|
// Update local states
|
||||||
_isBusy.value = false
|
_isBusy.value = false
|
||||||
_signerRequired.value = false
|
_signerRequired.value = false
|
||||||
|
} catch (e: Exception) {
|
||||||
|
showError("Error: ${e.message}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -489,13 +490,15 @@ class NostrViewModel(
|
|||||||
_isBusy.value = true
|
_isBusy.value = true
|
||||||
try {
|
try {
|
||||||
val signer = createSigner(secret)
|
val signer = createSigner(secret)
|
||||||
|
// Update signer
|
||||||
nostr.setSigner(signer)
|
nostr.setSigner(signer)
|
||||||
} catch (e: Exception) {
|
// Persist the secret in the secret storage
|
||||||
showError("Error: ${e.message}")
|
|
||||||
} finally {
|
|
||||||
secretStore.set("user_signer", secret)
|
secretStore.set("user_signer", secret)
|
||||||
|
// Update local states
|
||||||
_signerRequired.value = false
|
_signerRequired.value = false
|
||||||
_isBusy.value = false
|
_isBusy.value = false
|
||||||
|
} catch (e: Exception) {
|
||||||
|
showError("Error: ${e.message}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,19 +515,19 @@ class NostrViewModel(
|
|||||||
SignerPermissions.nip44Decrypt(),
|
SignerPermissions.nip44Decrypt(),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
val result = handler.getPublicKey(permissions) ?: throw Exception("Rejected")
|
val result = handler.getPublicKey(permissions) ?: throw Exception("Rejected")
|
||||||
val signer = ExternalSignerProxy(handler, result.pubkey)
|
val signer = ExternalSignerProxy(handler, result.pubkey)
|
||||||
|
|
||||||
// Update signer
|
// Update signer
|
||||||
nostr.setSigner(signer)
|
nostr.setSigner(signer)
|
||||||
|
|
||||||
// Store the signer in the secret storage
|
// Store the signer in the secret storage
|
||||||
secretStore.set("user_signer", "nip55://${result.packageName}/${result.pubkey.toHex()}")
|
secretStore.set("user_signer", "nip55://${result.packageName}/${result.pubkey.toHex()}")
|
||||||
} catch (e: Exception) {
|
// Update local states
|
||||||
showError("Error: ${e.message}")
|
|
||||||
} finally {
|
|
||||||
_signerRequired.value = false
|
_signerRequired.value = false
|
||||||
_isBusy.value = false
|
_isBusy.value = false
|
||||||
|
} catch (e: Exception) {
|
||||||
|
throw Exception("Notice: ${e.message}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user