diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt b/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt index d3925e07..5225c178 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt @@ -45,8 +45,19 @@ class SignerProvider : ContentProvider() { LocalPreferences.loadFromEncryptedStorage(projection[2]) ?: return null val event = Event.fromJson(json) val key = "$packageName-SIGN_EVENT-${event.kind}" - val isRemembered = account.savedApps[key] ?: false - if (!isRemembered) return null + val currentSelection = selection ?: "0" + if (currentSelection == "1") { + val isRemembered = account.savedApps[key] ?: return null + if (!isRemembered) { + val cursor = MatrixCursor(arrayOf("rejected")).also { + it.addRow(arrayOf("true")) + } + return cursor + } + } else { + val isRemembered = account.savedApps[key] ?: false + if (!isRemembered) return null + } var cursor: MatrixCursor? = null @@ -76,8 +87,19 @@ class SignerProvider : ContentProvider() { val key = "$packageName-${uri.toString().replace("content://$appId.", "")}" val pubkey = projection[1] val account = LocalPreferences.loadFromEncryptedStorage(projection[2]) ?: return null - val isRemembered = account.savedApps[key] ?: false - if (!isRemembered) return null + val currentSelection = selection ?: "0" + if (currentSelection == "1") { + val isRemembered = account.savedApps[key] ?: return null + if (!isRemembered) { + val cursor = MatrixCursor(arrayOf("rejected")).also { + it.addRow(arrayOf("true")) + } + return cursor + } + } else { + val isRemembered = account.savedApps[key] ?: false + if (!isRemembered) return null + } val type = when (stringType) { "NIP04_DECRYPT" -> SignerType.NIP04_DECRYPT @@ -114,8 +136,19 @@ class SignerProvider : ContentProvider() { val packageName = callingPackage ?: return null val key = "$packageName-GET_PUBLIC_KEY" val account = LocalPreferences.loadFromEncryptedStorage() ?: return null - val isRemembered = account.savedApps[key] ?: false - if (!isRemembered) return null + val currentSelection = selection ?: "0" + if (currentSelection == "1") { + val isRemembered = account.savedApps[key] ?: return null + if (!isRemembered) { + val cursor = MatrixCursor(arrayOf("rejected")).also { + it.addRow(arrayOf("true")) + } + return cursor + } + } else { + val isRemembered = account.savedApps[key] ?: false + if (!isRemembered) return null + } LocalPreferences.saveToEncryptedStorage(account) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/EditPermission.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/EditPermission.kt index 4aeb8b74..bfd9cee7 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/EditPermission.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/EditPermission.kt @@ -10,16 +10,16 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Check +import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Delete import androidx.compose.material3.Button import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -45,13 +45,17 @@ fun EditPermission( navController: NavController ) { val localAccount = LocalPreferences.loadFromEncryptedStorage(account.keyPair.pubKey.toNpub())!! - var permissions by remember { - mutableStateOf( - localAccount.savedApps.keys.filter { item -> item.startsWith(selectedPackage) }.map { item -> - item.replace("$selectedPackage-", "") - }.sorted() + val permissions = remember { + val pairsList = buildList { + for (key in localAccount.savedApps.keys.toList().sorted()) { + add(Pair(key, localAccount.savedApps[key])) + } + } + mutableStateMapOf( + *pairsList.toTypedArray() ) } + val scope = rememberCoroutineScope() Column( @@ -69,8 +73,8 @@ fun EditPermission( LazyColumn( Modifier.weight(1f) ) { - itemsIndexed(permissions, { index, _ -> index }) { index, permission -> - val message = when (permission) { + itemsIndexed(permissions.keys.toList().sorted(), { index, _ -> index }) { _, permission -> + val message = when (permission.replace("$selectedPackage-", "")) { "NIP04_DECRYPT" -> stringResource(R.string.decrypt_nip_04_data) "NIP44_DECRYPT" -> stringResource(R.string.decrypt_nip_44_data) "NIP44_ENCRYPT" -> stringResource(R.string.encrypt_nip_44_data) @@ -84,6 +88,18 @@ fun EditPermission( .padding(vertical = 15.dp, horizontal = 25.dp) .fillMaxWidth() ) { + val localPermission = permissions[permission]!! + Icon( + if (localPermission) Icons.Default.Check else Icons.Default.Close, + null, + modifier = Modifier + .size(22.dp) + .padding(end = 4.dp) + .clickable { + permissions[permission] = !permissions[permission]!! + }, + tint = if (localPermission) Color.Green else Color.Red + ) Row( modifier = Modifier .weight(1f), @@ -100,8 +116,7 @@ fun EditPermission( modifier = Modifier .size(22.dp) .clickable { - permissions = - permissions.filterIndexed { i, _ -> i != index } + permissions.remove(permission) }, tint = Color.Red ) @@ -126,7 +141,7 @@ fun EditPermission( scope.launch { val localSaved = localAccount.savedApps.filter { !it.key.contains(selectedPackage) }.toMutableMap() permissions.forEach { - localSaved["$selectedPackage-$it"] = true + localSaved[it.key] = it.value!! } localAccount.savedApps = localSaved LocalPreferences.saveToEncryptedStorage(localAccount) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt index 14bf8a05..ea1bd41d 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/MultiEventHomeScreen.kt @@ -259,8 +259,7 @@ fun MultiEventHomeScreen( } val key = "$packageName-${intentData.type}-${localEvent.kind}" if (intentData.rememberMyChoice.value) { - localAccount.savedApps[key] = - intentData.rememberMyChoice.value + localAccount.savedApps[key] = intentData.rememberMyChoice.value LocalPreferences.saveToEncryptedStorage( localAccount ) @@ -281,11 +280,12 @@ fun MultiEventHomeScreen( } } else { val key = "$packageName-${intentData.type}" - localAccount.savedApps[key] = - intentData.rememberMyChoice.value - LocalPreferences.saveToEncryptedStorage( - localAccount - ) + if (intentData.rememberMyChoice.value) { + localAccount.savedApps[key] = intentData.rememberMyChoice.value + LocalPreferences.saveToEncryptedStorage( + localAccount + ) + } val signature = AmberUtils.encryptOrDecryptData( intentData.data, intentData.type, diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt index 188bcdca..aefaf1c4 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/components/SingleEventHomeScreen.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext +import com.greenart7c3.nostrsigner.LocalPreferences import com.greenart7c3.nostrsigner.R import com.greenart7c3.nostrsigner.models.Account import com.greenart7c3.nostrsigner.models.IntentData @@ -38,7 +39,7 @@ fun SingleEventHomeScreen( when (intentData.type) { SignerType.GET_PUBLIC_KEY -> { val remember = remember { - mutableStateOf(account.savedApps[key] ?: false) + mutableStateOf(account.savedApps[key] != null) } LoginWithPubKey( appName, @@ -63,6 +64,11 @@ fun SingleEventHomeScreen( return@LoginWithPubKey }, { + if (remember.value) { + account.savedApps[key] = false + } + + LocalPreferences.saveToEncryptedStorage(account) context.getAppCompatActivity()?.finish() } ) @@ -70,7 +76,7 @@ fun SingleEventHomeScreen( SignerType.NIP04_DECRYPT, SignerType.NIP04_ENCRYPT, SignerType.NIP44_ENCRYPT, SignerType.NIP44_DECRYPT, SignerType.DECRYPT_ZAP_EVENT -> { val remember = remember { - mutableStateOf(account.savedApps[key] ?: false) + mutableStateOf(account.savedApps[key] != null) } val shouldRunOnAccept = account.savedApps[key] ?: false EncryptDecryptData( @@ -164,6 +170,11 @@ fun SingleEventHomeScreen( } }, { + if (remember.value) { + account.savedApps[key] = false + } + + LocalPreferences.saveToEncryptedStorage(account) context.getAppCompatActivity()?.finish() }, { @@ -186,7 +197,7 @@ fun SingleEventHomeScreen( val event = IntentUtils.getIntent(intentData.data, account.keyPair) key = "$packageName-${intentData.type}-${event.kind}" val remember = remember { - mutableStateOf(account.savedApps[key] ?: false) + mutableStateOf(account.savedApps[key] != null) } val shouldRunOnAccept = account.savedApps[key] ?: false EventData( @@ -238,6 +249,11 @@ fun SingleEventHomeScreen( } }, { + if (remember.value) { + account.savedApps[key] = false + } + + LocalPreferences.saveToEncryptedStorage(account) context.getAppCompatActivity()?.finish() } )