From 3c25b768532725bfa9873a9c7dd981ec5d57a534 Mon Sep 17 00:00:00 2001 From: Andrew Hamilton <102604324+andrewhamilton0@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:52:11 -0400 Subject: [PATCH] Adds auto keyboard popup to dialogs (#4667) Adds auto keyboard popup to ListsActivity, FollowedTagsActivity, EditFilterActivity, CaptionDialog, and AddPollDialog.kt, and AddHashtagDialog in TabPreferenceActivity. These are all dialog screens which editing texts are the main purposes --------- Co-authored-by: Weblate <42475313+nailyk-weblate@users.noreply.github.com> Co-authored-by: Anonymous Co-authored-by: Danial Behzadi Co-authored-by: Manuel Co-authored-by: Eric Co-authored-by: Ihor Hordiichuk --- .../com/keylesspalace/tusky/ListsActivity.kt | 4 ++++ .../tusky/TabPreferenceActivity.kt | 2 ++ .../components/compose/dialog/AddPollDialog.kt | 9 +++++++++ .../components/compose/dialog/CaptionDialog.kt | 5 +++++ .../components/filters/EditFilterActivity.kt | 17 +++++++++++++++-- .../followedtags/FollowedTagsActivity.kt | 8 ++++++++ 6 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/ListsActivity.kt b/app/src/main/java/com/keylesspalace/tusky/ListsActivity.kt index eb2cb7a13..da4af6f43 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ListsActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/ListsActivity.kt @@ -23,6 +23,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.WindowManager import android.widget.PopupMenu import androidx.activity.viewModels import androidx.annotation.StringRes @@ -136,11 +137,14 @@ class ListsActivity : BaseActivity() { .setNegativeButton(android.R.string.cancel, null) .show() + dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + binding.nameText.let { editText -> editText.doOnTextChanged { s, _, _, _ -> dialog.getButton(Dialog.BUTTON_POSITIVE).isEnabled = s?.isNotBlank() == true } editText.setText(list?.title) + editText.requestFocus() editText.text?.let { editText.setSelection(it.length) } } diff --git a/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt b/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt index 24c6ce8dd..7cd0b8eac 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt @@ -18,6 +18,7 @@ package com.keylesspalace.tusky import android.graphics.Color import android.os.Bundle import android.view.View +import android.view.WindowManager import android.widget.FrameLayout import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AlertDialog @@ -267,6 +268,7 @@ class TabPreferenceActivity : BaseActivity(), ItemInteractionListener, ListSelec dialog.show() dialog.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = validateHashtag(editText.text) + dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) editText.requestFocus() } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt index 3cd4b9e52..2582b5a28 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt @@ -22,6 +22,7 @@ import android.view.LayoutInflater import android.view.WindowManager import androidx.appcompat.app.AlertDialog import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.textfield.TextInputEditText import com.keylesspalace.tusky.R import com.keylesspalace.tusky.databinding.DialogAddPollBinding import com.keylesspalace.tusky.entity.NewPoll @@ -106,6 +107,14 @@ fun showAddPollDialog( dialog.show() + dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + binding.pollChoices.post { + val firstItemView = binding.pollChoices.layoutManager?.findViewByPosition(0) + val editText = firstItemView?.findViewById(R.id.optionEditText) + editText?.requestFocus() + editText?.setSelection(editText.length()) + } + // make the dialog focusable so the keyboard does not stay behind it dialog.window?.clearFlags( WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt index 4c96bf336..7b987ee99 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt @@ -62,6 +62,11 @@ class CaptionDialog : DialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val imageView = binding.imageDescriptionView imageView.maxZoom = 6f + val imageDescriptionText = binding.imageDescriptionText + imageDescriptionText.post { + imageDescriptionText.requestFocus() + imageDescriptionText.setSelection(imageDescriptionText.length()) + } binding.imageDescriptionText.hint = resources.getQuantityString( R.plurals.hint_describe_for_visually_impaired, diff --git a/app/src/main/java/com/keylesspalace/tusky/components/filters/EditFilterActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/filters/EditFilterActivity.kt index c61765bea..e3daa6f7f 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/filters/EditFilterActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/filters/EditFilterActivity.kt @@ -3,6 +3,7 @@ package com.keylesspalace.tusky.components.filters import android.content.Context import android.content.DialogInterface.BUTTON_POSITIVE import android.os.Bundle +import android.view.WindowManager import android.widget.AdapterView import androidx.activity.viewModels import androidx.core.view.size @@ -211,7 +212,7 @@ class EditFilterActivity : BaseActivity() { private fun showAddKeywordDialog() { val binding = DialogFilterBinding.inflate(layoutInflater) binding.phraseWholeWord.isChecked = true - MaterialAlertDialogBuilder(this) + val dialog = MaterialAlertDialogBuilder(this) .setTitle(R.string.filter_keyword_addition_title) .setView(binding.root) .setPositiveButton(android.R.string.ok) { _, _ -> @@ -225,6 +226,12 @@ class EditFilterActivity : BaseActivity() { } .setNegativeButton(android.R.string.cancel, null) .show() + + dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + + val editText = binding.phraseEditText + editText.requestFocus() + editText.setSelection(editText.length()) } private fun showEditKeywordDialog(keyword: FilterKeyword) { @@ -232,7 +239,7 @@ class EditFilterActivity : BaseActivity() { binding.phraseEditText.setText(keyword.keyword) binding.phraseWholeWord.isChecked = keyword.wholeWord - MaterialAlertDialogBuilder(this) + val dialog = MaterialAlertDialogBuilder(this) .setTitle(R.string.filter_edit_keyword_title) .setView(binding.root) .setPositiveButton(R.string.filter_dialog_update_button) { _, _ -> @@ -246,6 +253,12 @@ class EditFilterActivity : BaseActivity() { } .setNegativeButton(android.R.string.cancel, null) .show() + + dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + + val editText = binding.phraseEditText + editText.requestFocus() + editText.setSelection(editText.length()) } private fun validateSaveButton() { diff --git a/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsActivity.kt index 6c64048ec..ca50fdb27 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/followedtags/FollowedTagsActivity.kt @@ -5,6 +5,7 @@ import android.content.DialogInterface import android.content.SharedPreferences import android.os.Bundle import android.util.Log +import android.view.WindowManager import android.widget.AutoCompleteTextView import androidx.activity.viewModels import androidx.fragment.app.DialogFragment @@ -194,6 +195,8 @@ class FollowedTagsActivity : showBotBadge = false ) ) + autoCompleteTextView.requestFocus() + autoCompleteTextView.setSelection(autoCompleteTextView.length()) return MaterialAlertDialogBuilder(requireActivity()) .setTitle(R.string.dialog_follow_hashtag_title) @@ -207,6 +210,11 @@ class FollowedTagsActivity : .create() } + override fun onStart() { + super.onStart() + dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) + } + companion object { fun newInstance(): FollowTagDialog = FollowTagDialog() }