UX fixups and improvements (#1086)
* git: re-add back button handling Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * Hide unsupported authentication methods Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * GitCommandExecutor: cleanup and address build warning Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * Address review comments Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * DecryptActivity: hide menu items until decrypt finishes Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * GitServerConfigActivity: don't finish on failure Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
2687763bda
commit
c65f3c7099
6 changed files with 66 additions and 6 deletions
|
@ -82,6 +82,15 @@ class DecryptActivity : BasePgpActivity(), OpenPgpServiceConnection.OnBound {
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
||||||
menuInflater.inflate(R.menu.pgp_handler, menu)
|
menuInflater.inflate(R.menu.pgp_handler, menu)
|
||||||
|
passwordEntry?.let { entry ->
|
||||||
|
if (menu != null) {
|
||||||
|
menu.findItem(R.id.edit_password).isVisible = true
|
||||||
|
if (entry.password.isNotEmpty()) {
|
||||||
|
menu.findItem(R.id.share_password_as_plaintext).isVisible = true
|
||||||
|
menu.findItem(R.id.copy_password).isVisible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,6 +162,7 @@ class DecryptActivity : BasePgpActivity(), OpenPgpServiceConnection.OnBound {
|
||||||
val entry = PasswordEntry(outputStream)
|
val entry = PasswordEntry(outputStream)
|
||||||
|
|
||||||
passwordEntry = entry
|
passwordEntry = entry
|
||||||
|
invalidateOptionsMenu()
|
||||||
|
|
||||||
with(binding) {
|
with(binding) {
|
||||||
if (entry.password.isEmpty()) {
|
if (entry.password.isEmpty()) {
|
||||||
|
|
|
@ -8,6 +8,7 @@ package com.zeapo.pwdstore.git
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import com.github.michaelbull.result.Result
|
import com.github.michaelbull.result.Result
|
||||||
|
import com.github.michaelbull.result.runCatching
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.zeapo.pwdstore.R
|
import com.zeapo.pwdstore.R
|
||||||
import com.zeapo.pwdstore.git.GitException.PullException
|
import com.zeapo.pwdstore.git.GitException.PullException
|
||||||
|
@ -37,7 +38,7 @@ class GitCommandExecutor(
|
||||||
)
|
)
|
||||||
// Count the number of uncommitted files
|
// Count the number of uncommitted files
|
||||||
var nbChanges = 0
|
var nbChanges = 0
|
||||||
return com.github.michaelbull.result.runCatching {
|
return runCatching {
|
||||||
for (command in operation.commands) {
|
for (command in operation.commands) {
|
||||||
when (command) {
|
when (command) {
|
||||||
is StatusCommand -> {
|
is StatusCommand -> {
|
||||||
|
@ -95,6 +96,8 @@ class GitCommandExecutor(
|
||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else -> {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.util.Patterns
|
import android.util.Patterns
|
||||||
|
import android.view.MenuItem
|
||||||
import androidx.core.os.postDelayed
|
import androidx.core.os.postDelayed
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.github.ajalt.timberkt.e
|
import com.github.ajalt.timberkt.e
|
||||||
|
@ -59,6 +60,16 @@ class GitConfigActivity : BaseGitActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
return when (item.itemId) {
|
||||||
|
android.R.id.home -> {
|
||||||
|
finish()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else -> super.onOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up the UI components of the tools section.
|
* Sets up the UI components of the tools section.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -6,8 +6,11 @@ package com.zeapo.pwdstore.git
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.os.postDelayed
|
import androidx.core.os.postDelayed
|
||||||
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.core.widget.doOnTextChanged
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.github.ajalt.timberkt.e
|
import com.github.ajalt.timberkt.e
|
||||||
import com.github.michaelbull.result.fold
|
import com.github.michaelbull.result.fold
|
||||||
|
@ -68,6 +71,19 @@ class GitServerConfigActivity : BaseGitActivity() {
|
||||||
binding.serverUrl.setText(GitSettings.url)
|
binding.serverUrl.setText(GitSettings.url)
|
||||||
binding.serverBranch.setText(GitSettings.branch)
|
binding.serverBranch.setText(GitSettings.branch)
|
||||||
|
|
||||||
|
binding.serverUrl.doOnTextChanged { text, _, _, _ ->
|
||||||
|
if (text.isNullOrEmpty()) return@doOnTextChanged
|
||||||
|
if (text.startsWith("http://") || text.startsWith("https://")) {
|
||||||
|
binding.authModeSshKey.isVisible = false
|
||||||
|
binding.authModeOpenKeychain.isVisible = false
|
||||||
|
binding.authModePassword.isVisible = true
|
||||||
|
} else {
|
||||||
|
binding.authModeSshKey.isVisible = true
|
||||||
|
binding.authModeOpenKeychain.isVisible = true
|
||||||
|
binding.authModePassword.isVisible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binding.saveButton.setOnClickListener {
|
binding.saveButton.setOnClickListener {
|
||||||
when (val updateResult = GitSettings.updateConnectionSettingsIfValid(
|
when (val updateResult = GitSettings.updateConnectionSettingsIfValid(
|
||||||
newAuthMode = newAuthMode,
|
newAuthMode = newAuthMode,
|
||||||
|
@ -104,6 +120,16 @@ class GitServerConfigActivity : BaseGitActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
return when (item.itemId) {
|
||||||
|
android.R.id.home -> {
|
||||||
|
finish()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else -> super.onOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clones the repository, the directory exists, deletes it
|
* Clones the repository, the directory exists, deletes it
|
||||||
*/
|
*/
|
||||||
|
@ -164,11 +190,7 @@ class GitServerConfigActivity : BaseGitActivity() {
|
||||||
setResult(RESULT_OK)
|
setResult(RESULT_OK)
|
||||||
finish()
|
finish()
|
||||||
},
|
},
|
||||||
failure = { err ->
|
failure = ::promptOnErrorHandler,
|
||||||
promptOnErrorHandler(err) {
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package com.zeapo.pwdstore.git.log
|
package com.zeapo.pwdstore.git.log
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.MenuItem
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration
|
import androidx.recyclerview.widget.DividerItemDecoration
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.zeapo.pwdstore.databinding.ActivityGitLogBinding
|
import com.zeapo.pwdstore.databinding.ActivityGitLogBinding
|
||||||
|
@ -28,6 +29,16 @@ class GitLogActivity : BaseGitActivity() {
|
||||||
createRecyclerView()
|
createRecyclerView()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
return when (item.itemId) {
|
||||||
|
android.R.id.home -> {
|
||||||
|
finish()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else -> super.onOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun createRecyclerView() {
|
private fun createRecyclerView() {
|
||||||
binding.gitLogRecyclerView.apply {
|
binding.gitLogRecyclerView.apply {
|
||||||
setHasFixedSize(true)
|
setHasFixedSize(true)
|
||||||
|
|
|
@ -11,15 +11,18 @@
|
||||||
android:id="@+id/share_password_as_plaintext"
|
android:id="@+id/share_password_as_plaintext"
|
||||||
android:icon="@drawable/ic_share_24dp"
|
android:icon="@drawable/ic_share_24dp"
|
||||||
android:title="@string/share_as_plaintext"
|
android:title="@string/share_as_plaintext"
|
||||||
|
android:visible="false"
|
||||||
pwstore:showAsAction="ifRoom" />
|
pwstore:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/copy_password"
|
android:id="@+id/copy_password"
|
||||||
android:icon="@drawable/ic_content_copy"
|
android:icon="@drawable/ic_content_copy"
|
||||||
android:title="@string/copy_password"
|
android:title="@string/copy_password"
|
||||||
|
android:visible="false"
|
||||||
pwstore:showAsAction="ifRoom" />
|
pwstore:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/edit_password"
|
android:id="@+id/edit_password"
|
||||||
android:icon="@drawable/ic_edit_24dp"
|
android:icon="@drawable/ic_edit_24dp"
|
||||||
android:title="@string/edit_password"
|
android:title="@string/edit_password"
|
||||||
|
android:visible="false"
|
||||||
pwstore:showAsAction="ifRoom" />
|
pwstore:showAsAction="ifRoom" />
|
||||||
</menu>
|
</menu>
|
||||||
|
|
Loading…
Reference in a new issue