Convert PasswordRepository to an object

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-10-19 00:00:52 +05:30
parent 95d53e495c
commit 30c8c27770
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
4 changed files with 192 additions and 200 deletions

View file

@ -50,9 +50,6 @@ import com.zeapo.pwdstore.ui.dialogs.FolderCreationDialogFragment
import com.zeapo.pwdstore.ui.onboarding.activity.OnboardingActivity import com.zeapo.pwdstore.ui.onboarding.activity.OnboardingActivity
import com.zeapo.pwdstore.utils.PasswordItem import com.zeapo.pwdstore.utils.PasswordItem
import com.zeapo.pwdstore.utils.PasswordRepository import com.zeapo.pwdstore.utils.PasswordRepository
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepository
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepositoryDirectory
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.initialize
import com.zeapo.pwdstore.utils.PreferenceKeys import com.zeapo.pwdstore.utils.PreferenceKeys
import com.zeapo.pwdstore.utils.base64 import com.zeapo.pwdstore.utils.base64
import com.zeapo.pwdstore.utils.commitChange import com.zeapo.pwdstore.utils.commitChange
@ -101,7 +98,7 @@ class PasswordStore : BaseGitActivity() {
val intentData = result.data ?: return@registerForActivityResult val intentData = result.data ?: return@registerForActivityResult
val filesToMove = requireNotNull(intentData.getStringArrayExtra("Files")) val filesToMove = requireNotNull(intentData.getStringArrayExtra("Files"))
val target = File(requireNotNull(intentData.getStringExtra("SELECTED_FOLDER_PATH"))) val target = File(requireNotNull(intentData.getStringExtra("SELECTED_FOLDER_PATH")))
val repositoryPath = getRepositoryDirectory().absolutePath val repositoryPath = PasswordRepository.getRepositoryDirectory().absolutePath
if (!target.isDirectory) { if (!target.isDirectory) {
e { "Tried moving passwords to a non-existing folder." } e { "Tried moving passwords to a non-existing folder." }
return@registerForActivityResult return@registerForActivityResult
@ -158,7 +155,7 @@ class PasswordStore : BaseGitActivity() {
} }
} }
else -> { else -> {
val repoDir = getRepositoryDirectory().absolutePath val repoDir = PasswordRepository.getRepositoryDirectory().absolutePath
val relativePath = getRelativePath("${target.absolutePath}/", repoDir) val relativePath = getRelativePath("${target.absolutePath}/", repoDir)
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
commitChange( commitChange(
@ -204,7 +201,7 @@ class PasswordStore : BaseGitActivity() {
setContentView(R.layout.activity_pwdstore) setContentView(R.layout.activity_pwdstore)
model.currentDir.observe(this) { dir -> model.currentDir.observe(this) { dir ->
val basePath = getRepositoryDirectory().absoluteFile val basePath = PasswordRepository.getRepositoryDirectory().absoluteFile
supportActionBar!!.apply { supportActionBar!!.apply {
if (dir != basePath) if (dir != basePath)
title = dir.name title = dir.name
@ -384,11 +381,11 @@ class PasswordStore : BaseGitActivity() {
} }
private fun checkLocalRepository() { private fun checkLocalRepository() {
val repo = initialize() val repo = PasswordRepository.initialize()
if (repo == null) { if (repo == null) {
directorySelectAction.launch(UserPreference.createDirectorySelectionIntent(this)) directorySelectAction.launch(UserPreference.createDirectorySelectionIntent(this))
} else { } else {
checkLocalRepository(getRepositoryDirectory()) checkLocalRepository(PasswordRepository.getRepositoryDirectory())
} }
} }
@ -400,7 +397,7 @@ class PasswordStore : BaseGitActivity() {
settings.getBoolean(PreferenceKeys.REPO_CHANGED, false)) { settings.getBoolean(PreferenceKeys.REPO_CHANGED, false)) {
settings.edit { putBoolean(PreferenceKeys.REPO_CHANGED, false) } settings.edit { putBoolean(PreferenceKeys.REPO_CHANGED, false) }
val args = Bundle() val args = Bundle()
args.putString(REQUEST_ARG_PATH, getRepositoryDirectory().absolutePath) args.putString(REQUEST_ARG_PATH, PasswordRepository.getRepositoryDirectory().absolutePath)
// if the activity was started from the autofill settings, the // if the activity was started from the autofill settings, the
// intent is to match a clicked pwd with app. pass this to fragment // intent is to match a clicked pwd with app. pass this to fragment
@ -426,8 +423,8 @@ class PasswordStore : BaseGitActivity() {
} }
private fun getLastChangedTimestamp(fullPath: String): Long { private fun getLastChangedTimestamp(fullPath: String): Long {
val repoPath = getRepositoryDirectory() val repoPath = PasswordRepository.getRepositoryDirectory()
val repository = getRepository(repoPath) val repository = PasswordRepository.getRepository(repoPath)
if (repository == null) { if (repository == null) {
d { "getLastChangedTimestamp: No git repository" } d { "getLastChangedTimestamp: No git repository" }
return File(fullPath).lastModified() return File(fullPath).lastModified()
@ -450,7 +447,7 @@ class PasswordStore : BaseGitActivity() {
for (intent in arrayOf(decryptIntent, authDecryptIntent)) { for (intent in arrayOf(decryptIntent, authDecryptIntent)) {
intent.putExtra("NAME", item.toString()) intent.putExtra("NAME", item.toString())
intent.putExtra("FILE_PATH", item.file.absolutePath) intent.putExtra("FILE_PATH", item.file.absolutePath)
intent.putExtra("REPO_PATH", getRepositoryDirectory().absolutePath) intent.putExtra("REPO_PATH", PasswordRepository.getRepositoryDirectory().absolutePath)
intent.putExtra("LAST_CHANGED_TIMESTAMP", getLastChangedTimestamp(item.file.absolutePath)) intent.putExtra("LAST_CHANGED_TIMESTAMP", getLastChangedTimestamp(item.file.absolutePath))
} }
// Needs an action to be a shortcut intent // Needs an action to be a shortcut intent
@ -494,7 +491,7 @@ class PasswordStore : BaseGitActivity() {
i { "Adding file to : ${currentDir.absolutePath}" } i { "Adding file to : ${currentDir.absolutePath}" }
val intent = Intent(this, PasswordCreationActivity::class.java) val intent = Intent(this, PasswordCreationActivity::class.java)
intent.putExtra("FILE_PATH", currentDir.absolutePath) intent.putExtra("FILE_PATH", currentDir.absolutePath)
intent.putExtra("REPO_PATH", getRepositoryDirectory().absolutePath) intent.putExtra("REPO_PATH", PasswordRepository.getRepositoryDirectory().absolutePath)
listRefreshAction.launch(intent) listRefreshAction.launch(intent)
} }
@ -530,7 +527,7 @@ class PasswordStore : BaseGitActivity() {
refreshPasswordList() refreshPasswordList()
AutofillMatcher.updateMatches(applicationContext, delete = filesToDelete) AutofillMatcher.updateMatches(applicationContext, delete = filesToDelete)
val fmt = selectedItems.joinToString(separator = ", ") { item -> val fmt = selectedItems.joinToString(separator = ", ") { item ->
item.file.toRelativeString(getRepositoryDirectory()) item.file.toRelativeString(PasswordRepository.getRepositoryDirectory())
} }
lifecycleScope.launch { lifecycleScope.launch {
commitChange( commitChange(
@ -644,7 +641,7 @@ class PasswordStore : BaseGitActivity() {
} }
private val currentDir: File private val currentDir: File
get() = getPasswordFragment()?.currentDir ?: getRepositoryDirectory() get() = getPasswordFragment()?.currentDir ?: PasswordRepository.getRepositoryDirectory()
private suspend fun moveFile(source: File, destinationFile: File) { private suspend fun moveFile(source: File, destinationFile: File) {
val sourceDestinationMap = if (source.isDirectory) { val sourceDestinationMap = if (source.isDirectory) {
@ -674,7 +671,7 @@ class PasswordStore : BaseGitActivity() {
fun matchPasswordWithApp(item: PasswordItem) { fun matchPasswordWithApp(item: PasswordItem) {
val path = item.file val path = item.file
.absolutePath .absolutePath
.replace(getRepositoryDirectory().toString() + "/", "") .replace(PasswordRepository.getRepositoryDirectory().toString() + "/", "")
.replace(".gpg", "") .replace(".gpg", "")
val data = Intent() val data = Intent()
data.putExtra("path", path) data.putExtra("path", path)

View file

@ -22,7 +22,6 @@ import com.zeapo.pwdstore.R
import com.zeapo.pwdstore.crypto.BasePgpActivity import com.zeapo.pwdstore.crypto.BasePgpActivity
import com.zeapo.pwdstore.crypto.GetKeyIdsActivity import com.zeapo.pwdstore.crypto.GetKeyIdsActivity
import com.zeapo.pwdstore.utils.PasswordRepository import com.zeapo.pwdstore.utils.PasswordRepository
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepositoryDirectory
import com.zeapo.pwdstore.utils.commitChange import com.zeapo.pwdstore.utils.commitChange
import com.zeapo.pwdstore.utils.requestInputFocusOnView import com.zeapo.pwdstore.utils.requestInputFocusOnView
import java.io.File import java.io.File
@ -41,7 +40,7 @@ class FolderCreationDialogFragment : DialogFragment() {
val repo = PasswordRepository.getRepository(null) val repo = PasswordRepository.getRepository(null)
if (repo != null) { if (repo != null) {
lifecycleScope.launch { lifecycleScope.launch {
val repoPath = getRepositoryDirectory().absolutePath val repoPath = PasswordRepository.getRepositoryDirectory().absolutePath
requireActivity().commitChange( requireActivity().commitChange(
getString( getString(
R.string.git_commit_gpg_id, R.string.git_commit_gpg_id,

View file

@ -6,7 +6,6 @@ package com.zeapo.pwdstore.utils
import com.github.michaelbull.result.getOrElse import com.github.michaelbull.result.getOrElse
import com.github.michaelbull.result.runCatching import com.github.michaelbull.result.runCatching
import com.zeapo.pwdstore.utils.PasswordRepository.Companion.getRepositoryDirectory
import java.io.File import java.io.File
import java.util.Date import java.util.Date
import org.eclipse.jgit.lib.ObjectId import org.eclipse.jgit.lib.ObjectId
@ -50,10 +49,10 @@ fun File.contains(other: File): Boolean {
/** /**
* Checks if this [File] is in the password repository directory as given * Checks if this [File] is in the password repository directory as given
* by [getRepositoryDirectory] * by [PasswordRepository.getRepositoryDirectory]
*/ */
fun File.isInsideRepository(): Boolean { fun File.isInsideRepository(): Boolean {
return canonicalPath.contains(getRepositoryDirectory().canonicalPath) return canonicalPath.contains(PasswordRepository.getRepositoryDirectory().canonicalPath)
} }
/** /**

View file

@ -7,9 +7,9 @@ package com.zeapo.pwdstore.utils
import android.os.Build import android.os.Build
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.content.edit import androidx.core.content.edit
import com.github.michaelbull.result.runCatching
import com.github.michaelbull.result.getOrElse import com.github.michaelbull.result.getOrElse
import com.github.michaelbull.result.onFailure import com.github.michaelbull.result.onFailure
import com.github.michaelbull.result.runCatching
import com.zeapo.pwdstore.Application import com.zeapo.pwdstore.Application
import java.io.File import java.io.File
import java.io.FileFilter import java.io.FileFilter
@ -24,7 +24,7 @@ import org.eclipse.jgit.transport.URIish
import org.eclipse.jgit.util.FS import org.eclipse.jgit.util.FS
import org.eclipse.jgit.util.FS_POSIX_Java6 import org.eclipse.jgit.util.FS_POSIX_Java6
open class PasswordRepository protected constructor() { object PasswordRepository {
@RequiresApi(Build.VERSION_CODES.O) @RequiresApi(Build.VERSION_CODES.O)
private class FS_POSIX_Java6_with_optional_symlinks : FS_POSIX_Java6() { private class FS_POSIX_Java6_with_optional_symlinks : FS_POSIX_Java6() {
@ -51,8 +51,6 @@ open class PasswordRepository protected constructor() {
} }
} }
companion object {
private var repository: Repository? = null private var repository: Repository? = null
private val settings by lazy(LazyThreadSafetyMode.NONE) { Application.instance.sharedPrefs } private val settings by lazy(LazyThreadSafetyMode.NONE) { Application.instance.sharedPrefs }
private val filesDir private val filesDir
@ -238,4 +236,3 @@ open class PasswordRepository protected constructor() {
return passwordList return passwordList
} }
} }
}