From c3f8de99be1f81958a1d7a7546f948930b38a322 Mon Sep 17 00:00:00 2001 From: Aditya Wasan Date: Sat, 22 May 2021 17:25:43 +0530 Subject: app: refactor GitSettings and ProxyUtils and inject them using hilt Signed-off-by: Aditya Wasan --- .../dev/msfjarvis/aps/util/settings/GitSettings.kt | 51 +++++++++------------- .../dev/msfjarvis/aps/util/settings/Migrations.kt | 21 ++++----- 2 files changed, 29 insertions(+), 43 deletions(-) (limited to 'app/src/main/java/dev/msfjarvis/aps/util/settings') diff --git a/app/src/main/java/dev/msfjarvis/aps/util/settings/GitSettings.kt b/app/src/main/java/dev/msfjarvis/aps/util/settings/GitSettings.kt index d3c85fa7..0d580142 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/settings/GitSettings.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/settings/GitSettings.kt @@ -4,16 +4,19 @@ */ package dev.msfjarvis.aps.util.settings +import android.content.SharedPreferences import androidx.core.content.edit import com.github.michaelbull.result.getOrElse import com.github.michaelbull.result.runCatching -import dev.msfjarvis.aps.Application import dev.msfjarvis.aps.data.repo.PasswordRepository -import dev.msfjarvis.aps.util.extensions.getEncryptedGitPrefs -import dev.msfjarvis.aps.util.extensions.getEncryptedProxyPrefs +import dev.msfjarvis.aps.injection.context.FilesDirPath +import dev.msfjarvis.aps.injection.prefs.GitPreferences +import dev.msfjarvis.aps.injection.prefs.ProxyPreferences +import dev.msfjarvis.aps.injection.prefs.SettingsPreferences import dev.msfjarvis.aps.util.extensions.getString -import dev.msfjarvis.aps.util.extensions.sharedPrefs import java.io.File +import javax.inject.Inject +import javax.inject.Singleton import org.eclipse.jgit.transport.URIish enum class Protocol(val pref: String) { @@ -48,29 +51,22 @@ enum class AuthMode(val pref: String) { } } -object GitSettings { +@Singleton +class GitSettings @Inject constructor( + @SettingsPreferences private val settings: SharedPreferences, + @GitPreferences private val encryptedSettings: SharedPreferences, + @ProxyPreferences private val proxySettings: SharedPreferences, + @FilesDirPath private val filesDirPath: String, +) { - private const val DEFAULT_BRANCH = "master" - - private val settings by lazy(LazyThreadSafetyMode.PUBLICATION) { - Application.instance.sharedPrefs - } - private val encryptedSettings by lazy(LazyThreadSafetyMode.PUBLICATION) { - Application.instance.getEncryptedGitPrefs() - } - private val proxySettings by lazy(LazyThreadSafetyMode.PUBLICATION) { - Application.instance.getEncryptedProxyPrefs() - } private val hostKeyPath by lazy(LazyThreadSafetyMode.NONE) { - "${Application.instance.filesDir}/.host_key" + "$filesDirPath/.host_key" } - var authMode get() = AuthMode.fromString(settings.getString(PreferenceKeys.GIT_REMOTE_AUTH)) private set(value) { settings.edit { putString(PreferenceKeys.GIT_REMOTE_AUTH, value.pref) } } - var url get() = settings.getString(PreferenceKeys.GIT_REMOTE_URL) private set(value) { @@ -84,55 +80,46 @@ object GitSettings { encryptedSettings.edit { remove(PreferenceKeys.HTTPS_PASSWORD) } clearSavedHostKey() } - var authorName get() = settings.getString(PreferenceKeys.GIT_CONFIG_AUTHOR_NAME) ?: "" set(value) { settings.edit { putString(PreferenceKeys.GIT_CONFIG_AUTHOR_NAME, value) } } - var authorEmail get() = settings.getString(PreferenceKeys.GIT_CONFIG_AUTHOR_EMAIL) ?: "" set(value) { settings.edit { putString(PreferenceKeys.GIT_CONFIG_AUTHOR_EMAIL, value) } } - var branch get() = settings.getString(PreferenceKeys.GIT_BRANCH_NAME) ?: DEFAULT_BRANCH private set(value) { settings.edit { putString(PreferenceKeys.GIT_BRANCH_NAME, value) } } - var useMultiplexing get() = settings.getBoolean(PreferenceKeys.GIT_REMOTE_USE_MULTIPLEXING, true) set(value) { settings.edit { putBoolean(PreferenceKeys.GIT_REMOTE_USE_MULTIPLEXING, value) } } - var proxyHost get() = proxySettings.getString(PreferenceKeys.PROXY_HOST) set(value) { proxySettings.edit { putString(PreferenceKeys.PROXY_HOST, value) } } - var proxyPort get() = proxySettings.getInt(PreferenceKeys.PROXY_PORT, -1) set(value) { proxySettings.edit { putInt(PreferenceKeys.PROXY_PORT, value) } } - var proxyUsername get() = settings.getString(PreferenceKeys.PROXY_USERNAME) set(value) { proxySettings.edit { putString(PreferenceKeys.PROXY_USERNAME, value) } } - var proxyPassword get() = proxySettings.getString(PreferenceKeys.PROXY_PASSWORD) set(value) { proxySettings.edit { putString(PreferenceKeys.PROXY_PASSWORD, value) } } - var rebaseOnPull get() = settings.getBoolean(PreferenceKeys.REBASE_ON_PULL, true) set(value) { @@ -141,8 +128,7 @@ object GitSettings { sealed class UpdateConnectionSettingsResult { class MissingUsername(val newProtocol: Protocol) : UpdateConnectionSettingsResult() - class AuthModeMismatch(val newProtocol: Protocol, val validModes: List) : - UpdateConnectionSettingsResult() + class AuthModeMismatch(val newProtocol: Protocol, val validModes: List) : UpdateConnectionSettingsResult() object Valid : UpdateConnectionSettingsResult() object FailedToParseUrl : UpdateConnectionSettingsResult() } @@ -164,7 +150,6 @@ object GitSettings { } if (newAuthMode != AuthMode.None && parsedUrl.user.isNullOrBlank()) return UpdateConnectionSettingsResult.MissingUsername(newProtocol) - val validHttpsAuth = listOf(AuthMode.None, AuthMode.Password) val validSshAuth = listOf(AuthMode.OpenKeychain, AuthMode.Password, AuthMode.SshKey) when { @@ -189,4 +174,8 @@ object GitSettings { /** Returns true if a host key was previously saved */ fun hasSavedHostKey(): Boolean = File(hostKeyPath).exists() + + companion object { + private const val DEFAULT_BRANCH = "master" + } } diff --git a/app/src/main/java/dev/msfjarvis/aps/util/settings/Migrations.kt b/app/src/main/java/dev/msfjarvis/aps/util/settings/Migrations.kt index b9333617..b24914d0 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/settings/Migrations.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/settings/Migrations.kt @@ -6,7 +6,6 @@ package dev.msfjarvis.aps.util.settings -import android.content.Context import android.content.SharedPreferences import androidx.core.content.edit import com.github.ajalt.timberkt.e @@ -14,20 +13,18 @@ import com.github.ajalt.timberkt.i import com.github.michaelbull.result.get import com.github.michaelbull.result.runCatching import dev.msfjarvis.aps.util.extensions.getString -import dev.msfjarvis.aps.util.extensions.sharedPrefs import dev.msfjarvis.aps.util.git.sshj.SshKey import java.io.File import java.net.URI -fun runMigrations(context: Context) { - val sharedPrefs = context.sharedPrefs - migrateToGitUrlBasedConfig(sharedPrefs) +fun runMigrations(filesDirPath: String, sharedPrefs: SharedPreferences, gitSettings: GitSettings) { + migrateToGitUrlBasedConfig(sharedPrefs, gitSettings) migrateToHideAll(sharedPrefs) - migrateToSshKey(context, sharedPrefs) + migrateToSshKey(filesDirPath, sharedPrefs) migrateToClipboardHistory(sharedPrefs) } -private fun migrateToGitUrlBasedConfig(sharedPrefs: SharedPreferences) { +private fun migrateToGitUrlBasedConfig(sharedPrefs: SharedPreferences, gitSettings: GitSettings) { val serverHostname = sharedPrefs.getString(PreferenceKeys.GIT_REMOTE_SERVER) ?: return i { "Migrating to URL-based Git config" } val serverPort = sharedPrefs.getString(PreferenceKeys.GIT_REMOTE_PORT) ?: "" @@ -76,10 +73,10 @@ private fun migrateToGitUrlBasedConfig(sharedPrefs: SharedPreferences) { remove(PreferenceKeys.GIT_REMOTE_PROTOCOL) } if (url == null || - GitSettings.updateConnectionSettingsIfValid( - newAuthMode = GitSettings.authMode, + gitSettings.updateConnectionSettingsIfValid( + newAuthMode = gitSettings.authMode, newUrl = url, - newBranch = GitSettings.branch + newBranch = gitSettings.branch ) != GitSettings.UpdateConnectionSettingsResult.Valid ) { e { "Failed to migrate to URL-based Git config, generated URL is invalid" } @@ -95,8 +92,8 @@ private fun migrateToHideAll(sharedPrefs: SharedPreferences) { } } -private fun migrateToSshKey(context: Context, sharedPrefs: SharedPreferences) { - val privateKeyFile = File(context.filesDir, ".ssh_key") +private fun migrateToSshKey(filesDirPath: String, sharedPrefs: SharedPreferences) { + val privateKeyFile = File(filesDirPath, ".ssh_key") if (sharedPrefs.contains(PreferenceKeys.USE_GENERATED_KEY) && !SshKey.exists && privateKeyFile.exists() -- cgit v1.2.3