From 525fa5ee34f74c22aa770bf95a2d8c7c08aeb320 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Tue, 14 Nov 2023 23:17:07 +0530 Subject: [PATCH] fix(editor): do not automatically select first completion item for soft input (fixes #1201) --- .idea/compiler.xml | 4 ++ .../itsaky/androidide/utils/KeyboardUtils.kt | 45 +++++++++++++++++++ .../editor/ui/EditorCompletionWindow.kt | 5 ++- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/com/itsaky/androidide/utils/KeyboardUtils.kt diff --git a/.idea/compiler.xml b/.idea/compiler.xml index e5947d6e14..2e1f4ab954 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -131,6 +131,10 @@ + + + + diff --git a/common/src/main/java/com/itsaky/androidide/utils/KeyboardUtils.kt b/common/src/main/java/com/itsaky/androidide/utils/KeyboardUtils.kt new file mode 100644 index 0000000000..38fb4c1f09 --- /dev/null +++ b/common/src/main/java/com/itsaky/androidide/utils/KeyboardUtils.kt @@ -0,0 +1,45 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.utils + +import android.content.Context +import android.content.res.Configuration +import android.inputmethodservice.InputMethodService + +/** + * @author Akash Yadav + */ +object KeyboardUtils { + + /** + * Check if hardware keyboard is connected. + * Based on default implementation of [InputMethodService.onEvaluateInputViewShown]. + * + * https://developer.android.com/guide/topics/resources/providing-resources#ImeQualifier + * + * @param context The Context for operations. + * @return Returns `true` if device has hardware keys for text input or an external hardware + * keyboard is connected, otherwise `false`. + */ + fun isHardKeyboardConnected(context: Context?): Boolean { + if (context == null) return false + val config = context.resources.configuration + return (config.keyboard != Configuration.KEYBOARD_NOKEYS + || config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) + } +} \ No newline at end of file diff --git a/editor/src/main/java/com/itsaky/androidide/editor/ui/EditorCompletionWindow.kt b/editor/src/main/java/com/itsaky/androidide/editor/ui/EditorCompletionWindow.kt index d34a99a109..1e17912a29 100644 --- a/editor/src/main/java/com/itsaky/androidide/editor/ui/EditorCompletionWindow.kt +++ b/editor/src/main/java/com/itsaky/androidide/editor/ui/EditorCompletionWindow.kt @@ -23,6 +23,7 @@ import android.widget.ListView import com.itsaky.androidide.lsp.util.DocumentationReferenceProvider import com.itsaky.androidide.progress.ProgressManager import com.itsaky.androidide.utils.ILogger +import com.itsaky.androidide.utils.KeyboardUtils import io.github.rosemoe.sora.lang.completion.CompletionItem import io.github.rosemoe.sora.widget.component.CompletionLayout import io.github.rosemoe.sora.widget.component.EditorAutoCompletion @@ -151,7 +152,9 @@ class EditorCompletionWindow(val editor: IDEEditor) : EditorAutoCompletion(edito show() } - if (adapter!!.count >= 1) { + if (adapter!!.count >= 1 + && KeyboardUtils.isHardKeyboardConnected(context) + ) { currentSelection = 0 } },