From eadf49b39d2e73dbaae419cdb28b0210b4dbe4d3 Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Tue, 9 Jun 2026 14:53:19 +0700 Subject: [PATCH] improve --- .../su/reya/coop/AndroidExternalSigner.kt | 38 ++++++------------- .../su/reya/coop/screens/OnboardingScreen.kt | 1 + .../kotlin/su/reya/coop/NostrViewModel.kt | 11 ++++-- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/AndroidExternalSigner.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/AndroidExternalSigner.kt index f7c0531..e7e3122 100644 --- a/composeApp/src/androidMain/kotlin/su/reya/coop/AndroidExternalSigner.kt +++ b/composeApp/src/androidMain/kotlin/su/reya/coop/AndroidExternalSigner.kt @@ -56,6 +56,8 @@ class AndroidExternalSigner( payload: String, pubkey: PublicKey? = null, currentUser: PublicKey? = null, + resultKey: String = "result", + extras: Map = emptyMap(), ): String? { // Try Content Resolver first queryContentResolver(type, payload, pubkey, currentUser)?.let { @@ -68,6 +70,7 @@ class AndroidExternalSigner( putExtra("type", type) if (pubkey != null) putExtra("pubkey", pubkey.toHex()) if (currentUser != null) putExtra("current_user", currentUser.toHex()) + extras.forEach { (k, v) -> putExtra(k, v) } } val result = launcher.launch(intent) @@ -76,7 +79,7 @@ class AndroidExternalSigner( val data = result.data ?: return null if (data.getBooleanExtra("rejected", false)) return null - return data.getStringExtra("result") + return data.getStringExtra(resultKey) } override fun isAvailable(): Boolean { @@ -108,31 +111,14 @@ class AndroidExternalSigner( } override suspend fun signEvent(event: UnsignedEvent, currentUser: PublicKey): String? { - // Try Content Resolver first - queryContentResolver( - "SIGN_EVENT", - event.asJson(), - null, - currentUser - )?.let { result -> - if (result.event != null) return result.event - } - - // Fall back to Intent - val intent = Intent(Intent.ACTION_VIEW, "nostrsigner:${event.asJson()}".toUri()).apply { - `package` = cachedPackageName - putExtra("type", "sign_event") - putExtra("current_user", currentUser.toHex()) - if (event.id() != null) putExtra("id", event.id()!!.toHex()) - } - - val result = launcher.launch(intent) - if (result.resultCode != Activity.RESULT_OK) return null - - val data = result.data ?: return null - if (data.getBooleanExtra("rejected", false)) return null - - return data.getStringExtra("event") + val extras = event.id()?.let { mapOf("id" to it.toHex()) } ?: emptyMap() + return request( + type = "sign_event", + payload = event.asJson(), + currentUser = currentUser, + resultKey = "event", + extras = extras, + ) } override suspend fun nip04Encrypt(plaintext: String, pubkey: PublicKey): String? { diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/OnboardingScreen.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/OnboardingScreen.kt index 17845be..cb0ca6e 100644 --- a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/OnboardingScreen.kt +++ b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/OnboardingScreen.kt @@ -62,6 +62,7 @@ fun OnboardingScreen() { val logoPainter = painterResource(Res.drawable.coop) val expressiveFont = getExpressiveFontFamily() + val annotatedText = buildAnnotatedString { append("By using Coop, you agree to accept\nour ") // Push "Terms of Use" link diff --git a/shared/src/commonMain/kotlin/su/reya/coop/NostrViewModel.kt b/shared/src/commonMain/kotlin/su/reya/coop/NostrViewModel.kt index c7ae978..0088e66 100644 --- a/shared/src/commonMain/kotlin/su/reya/coop/NostrViewModel.kt +++ b/shared/src/commonMain/kotlin/su/reya/coop/NostrViewModel.kt @@ -508,9 +508,14 @@ class NostrViewModel( try { val permissions = SignerPermissions.toJson( listOf( - SignerPermissions.signEvent(), - SignerPermissions.nip04Encrypt(), - SignerPermissions.nip04Decrypt(), + SignerPermissions.signEvent(0), + SignerPermissions.signEvent(3), + SignerPermissions.signEvent(10000), + SignerPermissions.signEvent(10050), + SignerPermissions.signEvent(10063), + SignerPermissions.signEvent(22242), + SignerPermissions.signEvent(30030), + SignerPermissions.signEvent(30315), SignerPermissions.nip44Encrypt(), SignerPermissions.nip44Decrypt(), )