diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/models/IntentData.kt b/app/src/main/java/com/greenart7c3/nostrsigner/models/IntentData.kt index 1480c1f6..d35c0af3 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/models/IntentData.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/models/IntentData.kt @@ -1,8 +1,15 @@ package com.greenart7c3.nostrsigner.models -import com.greenart7c3.nostrsigner.service.model.Event - class IntentData( - val data: Event, - val name: String + val data: String, + val name: String, + val type: SignerType ) + +enum class SignerType { + SIGN_EVENT, + NIP04_ENCRYPT, + NIP04_DECRYPT, + NIP44_ENCRYPT, + NIP44_DECRYPT +} diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt index c9bddb61..e45f496e 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt @@ -2,28 +2,45 @@ package com.greenart7c3.nostrsigner.service import android.content.Intent import com.greenart7c3.nostrsigner.models.IntentData +import com.greenart7c3.nostrsigner.models.SignerType import com.greenart7c3.nostrsigner.service.model.Event import java.net.URLDecoder object IntentUtils { - fun getIntentData(intent: Intent, keyPair: KeyPair): IntentData? { + fun getIntentData(intent: Intent): IntentData? { if (intent.data != null) { - var data = URLDecoder.decode(intent.data?.toString()?.replace("+", "%2b") ?: "", "utf-8").replace("nostrsigner:", "") + val data = URLDecoder.decode(intent.data?.toString()?.replace("+", "%2b") ?: "", "utf-8").replace("nostrsigner:", "") + val type = when (intent.extras?.getString("type")) { + "sign_event" -> SignerType.SIGN_EVENT + "nip04_encrypt" -> SignerType.NIP04_ENCRYPT + "nip04_decrypt" -> SignerType.NIP04_DECRYPT + else -> SignerType.SIGN_EVENT + } val split = data.split(";") var name = "" if (split.isNotEmpty()) { if (split.last().lowercase().contains("name=")) { name = split.last().replace("name=", "") - val newList = split.toList().dropLast(1) - data = newList.joinToString("") } } - var event = Event.fromJson(data) - if (event.pubKey.isEmpty()) { - event = Event.setPubKeyIfEmpty(event, keyPair) - } - return IntentData(event, name) + + return IntentData(data, name, type) } return null } + fun getIntent(data: String, keyPair: KeyPair): Event { + var tempData = data + val split = data.split(";") + if (split.isNotEmpty()) { + if (split.last().lowercase().contains("name=")) { + val newList = split.toList().dropLast(1) + tempData = newList.joinToString("") + } + } + var event = Event.fromJson(tempData) + if (event.pubKey.isEmpty()) { + event = Event.setPubKeyIfEmpty(event, keyPair) + } + return event + } } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt index 327cbe55..1d57413d 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/AccountScreen.kt @@ -27,7 +27,7 @@ fun AccountScreen( LoginPage(accountStateViewModel) } is AccountState.LoggedIn -> { - val intentData = IntentUtils.getIntentData(intent, state.account.keyPair) + val intentData = IntentUtils.getIntentData(intent) MainScreen(state.account, accountStateViewModel, intentData, packageName) } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt index 887ea26f..fc3fdc2e 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt @@ -49,22 +49,22 @@ import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.greenart7c3.nostrsigner.R import com.greenart7c3.nostrsigner.models.Account import com.greenart7c3.nostrsigner.models.IntentData +import com.greenart7c3.nostrsigner.models.SignerType import com.greenart7c3.nostrsigner.models.TimeUtils import com.greenart7c3.nostrsigner.models.toHexKey import com.greenart7c3.nostrsigner.service.CryptoUtils +import com.greenart7c3.nostrsigner.service.IntentUtils import com.greenart7c3.nostrsigner.service.getAppCompatActivity import com.greenart7c3.nostrsigner.service.model.Event import com.greenart7c3.nostrsigner.service.toShortenHex import com.greenart7c3.nostrsigner.ui.components.Drawer import com.greenart7c3.nostrsigner.ui.components.MainAppBar import com.greenart7c3.nostrsigner.ui.theme.ButtonBorder -import com.greenart7c3.nostrsigner.ui.theme.NostrSignerTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import org.json.JSONObject @@ -105,9 +105,10 @@ fun MainScreen(account: Account, accountStateViewModel: AccountStateViewModel, j } } else { json.let { - val event = it.data + val event = IntentUtils.getIntent(it.data, account.keyPair) EventData( + it.type, packageName ?: it.name, event, event.toJson(), @@ -158,6 +159,7 @@ fun MainScreen(account: Account, accountStateViewModel: AccountStateViewModel, j @Composable fun EventData( + type: SignerType, appName: String, event: Event, rawJson: String, @@ -333,26 +335,3 @@ fun EventRow( ) } } - -@SuppressLint("UnusedMaterialScaffoldPaddingParameter") -@Preview(device = "id:Nexus S") -@Composable -fun Preview() { - val event = Event("123", "7579076d9aff0a4cfdefa7e2045f2486c7e5d8bc63bfc6b45397233e1bbfcb19", TimeUtils.now(), 1, listOf(), "This is a test 123 123 123 123 123 123", "") - val data = event.toJson() - - NostrSignerTheme(darkTheme = true) { - Scaffold { - EventData( - "App", - event, - data, - rememberCoroutineScope(), - LocalClipboardManager.current, - LocalContext.current, - { }, - { } - ) - } - } -} diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/previews/EventDataPreview.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/previews/EventDataPreview.kt new file mode 100644 index 00000000..248d1928 --- /dev/null +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/previews/EventDataPreview.kt @@ -0,0 +1,38 @@ +package com.greenart7c3.nostrsigner.ui.previews + +import android.annotation.SuppressLint +import androidx.compose.material.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import com.greenart7c3.nostrsigner.models.SignerType +import com.greenart7c3.nostrsigner.models.TimeUtils +import com.greenart7c3.nostrsigner.service.model.Event +import com.greenart7c3.nostrsigner.ui.EventData +import com.greenart7c3.nostrsigner.ui.theme.NostrSignerTheme + +@SuppressLint("UnusedMaterialScaffoldPaddingParameter") +@Preview(device = "id:Nexus S") +@Composable +fun EventDataPreview() { + val event = Event("123", "7579076d9aff0a4cfdefa7e2045f2486c7e5d8bc63bfc6b45397233e1bbfcb19", TimeUtils.now(), 1, listOf(), "This is a test 123 123 123 123 123 123", "") + val data = event.toJson() + + NostrSignerTheme(darkTheme = true) { + Scaffold { + EventData( + SignerType.SIGN_EVENT, + "App", + event, + data, + rememberCoroutineScope(), + LocalClipboardManager.current, + LocalContext.current, + { }, + { } + ) + } + } +}