add support for rejecting the event forever

This commit is contained in:
greenart7c3
2024-01-17 09:12:47 -03:00
parent 1cf5210864
commit 43497f8fca
4 changed files with 93 additions and 29 deletions
@@ -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)
@@ -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)
@@ -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,
@@ -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()
}
)