fix: Configuration editor keyboard does not display when IME is visible

This commit is contained in:
purofle 2025-06-30 21:23:15 +08:00
parent 096ed13310
commit 50ca7127fd
No known key found for this signature in database
2 changed files with 25 additions and 2 deletions

View File

@ -45,7 +45,7 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.recyclerview:recyclerview:1.3.0") implementation("androidx.recyclerview:recyclerview:1.3.0")
implementation("androidx.activity:activity-ktx:1.7.0") implementation("androidx.activity:activity-ktx:1.10.1")
implementation("androidx.fragment:fragment-ktx:1.5.6") implementation("androidx.fragment:fragment-ktx:1.5.6")
implementation("androidx.browser:browser:1.5.0") implementation("androidx.browser:browser:1.5.0")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")

View File

@ -5,8 +5,12 @@ import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.ViewGroup.MarginLayoutParams
import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updateLayoutParams
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import com.blacksquircle.ui.editorkit.insert import com.blacksquircle.ui.editorkit.insert
import com.blacksquircle.ui.language.json.JsonLanguage import com.blacksquircle.ui.language.json.JsonLanguage
@ -17,7 +21,9 @@ import io.nekohasekai.sagernet.Key
import io.nekohasekai.sagernet.R import io.nekohasekai.sagernet.R
import io.nekohasekai.sagernet.database.DataStore import io.nekohasekai.sagernet.database.DataStore
import io.nekohasekai.sagernet.databinding.LayoutEditConfigBinding import io.nekohasekai.sagernet.databinding.LayoutEditConfigBinding
import io.nekohasekai.sagernet.ktx.* import io.nekohasekai.sagernet.ktx.getColorAttr
import io.nekohasekai.sagernet.ktx.readableMessage
import io.nekohasekai.sagernet.ktx.toStringPretty
import io.nekohasekai.sagernet.ui.ThemedActivity import io.nekohasekai.sagernet.ui.ThemedActivity
import io.nekohasekai.sagernet.widget.ListListener import io.nekohasekai.sagernet.widget.ListListener
import moe.matsuri.nb4a.ui.ExtendedKeyboard import moe.matsuri.nb4a.ui.ExtendedKeyboard
@ -100,6 +106,23 @@ class ConfigEditActivity : ThemedActivity() {
extendedKeyboard.submitList("{},:_\"".map { it.toString() }) extendedKeyboard.submitList("{},:_\"".map { it.toString() })
extendedKeyboard.setBackgroundColor(getColorAttr(R.attr.primaryOrTextPrimary)) extendedKeyboard.setBackgroundColor(getColorAttr(R.attr.primaryOrTextPrimary))
val keyboardContainer = findViewById<LinearLayout>(R.id.keyboard_container)
ViewCompat.setOnApplyWindowInsetsListener(keyboardContainer) { v, windowInsets ->
val imeInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime())
val systemBarInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
val imeVisible = windowInsets.isVisible(WindowInsetsCompat.Type.ime())
v.updateLayoutParams<MarginLayoutParams> {
// systemBar insets are applied to the bottom of the keyboard
if (imeVisible) {
bottomMargin = imeInsets.bottom - systemBarInsets.bottom
} else {
bottomMargin = 0
}
}
WindowInsetsCompat.CONSUMED
}
ViewCompat.setOnApplyWindowInsetsListener(binding.root, ListListener) ViewCompat.setOnApplyWindowInsetsListener(binding.root, ListListener)
} }