aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/utils
diff options
context:
space:
mode:
authorHarsh Shandilya <msfjarvis@gmail.com>2020-08-05 19:02:24 +0530
committerGitHub <noreply@github.com>2020-08-05 19:02:24 +0530
commit14c44bf584cb7d13ada46b264419efca923ed65c (patch)
treeb22c8a9a7be7934927ed20fa9b2060c877953082 /app/src/main/java/com/zeapo/pwdstore/utils
parent12a83e5c36b82e42dda6a58248e2879fde9c3ac8 (diff)
downloadHardenedPass-14c44bf584cb7d13ada46b264419efca923ed65c.tar.gz
HardenedPass-14c44bf584cb7d13ada46b264419efca923ed65c.zip
Remove GitAsyncTask and replace with non-blocking coroutines (#865)
Co-authored-by: Fabian Henneke <fabian@henneke.me>
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/utils')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt50
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/utils/FragmentViewBindingDelegate.kt1
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/utils/Result.kt16
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt1
4 files changed, 46 insertions, 22 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt b/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt
index b274b47d..6ce45fe5 100644
--- a/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/utils/Extensions.kt
@@ -14,20 +14,18 @@ import android.view.View
import android.view.autofill.AutofillManager
import android.view.inputmethod.InputMethodManager
import androidx.annotation.IdRes
-import androidx.annotation.MainThread
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AlertDialog
-import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.getSystemService
+import androidx.fragment.app.FragmentActivity
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
import com.github.ajalt.timberkt.d
import com.google.android.material.snackbar.Snackbar
-import com.zeapo.pwdstore.git.GitAsyncTask
-import com.zeapo.pwdstore.git.GitOperation
+import com.zeapo.pwdstore.git.GitCommandExecutor
+import com.zeapo.pwdstore.git.operation.GitOperation
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepositoryDirectory
import java.io.File
-import org.eclipse.jgit.api.Git
const val OPENPGP_PROVIDER = "org.sufficientlysecure.keychain"
@@ -51,12 +49,14 @@ fun CharArray.clear() {
val Context.clipboard get() = getSystemService<ClipboardManager>()
-fun AppCompatActivity.snackbar(
+fun FragmentActivity.snackbar(
view: View = findViewById(android.R.id.content),
message: String,
- length: Int = Snackbar.LENGTH_SHORT
-) {
- Snackbar.make(view, message, length).show()
+ length: Int = Snackbar.LENGTH_SHORT,
+): Snackbar {
+ val snackbar = Snackbar.make(view, message, length)
+ snackbar.show()
+ return snackbar
}
fun File.listFilesRecursively() = walkTopDown().filter { !it.isDirectory }.toList()
@@ -97,24 +97,33 @@ fun Context.getEncryptedPrefs(fileName: String): SharedPreferences {
)
}
-@MainThread
-fun AppCompatActivity.commitChange(message: String, finishWithResultOnEnd: Intent? = null) {
+suspend fun FragmentActivity.commitChange(
+ message: String,
+ finishWithResultOnEnd: Intent? = null,
+ finishActivityOnEnd: Boolean = true,
+) {
if (!PasswordRepository.isGitRepo()) {
if (finishWithResultOnEnd != null) {
- setResult(AppCompatActivity.RESULT_OK, finishWithResultOnEnd)
+ setResult(FragmentActivity.RESULT_OK, finishWithResultOnEnd)
finish()
}
return
}
object : GitOperation(getRepositoryDirectory(this@commitChange), this@commitChange) {
- override fun execute() {
+ override val commands = arrayOf(
+ git.add().addFilepattern("."),
+ git.status(),
+ git.commit().setAll(true).setMessage(message),
+ )
+
+ override suspend fun execute() {
d { "Comitting with message: '$message'" }
- val git = Git(repository)
- val task = GitAsyncTask(this@commitChange, this, finishWithResultOnEnd, silentlyExecute = true)
- task.execute(
- git.add().addFilepattern("."),
- git.commit().setAll(true).setMessage(message)
- )
+ GitCommandExecutor(
+ this@commitChange,
+ this,
+ finishWithResultOnEnd,
+ finishActivityOnEnd,
+ ).execute()
}
}.execute()
}
@@ -124,7 +133,6 @@ fun AppCompatActivity.commitChange(message: String, finishWithResultOnEnd: Inten
* view whose id is [id]. Solution based on a StackOverflow
* answer: https://stackoverflow.com/a/13056259/297261
*/
-@MainThread
fun <T : View> AlertDialog.requestInputFocusOnView(@IdRes id: Int) {
setOnShowListener {
findViewById<T>(id)?.apply {
@@ -143,6 +151,6 @@ val Context.autofillManager: AutofillManager?
@RequiresApi(Build.VERSION_CODES.O)
get() = getSystemService()
-fun AppCompatActivity.isInsideRepository(file: File): Boolean {
+fun FragmentActivity.isInsideRepository(file: File): Boolean {
return file.canonicalPath.contains(getRepositoryDirectory(this).canonicalPath)
}
diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/FragmentViewBindingDelegate.kt b/app/src/main/java/com/zeapo/pwdstore/utils/FragmentViewBindingDelegate.kt
index 35eb7ae3..55d654e0 100644
--- a/app/src/main/java/com/zeapo/pwdstore/utils/FragmentViewBindingDelegate.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/utils/FragmentViewBindingDelegate.kt
@@ -13,7 +13,6 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.observe
import androidx.viewbinding.ViewBinding
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/Result.kt b/app/src/main/java/com/zeapo/pwdstore/utils/Result.kt
new file mode 100644
index 00000000..d152cba6
--- /dev/null
+++ b/app/src/main/java/com/zeapo/pwdstore/utils/Result.kt
@@ -0,0 +1,16 @@
+/*
+ * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+package com.zeapo.pwdstore.utils
+
+/**
+ * Emulates the Rust Result enum but without returning a value in the [Ok] case.
+ * https://doc.rust-lang.org/std/result/enum.Result.html
+ */
+sealed class Result {
+
+ object Ok : Result()
+ data class Err(val err: Exception) : Result()
+}
diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt b/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt
index aab72d38..23101a13 100644
--- a/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/utils/UriTotpFinder.kt
@@ -57,6 +57,7 @@ class UriTotpFinder : TotpFinder {
}
companion object {
+
val TOTP_FIELDS = arrayOf(
"otpauth://totp",
"totp:"