Skip to content

Commit 1805d3c

Browse files
committed
refactor: extract showDialog from InputView to IMS
1 parent 9372e46 commit 1805d3c

File tree

4 files changed

+26
-35
lines changed

4 files changed

+26
-35
lines changed

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

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
package com.osfans.trime.ime.core
66

77
import android.annotation.SuppressLint
8-
import android.app.Dialog
98
import android.graphics.Color
109
import android.os.Build
1110
import android.view.View
1211
import android.view.View.OnClickListener
13-
import android.view.WindowManager
1412
import android.view.inputmethod.EditorInfo
1513
import android.widget.ImageView
1614
import androidx.constraintlayout.widget.ConstraintLayout
@@ -37,7 +35,6 @@ import com.osfans.trime.ime.keyboard.KeyboardWindow
3735
import com.osfans.trime.ime.preview.KeyPreviewChoreographer
3836
import com.osfans.trime.ime.symbol.LiquidKeyboard
3937
import com.osfans.trime.util.ColorUtils
40-
import com.osfans.trime.util.styledFloat
4138
import kotlinx.coroutines.Job
4239
import kotlinx.coroutines.launch
4340
import splitties.dimensions.dp
@@ -372,36 +369,8 @@ class InputView(
372369
broadcaster.onSelectionUpdate(start, end)
373370
}
374371

375-
private var showingDialog: Dialog? = null
376-
377-
fun showDialog(dialog: Dialog) {
378-
showingDialog?.dismiss()
379-
val windowToken = windowToken
380-
check(windowToken != null) { "InputView Token is null." }
381-
val window = dialog.window!!
382-
window.attributes.apply {
383-
token = windowToken
384-
type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG
385-
}
386-
window.addFlags(
387-
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM or
388-
WindowManager.LayoutParams.FLAG_DIM_BEHIND,
389-
)
390-
window.setDimAmount(themedContext.styledFloat(android.R.attr.backgroundDimAmount))
391-
showingDialog =
392-
dialog.apply {
393-
setOnDismissListener { this@InputView.showingDialog = null }
394-
show()
395-
}
396-
}
397-
398-
fun finishInput() {
399-
showingDialog?.dismiss()
400-
}
401-
402372
override fun onDetachedFromWindow() {
403373
ViewCompat.setOnApplyWindowInsetsListener(this, null)
404-
showingDialog?.dismiss()
405374
// cancel the notification job and clear all broadcast receivers,
406375
// implies that InputView should not be attached again after detached.
407376
baseCallbackHandler.cancelJob()

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package com.osfans.trime.ime.core
77
import android.annotation.SuppressLint
88
import android.annotation.TargetApi
99
import android.app.AlarmManager
10+
import android.app.Dialog
1011
import android.app.PendingIntent
1112
import android.content.Intent
1213
import android.content.res.Configuration
@@ -20,6 +21,7 @@ import android.view.KeyEvent
2021
import android.view.View
2122
import android.view.ViewGroup
2223
import android.view.Window
24+
import android.view.WindowManager
2325
import android.view.inputmethod.CursorAnchorInfo
2426
import android.view.inputmethod.EditorInfo
2527
import android.view.inputmethod.ExtractedTextRequest
@@ -56,6 +58,7 @@ import com.osfans.trime.util.findSectionFrom
5658
import com.osfans.trime.util.forceShowSelf
5759
import com.osfans.trime.util.isNightMode
5860
import com.osfans.trime.util.monitorCursorAnchor
61+
import com.osfans.trime.util.styledFloat
5962
import kotlinx.coroutines.CoroutineScope
6063
import kotlinx.coroutines.CoroutineStart
6164
import kotlinx.coroutines.Dispatchers
@@ -535,7 +538,6 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
535538
clearComposition()
536539
}
537540
InputFeedbackManager.finishInput()
538-
inputView?.finishInput()
539541
}
540542

541543
// 直接commit不做任何处理
@@ -934,6 +936,27 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
934936

935937
override fun onEvaluateFullscreenMode(): Boolean = false
936938

939+
private var showingDialog: Dialog? = null
940+
941+
fun showDialog(dialog: Dialog) {
942+
showingDialog?.dismiss()
943+
dialog.window?.also {
944+
it.attributes.apply {
945+
token = decorView.windowToken
946+
type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG
947+
}
948+
it.addFlags(
949+
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM or WindowManager.LayoutParams.FLAG_DIM_BEHIND,
950+
)
951+
it.setDimAmount(styledFloat(android.R.attr.backgroundDimAmount))
952+
}
953+
dialog.setOnDismissListener {
954+
showingDialog = null
955+
}
956+
dialog.show()
957+
showingDialog = dialog
958+
}
959+
937960
companion object {
938961
/** Delimiter regex to split language/locale tags. */
939962
private val DELIMITER_SPLITTER = """[-_]""".toRegex()

app/src/main/java/com/osfans/trime/ime/keyboard/CommonKeyboardActionListener.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class CommonKeyboardActionListener(
4848
private val context: Context,
4949
private val service: TrimeInputMethodService,
5050
private val rime: RimeSession,
51-
private val inputView: InputView,
5251
private val liquidKeyboard: LiquidKeyboard,
5352
private val windowManager: BoardWindowManager,
5453
) {
@@ -67,7 +66,7 @@ class CommonKeyboardActionListener(
6766
private fun showDialog(dialog: suspend (RimeApi) -> Dialog) {
6867
rime.launchOnReady { api ->
6968
service.lifecycleScope.launch {
70-
inputView.showDialog(dialog(api))
69+
service.showDialog(dialog(api))
7170
}
7271
}
7372
}

app/src/main/java/com/osfans/trime/ime/symbol/DbAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class DbAdapter(
9191
}
9292
}.setNegativeButton(R.string.cancel, null)
9393
.create()
94-
service.inputView?.showDialog(confirm)
94+
service.showDialog(confirm)
9595
}
9696

9797
override val showCollectButton: Boolean = type != SymbolBoardType.COLLECTION

0 commit comments

Comments
 (0)