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("androidx.core:core-ktx:1.9.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.browser:browser:1.5.0")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")

View File

@ -5,8 +5,12 @@ import android.content.DialogInterface
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.ViewGroup.MarginLayoutParams
import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updateLayoutParams
import androidx.core.widget.addTextChangedListener
import com.blacksquircle.ui.editorkit.insert
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.database.DataStore
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.widget.ListListener
import moe.matsuri.nb4a.ui.ExtendedKeyboard
@ -100,6 +106,23 @@ class ConfigEditActivity : ThemedActivity() {
extendedKeyboard.submitList("{},:_\"".map { it.toString() })
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)
}