Fix behavior on failing Git operations (#1084)

This commit is contained in:
Fabian Henneke
2020-09-07 10:10:59 +02:00
committed by GitHub
parent 2c0ecdfb67
commit 2687763bda
5 changed files with 52 additions and 27 deletions

View File

@@ -110,7 +110,11 @@ class PasswordFragment : Fragment(R.layout.password_recycler_view) {
binding.swipeRefresher.isRefreshing = false binding.swipeRefresher.isRefreshing = false
refreshPasswordList() refreshPasswordList()
}, },
failure = ::finishAfterPromptOnErrorHandler, failure = { err ->
promptOnErrorHandler(err) {
binding.swipeRefresher.isRefreshing = false
}
},
) )
} }
} }

View File

@@ -315,7 +315,7 @@ class PasswordStore : BaseGitActivity() {
private fun runGitOperation(operation: Int) = lifecycleScope.launch { private fun runGitOperation(operation: Int) = lifecycleScope.launch {
launchGitOperation(operation).fold( launchGitOperation(operation).fold(
success = { refreshPasswordList() }, success = { refreshPasswordList() },
failure = ::finishAfterPromptOnErrorHandler, failure = ::promptOnErrorHandler
) )
} }

View File

@@ -61,7 +61,7 @@ abstract class BaseGitActivity : AppCompatActivity() {
finish() finish()
} }
fun finishAfterPromptOnErrorHandler(err: Throwable) { fun promptOnErrorHandler(err: Throwable, onPromptDone: () -> Unit = {}) {
val error = rootCauseException(err) val error = rootCauseException(err)
if (!isExplicitlyUserInitiatedError(error)) { if (!isExplicitlyUserInitiatedError(error)) {
getEncryptedPrefs("git_operation").edit { getEncryptedPrefs("git_operation").edit {
@@ -69,12 +69,17 @@ abstract class BaseGitActivity : AppCompatActivity() {
} }
sharedPrefs.edit { remove(PreferenceKeys.SSH_OPENKEYSTORE_KEYID) } sharedPrefs.edit { remove(PreferenceKeys.SSH_OPENKEYSTORE_KEYID) }
d(error) d(error)
MaterialAlertDialogBuilder(this) MaterialAlertDialogBuilder(this).run {
.setTitle(resources.getString(R.string.jgit_error_dialog_title)) setTitle(resources.getString(R.string.jgit_error_dialog_title))
.setMessage(ErrorMessages[error]) setMessage(ErrorMessages[error])
.setPositiveButton(resources.getString(R.string.dialog_ok)) { _, _ -> setPositiveButton(resources.getString(R.string.dialog_ok)) { _, _ -> }
finish() setOnDismissListener {
}.show() onPromptDone()
}
show()
}
} else {
onPromptDone()
} }
} }

View File

@@ -81,28 +81,36 @@ class GitConfigActivity : BaseGitActivity() {
binding.gitAbortRebase.setOnClickListener { binding.gitAbortRebase.setOnClickListener {
lifecycleScope.launch { lifecycleScope.launch {
launchGitOperation(BREAK_OUT_OF_DETACHED).fold( launchGitOperation(BREAK_OUT_OF_DETACHED).fold(
success = { success = {
MaterialAlertDialogBuilder(this@GitConfigActivity) MaterialAlertDialogBuilder(this@GitConfigActivity).run {
.setTitle(resources.getString(R.string.git_abort_and_push_title)) setTitle(resources.getString(R.string.git_abort_and_push_title))
.setMessage(resources.getString( setMessage(resources.getString(
R.string.git_break_out_of_detached_success, R.string.git_break_out_of_detached_success,
GitSettings.branch, GitSettings.branch,
"conflicting-${GitSettings.branch}-...", "conflicting-${GitSettings.branch}-...",
)) ))
.setOnCancelListener { finish() } setOnDismissListener() { finish() }
.setPositiveButton(resources.getString(R.string.dialog_ok)) { _, _ -> setPositiveButton(resources.getString(R.string.dialog_ok)) { _, _ -> }
finish() show()
}.show() }
}, },
failure = ::finishAfterPromptOnErrorHandler, failure = { err ->
promptOnErrorHandler(err) {
finish()
}
},
) )
} }
} }
binding.gitResetToRemote.setOnClickListener { binding.gitResetToRemote.setOnClickListener {
lifecycleScope.launch { lifecycleScope.launch {
launchGitOperation(REQUEST_RESET).fold( launchGitOperation(REQUEST_RESET).fold(
success = ::finishOnSuccessHandler, success = ::finishOnSuccessHandler,
failure = ::finishAfterPromptOnErrorHandler, failure = { err ->
promptOnErrorHandler(err) {
finish()
}
},
) )
} }
} }

View File

@@ -130,7 +130,11 @@ class GitServerConfigActivity : BaseGitActivity() {
setResult(RESULT_OK) setResult(RESULT_OK)
finish() finish()
}, },
failure = ::finishAfterPromptOnErrorHandler, failure = { err ->
promptOnErrorHandler(err) {
finish()
}
}
) )
} }
}.onFailure { e -> }.onFailure { e ->
@@ -160,7 +164,11 @@ class GitServerConfigActivity : BaseGitActivity() {
setResult(RESULT_OK) setResult(RESULT_OK)
finish() finish()
}, },
failure = ::finishAfterPromptOnErrorHandler, failure = { err ->
promptOnErrorHandler(err) {
finish()
}
},
) )
} }
} }