diff options
author | Stefan Niedermann <info@niedermann.it> | 2023-03-09 11:52:58 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2023-03-09 11:53:19 +0300 |
commit | 85457a44dc8f9533b770d586db99d1d8f185a41e (patch) | |
tree | 6031515a6035b47885d87dfba932e90a8ba0d7dc /app/src/main/java | |
parent | 3ea462ca9e2ae18ba9d869125da8d8d07f2c7854 (diff) |
fix: Fix collapsed input fields of dialogs (#1385)
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java')
6 files changed, 38 insertions, 21 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/edit/EditBoardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/edit/EditBoardDialogFragment.java index 78abe2b2c..dd2fac0a5 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/edit/EditBoardDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/edit/EditBoardDialogFragment.java @@ -7,7 +7,6 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -17,14 +16,13 @@ import androidx.lifecycle.ViewModelProvider; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import java.util.Objects; - import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogTextColorInputBinding; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; import it.niedermann.nextcloud.deck.ui.theme.Themed; +import it.niedermann.nextcloud.deck.util.KeyboardUtils; public class EditBoardDialogFragment extends DialogFragment implements Themed { @@ -108,8 +106,7 @@ public class EditBoardDialogFragment extends DialogFragment implements Themed { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - binding.input.requestFocus(); - Objects.requireNonNull(requireDialog().getWindow()).setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + KeyboardUtils.showKeyboardForEditText(binding.input); return super.onCreateView(inflater, container, savedInstanceState); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java index 56ea190c6..c98ee4606 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java @@ -10,7 +10,6 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.widget.Toast; @@ -32,6 +31,7 @@ import it.niedermann.nextcloud.deck.ui.preparecreate.PrepareCreateViewModel; import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; import it.niedermann.nextcloud.deck.ui.theme.ThemedDialogFragment; import it.niedermann.nextcloud.deck.ui.viewmodel.SyncViewModel; +import it.niedermann.nextcloud.deck.util.KeyboardUtils; import it.niedermann.nextcloud.deck.util.OnTextChangedWatcher; public class NewCardDialog extends ThemedDialogFragment implements DialogInterface.OnClickListener { @@ -128,8 +128,7 @@ public class NewCardDialog extends ThemedDialogFragment implements DialogInterfa @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - binding.input.requestFocus(); - requireDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + KeyboardUtils.showKeyboardForEditText(binding.input); return super.onCreateView(inflater, container, savedInstanceState); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java index abb3b1033..afdd97a85 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java @@ -6,7 +6,6 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -14,12 +13,11 @@ import androidx.fragment.app.DialogFragment; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import java.util.Objects; - import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogAddCommentBinding; import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; import it.niedermann.nextcloud.deck.ui.theme.ThemedDialogFragment; +import it.niedermann.nextcloud.deck.util.KeyboardUtils; public class CardCommentsEditDialogFragment extends ThemedDialogFragment { private static final String BUNDLE_KEY_COMMENT_ID = "commentId"; @@ -64,8 +62,7 @@ public class CardCommentsEditDialogFragment extends ThemedDialogFragment { if (args.containsKey(BUNDLE_KEY_COMMENT_MESSAGE)) { binding.input.setText(args.getString(BUNDLE_KEY_COMMENT_MESSAGE)); } - binding.input.requestFocus(); - Objects.requireNonNull(requireDialog().getWindow()).setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + KeyboardUtils.showKeyboardForEditText(binding.input); return super.onCreateView(inflater, container, savedInstanceState); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java index ecefdc198..9a7822bb2 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java @@ -10,7 +10,6 @@ import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.widget.Toast; @@ -38,6 +37,7 @@ import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; import it.niedermann.nextcloud.deck.ui.viewmodel.SyncViewModel; +import it.niedermann.nextcloud.deck.util.KeyboardUtils; public class CardCommentsFragment extends Fragment implements CommentEditedListener, CommentDeletedListener, CommentSelectAsReplyListener { @@ -151,8 +151,7 @@ public class CardCommentsFragment extends Fragment implements CommentEditedListe public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (editCardViewModel.canEdit()) { - binding.message.requestFocus(); - requireActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + KeyboardUtils.showKeyboardForEditText(binding.message); } editCardViewModel.getBoardColor().observe(getViewLifecycleOwner(), this::applyTheme); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java index 829df99ea..f2c503bbf 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java @@ -7,7 +7,6 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; @@ -16,12 +15,11 @@ import androidx.fragment.app.DialogFragment; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import java.util.Objects; - import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogStackCreateBinding; import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; import it.niedermann.nextcloud.deck.ui.theme.ThemedDialogFragment; +import it.niedermann.nextcloud.deck.util.KeyboardUtils; import it.niedermann.nextcloud.deck.util.OnTextChangedWatcher; public class EditStackDialogFragment extends ThemedDialogFragment implements DialogInterface.OnClickListener { @@ -104,8 +102,7 @@ public class EditStackDialogFragment extends ThemedDialogFragment implements Dia @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - binding.input.requestFocus(); - Objects.requireNonNull(requireDialog().getWindow()).setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + KeyboardUtils.showKeyboardForEditText(binding.input); return super.onCreateView(inflater, container, savedInstanceState); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/KeyboardUtils.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/KeyboardUtils.java new file mode 100644 index 000000000..e48f7ed67 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/KeyboardUtils.java @@ -0,0 +1,28 @@ +package it.niedermann.nextcloud.deck.util; + +import static android.content.Context.INPUT_METHOD_SERVICE; +import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT; + +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import androidx.annotation.NonNull; + +/** + * @see <a href="https://github.com/nextcloud/android/pull/10962">Source</a> + */ +public class KeyboardUtils { + private final static long SHOW_INPUT_DELAY_MILLIS = 100L; + + public static void showKeyboardForEditText(@NonNull EditText editText) { + editText.requestFocus(); + // needs delay to account for focus animations + editText.postDelayed(() -> { + final var context = editText.getContext(); + if (context != null) { + final var inputMethodManager = (InputMethodManager) context.getSystemService(INPUT_METHOD_SERVICE); + inputMethodManager.showSoftInput(editText, SHOW_IMPLICIT); + } + }, SHOW_INPUT_DELAY_MILLIS); + } +}
\ No newline at end of file |