Skip to content

Commit 3f13fa8

Browse files
committed
feat: reveal the keyboard background when navigation bar is visible
1 parent 130ed31 commit 3f13fa8

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

app/src/main/java/com/osfans/trime/data/theme/Theme.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.osfans.trime.data.theme
1919

2020
import android.graphics.drawable.Drawable
2121
import android.graphics.drawable.GradientDrawable
22+
import androidx.annotation.ColorInt
2223
import androidx.core.math.MathUtils
2324
import com.osfans.trime.core.Rime
2425
import com.osfans.trime.data.AppPrefs
@@ -171,11 +172,13 @@ class Theme(private var isDarkMode: Boolean) {
171172
}
172173

173174
// API 2.0
175+
@ColorInt
174176
fun getColor(key: String?): Int? {
175177
val o = theme.currentColors[key]
176178
return if (o is Int) o else null
177179
}
178180

181+
@ColorInt
179182
fun getColor(
180183
m: Map<String, Any?>,
181184
key: String?,

app/src/main/java/com/osfans/trime/ime/core/InputView.kt

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ package com.osfans.trime.ime.core
33
import android.annotation.SuppressLint
44
import android.app.Dialog
55
import android.content.res.Configuration
6+
import android.graphics.Color
7+
import android.os.Build
68
import android.view.View
9+
import android.view.View.OnClickListener
710
import android.view.WindowManager
811
import android.view.inputmethod.EditorInfo
912
import androidx.constraintlayout.widget.ConstraintLayout
1013
import androidx.core.view.ViewCompat
14+
import androidx.core.view.WindowCompat
15+
import androidx.core.view.WindowInsetsCompat
1116
import androidx.core.view.updateLayoutParams
1217
import androidx.lifecycle.lifecycleScope
1318
import com.osfans.trime.core.Rime
@@ -16,6 +21,7 @@ import com.osfans.trime.data.theme.Theme
1621
import com.osfans.trime.ime.bar.QuickBar
1722
import com.osfans.trime.ime.keyboard.KeyboardWindow
1823
import com.osfans.trime.ime.symbol.LiquidKeyboard
24+
import com.osfans.trime.util.ColorUtils
1925
import com.osfans.trime.util.styledFloat
2026
import kotlinx.coroutines.Job
2127
import kotlinx.coroutines.launch
@@ -122,6 +128,24 @@ class InputView(
122128
}
123129
}
124130

131+
service.window.window!!.also { it ->
132+
// allow draw behind navigation bar
133+
WindowCompat.setDecorFitsSystemWindows(it, false)
134+
it.navigationBarColor = Color.TRANSPARENT
135+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
136+
// don't apply scrim to transparent navigation bar
137+
it.isNavigationBarContrastEnforced = false
138+
}
139+
ViewCompat.setOnApplyWindowInsetsListener(this) { _, insets ->
140+
insets.getInsets(WindowInsetsCompat.Type.navigationBars()).let {
141+
bottomPaddingSpace.updateLayoutParams<LayoutParams> {
142+
bottomMargin = it.bottom
143+
}
144+
}
145+
WindowInsetsCompat.CONSUMED
146+
}
147+
}
148+
125149
liquidKeyboard.setKeyboardView(keyboardWindow.oldSymbolInputView.liquidKeyboardView)
126150

127151
keyboardView =
@@ -214,7 +238,17 @@ class InputView(
214238
quickBar.view.setPadding(sidePadding, 0, sidePadding, 0)
215239
}
216240

217-
fun startInput(info: EditorInfo) {
241+
fun startInput(
242+
info: EditorInfo,
243+
restarting: Boolean = false,
244+
) {
245+
if (!restarting) {
246+
service.window.window!!.also {
247+
WindowCompat.getInsetsController(it, it.decorView)
248+
.isAppearanceLightNavigationBars =
249+
ColorUtils.isDark(theme.colors.getColor("key_text_color")!!)
250+
}
251+
}
218252
keyboardWindow.oldMainInputView.mainKeyboardView.updateEnterLabelOnEditorInfo(info)
219253
}
220254

app/src/main/java/com/osfans/trime/ime/core/Trime.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ open class Trime : LifecycleInputMethodService() {
492492
bindKeyboardToInputView()
493493
// if (!restarting) setNavBarColor();
494494
setCandidatesViewShown(!Rime.isEmpty) // 軟鍵盤出現時顯示候選欄
495-
inputView?.startInput(attribute)
495+
inputView?.startInput(attribute, restarting)
496496
when (attribute.inputType and InputType.TYPE_MASK_VARIATION) {
497497
InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS,
498498
InputType.TYPE_TEXT_VARIATION_PASSWORD,

app/src/main/java/com/osfans/trime/util/ColorUtils.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,11 @@ object ColorUtils {
3434
null
3535
}
3636
}
37+
38+
fun isDark(color: Int): Boolean {
39+
val r = Color.red(color)
40+
val g = Color.green(color)
41+
val b = Color.blue(color)
42+
return (r * 0.299 + g * 0.587 + b * 0.114) < 128
43+
}
3744
}

0 commit comments

Comments
 (0)