From fe9d2ef1e620df956318c83712d789934563de2a Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Wed, 25 Oct 2023 18:44:02 +0200
Subject: [PATCH] feat: Add gpg key section to AboutScreen
---
.../myzel394/alibi/ui/screens/AboutScreen.kt | 76 ++++++++++++++++++-
app/src/main/res/values/strings.xml | 2 +
2 files changed, 75 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
index f397944..3e87de0 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
@@ -1,5 +1,8 @@
package app.myzel394.alibi.ui.screens
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -11,7 +14,9 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.CurrencyBitcoin
@@ -22,7 +27,10 @@ import androidx.compose.material.icons.filled.CurrencyRuble
import androidx.compose.material.icons.filled.CurrencyRupee
import androidx.compose.material.icons.filled.CurrencyYen
import androidx.compose.material.icons.filled.CurrencyYuan
+import androidx.compose.material.icons.filled.Key
import androidx.compose.material.icons.filled.OpenInNew
+import androidx.compose.material.icons.filled.Shield
+import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
@@ -43,6 +51,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -57,6 +66,21 @@ import kotlin.random.Random
const val GITHUB_URL = "https://github.com/Myzel394/Alibi"
const val CROWDIN_URL = "https://crowdin.com/project/alibi"
+const val PUBLIC_KEY = """-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZTfvnhYJKwYBBAHaRw8BAQdAi2AiLsTaBoLhnQtY5vi3xBU/H428wbNfBSe+
+2dhz3r60Jk15emVsMzk0IDxnaXRodWIuN2Eyb3BAc2ltcGxlbG9naW4uY28+iJkE
+ExYKAEEWIQR9BS8nNHwqrNgV0B3NE0dCwel5WQUCZTfvngIbAwUJEswDAAULCQgH
+AgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDNE0dCwel5WcS8AQCf9g6eEaut1suW
+l6jCLIg3b1nWLckmLJaonM6PruUtigEAmVnFOxMpOZEIcILT8CD2Riy+IVN9gTNH
+qOHnaFsu8AK4OARlN++eEgorBgEEAZdVAQUBAQdAe4ffDtRundKH9kam746i2TBu
+P9sfb3QVi5QqfK+bek8DAQgHiH4EGBYKACYWIQR9BS8nNHwqrNgV0B3NE0dCwel5
+WQUCZTfvngIbDAUJEswDAAAKCRDNE0dCwel5WWwSAQDj4ZAl6bSqwbcptEMYQaPM
+MMhMafm446MjkhQioeXw+wEAzA8mS6RBx7IZvu1dirmFHXOEYJclwjyQhNs4uEjq
+/Ak=
+=ICHe
+-----END PGP PUBLIC KEY BLOCK-----"""
+const val PUBLIC_KEY_FINGERPRINT = "7D05 2F27 347C 2AAC D815 D01D CD13 4742 C1E9 7959"
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -90,9 +114,9 @@ fun AboutScreen(
) { padding ->
Column(
modifier = Modifier
- .fillMaxSize()
.padding(padding)
- .padding(horizontal = 32.dp),
+ .padding(horizontal = 32.dp)
+ .verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(48.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
@@ -126,7 +150,7 @@ fun AboutScreen(
)
}
Column(
- verticalArrangement = Arrangement.spacedBy(24.dp),
+ verticalArrangement = Arrangement.spacedBy(24.dp)
) {
Text(
stringResource(R.string.ui_about_contribute_title),
@@ -248,6 +272,52 @@ fun AboutScreen(
fontWeight = FontWeight.Bold,
)
}
+
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .background(
+ MaterialTheme.colorScheme.primaryContainer
+ )
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ ) {
+ Icon(
+ Icons.Default.Key,
+ contentDescription = null,
+ modifier = Modifier.size(48.dp)
+ )
+
+ Text(
+ stringResource(R.string.ui_about_gpg_key_hint),
+ style = MaterialTheme.typography.bodyMedium,
+ )
+
+ val clipboardManager =
+ LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ Text(
+ PUBLIC_KEY_FINGERPRINT,
+ modifier = Modifier
+ .clip(MaterialTheme.shapes.small)
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ )
+ .padding(8.dp),
+ )
+ Button(
+ onClick = {
+ val clip = ClipData.newPlainText("text", PUBLIC_KEY)
+ clipboardManager.setPrimaryClip(clip)
+ },
+ colors = ButtonDefaults.textButtonColors(),
+ modifier = Modifier
+ .fillMaxWidth()
+ ) {
+ Text(stringResource(R.string.ui_about_gpg_key_copy))
+ }
+ }
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8976f4e..6d76829 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -95,4 +95,6 @@
Open link in browser: %s
Translate Alibi into your language
Make a donation
+ You can copy my GPG key here. This key only exists once and I can use it to prove to you that I\'m really who I am. Please save it now so that you don\'t fall for a phishing attack later on.
+ Copy GPG Key
\ No newline at end of file