fix(editor): do not automatically select first completion item for soft input (fixes #1201)

This commit is contained in:
Akash Yadav
2023-11-14 23:17:07 +05:30
parent 93bb303abd
commit 525fa5ee34
3 changed files with 53 additions and 1 deletions
+4
View File
@@ -131,6 +131,10 @@
<module name="AndroidIDE.templates-testing" target="17" />
<module name="AndroidIDE.templates-testing.main" target="11" />
<module name="AndroidIDE.templates-testing.test" target="11" />
<module name="AndroidIDE.termux.termux-app" target="17" />
<module name="AndroidIDE.termux.termux-emulator" target="17" />
<module name="AndroidIDE.termux.termux-shared" target="17" />
<module name="AndroidIDE.termux.termux-view" target="17" />
<module name="AndroidIDE.testing-android" target="17" />
<module name="AndroidIDE.testing.android.test" target="11" />
<module name="AndroidIDE.testing.common" target="11" />
@@ -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 <https://www.gnu.org/licenses/>.
*/
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)
}
}
@@ -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
}
},