Make connection mode a <= 1 toggle group to prevent UI overflow (#778)

This commit is contained in:
Fabian Henneke 2020-05-23 11:57:52 +02:00 committed by GitHub
parent 3711bb9aa7
commit a6eb4b4e21
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 33 deletions

View file

@ -6,6 +6,7 @@ package com.zeapo.pwdstore.git
import android.os.Bundle
import android.os.Handler
import android.view.View
import androidx.core.content.edit
import androidx.core.os.postDelayed
import androidx.core.widget.doOnTextChanged
@ -50,18 +51,20 @@ class GitServerConfigActivity : BaseGitActivity() {
}
}
binding.connectionModeGroup.check(when (connectionMode) {
ConnectionMode.SshKey -> R.id.connection_mode_ssh_key
ConnectionMode.Password -> R.id.connection_mode_password
ConnectionMode.OpenKeychain -> R.id.connection_mode_open_keychain
ConnectionMode.None -> R.id.connection_mode_none
})
binding.connectionModeGroup.setOnCheckedChangeListener { group, _ ->
when (group.checkedRadioButtonId) {
binding.connectionModeGroup.apply {
when (connectionMode) {
ConnectionMode.SshKey -> check(R.id.connection_mode_ssh_key)
ConnectionMode.Password -> check(R.id.connection_mode_password)
ConnectionMode.OpenKeychain -> check(R.id.connection_mode_open_keychain)
ConnectionMode.None -> uncheck(checkedButtonId)
}
addOnButtonCheckedListener { group, _, _ ->
when (checkedButtonId) {
R.id.connection_mode_ssh_key -> connectionMode = ConnectionMode.SshKey
R.id.connection_mode_open_keychain -> connectionMode = ConnectionMode.OpenKeychain
R.id.connection_mode_password -> connectionMode = ConnectionMode.Password
R.id.connection_mode_none -> connectionMode = ConnectionMode.None
View.NO_ID -> connectionMode = ConnectionMode.None
}
}
}
updateConnectionModeToggleGroup()
@ -120,12 +123,14 @@ class GitServerConfigActivity : BaseGitActivity() {
private fun updateConnectionModeToggleGroup() {
if (protocol == Protocol.Ssh) {
if (binding.connectionModeNone.isChecked)
// Reset connection mode to SSH key if the current value (none) is not valid for SSH
if (binding.connectionModeGroup.checkedButtonIds.isEmpty())
binding.connectionModeGroup.check(R.id.connection_mode_ssh_key)
binding.connectionModeSshKey.isEnabled = true
binding.connectionModeOpenKeychain.isEnabled = true
binding.connectionModeNone.isEnabled = false
binding.connectionModeGroup.isSelectionRequired = true
} else {
binding.connectionModeGroup.isSelectionRequired = false
// Reset connection mode to password if the current value is not valid for HTTPS
// Important note: This has to happen before disabling the other toggle buttons or they
// won't uncheck.
@ -133,7 +138,6 @@ class GitServerConfigActivity : BaseGitActivity() {
binding.connectionModeGroup.check(R.id.connection_mode_password)
binding.connectionModeSshKey.isEnabled = false
binding.connectionModeOpenKeychain.isEnabled = false
binding.connectionModeNone.isEnabled = true
}
}

View file

@ -145,43 +145,37 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/label_server_path" />
<RadioGroup
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/connection_mode_group"
style="@style/TextAppearance.MaterialComponents.Headline1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/label_connection_mode">
app:layout_constraintTop_toBottomOf="@id/label_connection_mode"
app:singleSelection="true">
<RadioButton
<com.google.android.material.button.MaterialButton
android:id="@+id/connection_mode_ssh_key"
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/connection_mode_ssh_key" />
<RadioButton
<com.google.android.material.button.MaterialButton
android:id="@+id/connection_mode_password"
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/connection_mode_basic_authentication" />
<RadioButton
<com.google.android.material.button.MaterialButton
android:id="@+id/connection_mode_open_keychain"
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/connection_mode_openkeychain" />
<RadioButton
android:id="@+id/connection_mode_none"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:text="@string/connection_mode_none" />
</RadioGroup>
</com.google.android.material.button.MaterialButtonToggleGroup>
<com.google.android.material.button.MaterialButton
android:id="@+id/save_button"