aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/dev/msfjarvis/aps/ui/pgp
diff options
context:
space:
mode:
authorHarsh Shandilya <me@msfjarvis.dev>2022-01-09 17:04:16 +0530
committerGitHub <noreply@github.com>2022-01-09 17:04:16 +0530
commit1738879fb3ba1b2c2d0ca7933c861bf99ae32535 (patch)
tree42b339b07e3c45922310afd01e8ce357f99beeb6 /app/src/main/java/dev/msfjarvis/aps/ui/pgp
parent799f1393e49955d05f68b81af26d6cfaf9beadfd (diff)
downloadHardenedPass-1738879fb3ba1b2c2d0ca7933c861bf99ae32535.tar.gz
HardenedPass-1738879fb3ba1b2c2d0ca7933c861bf99ae32535.zip
Integrate PGPainless backend into the UI properly (#1647)
Diffstat (limited to 'app/src/main/java/dev/msfjarvis/aps/ui/pgp')
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/ui/pgp/PGPKeyImportActivity.kt67
1 files changed, 67 insertions, 0 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/ui/pgp/PGPKeyImportActivity.kt b/app/src/main/java/dev/msfjarvis/aps/ui/pgp/PGPKeyImportActivity.kt
new file mode 100644
index 00000000..3cd6930c
--- /dev/null
+++ b/app/src/main/java/dev/msfjarvis/aps/ui/pgp/PGPKeyImportActivity.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+@file:Suppress("BlockingMethodInNonBlockingContext")
+
+package dev.msfjarvis.aps.ui.pgp
+
+import android.os.Bundle
+import androidx.activity.result.contract.ActivityResultContracts.OpenDocument
+import androidx.appcompat.app.AppCompatActivity
+import com.github.michaelbull.result.mapBoth
+import com.github.michaelbull.result.runCatching
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import dagger.hilt.android.AndroidEntryPoint
+import dev.msfjarvis.aps.R
+import dev.msfjarvis.aps.crypto.Key
+import dev.msfjarvis.aps.crypto.KeyUtils.tryGetId
+import dev.msfjarvis.aps.crypto.PGPKeyManager
+import javax.inject.Inject
+import kotlinx.coroutines.runBlocking
+
+@AndroidEntryPoint
+class PGPKeyImportActivity : AppCompatActivity() {
+
+ @Inject lateinit var keyManager: PGPKeyManager
+
+ private val pgpKeyImportAction =
+ registerForActivityResult(OpenDocument()) { uri ->
+ runCatching {
+ if (uri == null) {
+ throw IllegalStateException("Selected URI was null")
+ }
+ val keyInputStream =
+ contentResolver.openInputStream(uri)
+ ?: throw IllegalStateException("Failed to open selected file")
+ val bytes = keyInputStream.readBytes()
+ val (key, error) = runBlocking { keyManager.addKey(Key(bytes)) }
+ if (error != null) throw error
+ key
+ }
+ .mapBoth(
+ { key ->
+ require(key != null) { "Key cannot be null here" }
+ MaterialAlertDialogBuilder(this)
+ .setTitle(getString(R.string.pgp_key_import_succeeded))
+ .setMessage(getString(R.string.pgp_key_import_succeeded_message, tryGetId(key)))
+ .setPositiveButton(android.R.string.ok) { _, _ -> finish() }
+ .setOnCancelListener { finish() }
+ .show()
+ },
+ { throwable ->
+ MaterialAlertDialogBuilder(this)
+ .setTitle(getString(R.string.pgp_key_import_failed))
+ .setMessage(throwable.message)
+ .setPositiveButton(android.R.string.ok) { _, _ -> finish() }
+ .setOnCancelListener { finish() }
+ .show()
+ }
+ )
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ pgpKeyImportAction.launch(arrayOf("*/*"))
+ }
+}