ui: simplify IME displaying in ConfigNamingDialogFragment

Also cleanup some event listener flow.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2023-03-23 14:31:19 +01:00
parent b44380c81a
commit caf2cded6e
2 changed files with 8 additions and 45 deletions

View File

@ -5,15 +5,11 @@
package com.wireguard.android.fragment package com.wireguard.android.fragment
import android.app.Dialog import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.view.inputmethod.InputMethodManager import android.view.WindowManager
import androidx.appcompat.app.AlertDialog
import androidx.core.content.getSystemService
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.textfield.TextInputEditText
import com.wireguard.android.Application import com.wireguard.android.Application
import com.wireguard.android.R import com.wireguard.android.R
import com.wireguard.android.databinding.ConfigNamingDialogFragmentBinding import com.wireguard.android.databinding.ConfigNamingDialogFragmentBinding
@ -27,7 +23,6 @@ import java.nio.charset.StandardCharsets
class ConfigNamingDialogFragment : DialogFragment() { class ConfigNamingDialogFragment : DialogFragment() {
private var binding: ConfigNamingDialogFragmentBinding? = null private var binding: ConfigNamingDialogFragmentBinding? = null
private var config: Config? = null private var config: Config? = null
private var imm: InputMethodManager? = null
private fun createTunnelAndDismiss() { private fun createTunnelAndDismiss() {
val binding = binding ?: return val binding = binding ?: return
@ -42,12 +37,6 @@ class ConfigNamingDialogFragment : DialogFragment() {
} }
} }
} }
override fun dismiss() {
setKeyboardVisible(false)
super.dismiss()
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val configText = requireArguments().getString(KEY_CONFIG_TEXT) val configText = requireArguments().getString(KEY_CONFIG_TEXT)
@ -64,7 +53,6 @@ class ConfigNamingDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val activity = requireActivity() val activity = requireActivity()
imm = activity.getSystemService()
val alertDialogBuilder = MaterialAlertDialogBuilder(activity) val alertDialogBuilder = MaterialAlertDialogBuilder(activity)
alertDialogBuilder.setTitle(R.string.import_from_qr_code) alertDialogBuilder.setTitle(R.string.import_from_qr_code)
binding = ConfigNamingDialogFragmentBinding.inflate(activity.layoutInflater, null, false) binding = ConfigNamingDialogFragmentBinding.inflate(activity.layoutInflater, null, false)
@ -72,37 +60,11 @@ class ConfigNamingDialogFragment : DialogFragment() {
executePendingBindings() executePendingBindings()
alertDialogBuilder.setView(root) alertDialogBuilder.setView(root)
} }
alertDialogBuilder.setPositiveButton(R.string.create_tunnel, null) alertDialogBuilder.setPositiveButton(R.string.create_tunnel) { _, _ -> createTunnelAndDismiss() }
alertDialogBuilder.setNegativeButton(R.string.cancel) { _, _ -> dismiss() } alertDialogBuilder.setNegativeButton(R.string.cancel) { _, _ -> dismiss() }
return alertDialogBuilder.create().apply { val dialog = alertDialogBuilder.create()
setOnShowListener { dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
findViewById<TextInputEditText>(R.id.tunnel_name_text)?.apply { return dialog
setOnFocusChangeListener { v, _ ->
v.post {
imm?.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT)
}
}
requestFocus()
}
}
}
}
override fun onResume() {
super.onResume()
val dialog = dialog as AlertDialog?
if (dialog != null) {
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener { createTunnelAndDismiss() }
setKeyboardVisible(true)
}
}
private fun setKeyboardVisible(visible: Boolean) {
if (visible) {
imm!!.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
} else if (binding != null) {
imm!!.hideSoftInputFromWindow(binding!!.tunnelNameText.windowToken, 0)
}
} }
companion object { companion object {

View File

@ -3,7 +3,6 @@
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<data> <data>
<import type="com.wireguard.android.widget.NameInputFilter" /> <import type="com.wireguard.android.widget.NameInputFilter" />
</data> </data>
@ -24,7 +23,9 @@
android:hint="@string/tunnel_name" android:hint="@string/tunnel_name"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:inputType="textNoSuggestions|textVisiblePassword" android:inputType="textNoSuggestions|textVisiblePassword"
app:filter="@{NameInputFilter.newInstance()}" /> app:filter="@{NameInputFilter.newInstance()}">
<requestFocus/>
</com.google.android.material.textfield.TextInputEditText>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>