diff options
| author | Harsh Shandilya <msfjarvis@gmail.com> | 2020-08-05 19:02:24 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-05 19:02:24 +0530 |
| commit | 14c44bf584cb7d13ada46b264419efca923ed65c (patch) | |
| tree | b22c8a9a7be7934927ed20fa9b2060c877953082 /app/src/main/java/com/zeapo/pwdstore/utils | |
| parent | 12a83e5c36b82e42dda6a58248e2879fde9c3ac8 (diff) | |
| download | HardenedPass-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')
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:" |
