Skip to content

Commit d0e54c9

Browse files
committed
refactor: still handle rime deploy message in RimeDaemon
Then users can still receive notification or toast on deploy in the app even they don't set trime as default ime.
1 parent 8ef1643 commit d0e54c9

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

app/src/main/java/com/osfans/trime/daemon/RimeDaemon.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package com.osfans.trime.daemon
77
import android.app.NotificationChannel
88
import android.app.NotificationManager
99
import android.app.PendingIntent
10-
import android.content.Context
1110
import android.content.Intent
1211
import android.os.Build
1312
import androidx.core.app.NotificationCompat
@@ -26,6 +25,7 @@ import com.osfans.trime.util.logcat
2625
import com.osfans.trime.util.toast
2726
import kotlinx.coroutines.CoroutineScope
2827
import kotlinx.coroutines.Dispatchers
28+
import kotlinx.coroutines.Job
2929
import kotlinx.coroutines.launch
3030
import kotlinx.coroutines.runBlocking
3131
import kotlinx.coroutines.withContext
@@ -56,6 +56,8 @@ object RimeDaemon {
5656

5757
private val lock = ReentrantLock()
5858

59+
private var messageJob: Job? = null
60+
5961
private fun establish(name: String) =
6062
object : RimeSession {
6163
private inline fun <T> ensureEstablished(block: () -> T) =
@@ -150,19 +152,24 @@ object RimeDaemon {
150152
.build()
151153
.let { notificationManager.notify(id, it) }
152154
realRime.finalize()
155+
messageJob =
156+
TrimeApplication.getInstance().coroutineScope.launch {
157+
realRime.messageFlow.collect {
158+
handleRimeMessage(it)
159+
}
160+
}
153161
realRime.startup(fullCheck)
154162
TrimeApplication.getInstance().coroutineScope.launch {
155163
// cancel notification on ready
156164
realRime.lifecycle.whenReady {
157165
notificationManager.cancel(id)
166+
messageJob?.cancel()
167+
messageJob = null
158168
}
159169
}
160170
}
161171

162-
suspend fun onRimeMessage(
163-
ctx: Context,
164-
it: RimeMessage<*>,
165-
) {
172+
private suspend fun handleRimeMessage(it: RimeMessage<*>) {
166173
if (it is RimeMessage.DeployMessage) {
167174
when (it.data) {
168175
RimeMessage.DeployMessage.State.Start -> {
@@ -171,13 +178,13 @@ object RimeDaemon {
171178
}
172179
}
173180
RimeMessage.DeployMessage.State.Success -> {
174-
ContextCompat.getMainExecutor(ctx).execute {
175-
ctx.toast(R.string.deploy_finish)
181+
ContextCompat.getMainExecutor(appContext).execute {
182+
appContext.toast(R.string.deploy_finish)
176183
}
177184
}
178185
RimeMessage.DeployMessage.State.Failure -> {
179186
val intent =
180-
Intent(ctx, LogActivity::class.java).apply {
187+
Intent(appContext, LogActivity::class.java).apply {
181188
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
182189
val log =
183190
withContext(Dispatchers.IO) {
@@ -191,13 +198,13 @@ object RimeDaemon {
191198
putExtra(LogActivity.DEPLOY_FAILURE_TRACE, log)
192199
}
193200
NotificationCompat
194-
.Builder(ctx, CHANNEL_ID)
201+
.Builder(appContext, CHANNEL_ID)
195202
.setSmallIcon(R.drawable.ic_baseline_warning_24)
196-
.setContentTitle(ctx.getString(R.string.rime_daemon))
197-
.setContentText(ctx.getString(R.string.view_deploy_failure_log))
203+
.setContentTitle(appContext.getString(R.string.rime_daemon))
204+
.setContentText(appContext.getString(R.string.view_deploy_failure_log))
198205
.setContentIntent(
199206
PendingIntent.getActivity(
200-
ctx,
207+
appContext,
201208
0,
202209
intent,
203210
PendingIntent.FLAG_ONE_SHOT or

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,7 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
268268
}
269269
}
270270
}
271-
else ->
272-
lifecycleScope.launch {
273-
RimeDaemon.onRimeMessage(this@TrimeInputMethodService, it)
274-
}
271+
else -> {}
275272
}
276273
}
277274

0 commit comments

Comments
 (0)