commit fd3e7e416e216cb41f0870c85a8d492523cba192
parent 8caf2b6d90a746ade4ea6ad73f542a70184565e2
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sat, 10 Jun 2023 12:24:23 +0200
pref: bridge client
Diffstat:
3 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/ServiceBridgeClient.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/ServiceBridgeClient.kt
@@ -13,8 +13,6 @@ import android.os.HandlerThread
import android.os.IBinder
import android.os.Message
import android.os.Messenger
-import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.suspendCancellableCoroutine
import me.rhunk.snapenhance.BuildConfig
import me.rhunk.snapenhance.Logger.xposedLog
import me.rhunk.snapenhance.bridge.AbstractBridgeClient
@@ -33,13 +31,16 @@ import me.rhunk.snapenhance.bridge.common.impl.messagelogger.MessageLoggerResult
import me.rhunk.snapenhance.bridge.service.BridgeService
import java.util.concurrent.CompletableFuture
import java.util.concurrent.Executors
-import kotlin.coroutines.resume
+import java.util.concurrent.atomic.AtomicReference
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
import kotlin.reflect.KClass
import kotlin.system.exitProcess
class ServiceBridgeClient: AbstractBridgeClient(), ServiceConnection {
private val handlerThread = HandlerThread("BridgeClient")
+ private val lock = ReentrantLock()
private lateinit var messenger: Messenger
private lateinit var future: CompletableFuture<Boolean>
@@ -83,33 +84,31 @@ class ServiceBridgeClient: AbstractBridgeClient(), ServiceConnection {
@Suppress("UNCHECKED_CAST", "UNUSED_PARAMETER")
private fun <T : BridgeMessage> sendMessage(
messageType: BridgeMessageType,
- message: BridgeMessage,
+ bridgeMessage: BridgeMessage,
resultType: KClass<T>? = null
- ) = runBlocking {
- suspendCancellableCoroutine { cancelableContinuation ->
- val replyMessenger = Messenger(object : Handler(handlerThread.looper) {
+ ): T {
+ val response = AtomicReference<BridgeMessage>()
+ val condition = lock.newCondition()
+
+ with(Message.obtain()) {
+ what = messageType.value
+ replyTo = Messenger(object : Handler(handlerThread.looper) {
override fun handleMessage(msg: Message) {
- if (cancelableContinuation.isCancelled) return
- runCatching {
- cancelableContinuation.resume(handleResponseMessage(msg) as T)
- }.onFailure {
- cancelableContinuation.cancel(it)
+ response.set(handleResponseMessage(msg))
+ lock.withLock {
+ condition.signal()
}
}
})
+ data = Bundle()
+ bridgeMessage.write(data)
+ messenger.send(this)
+ }
- runCatching {
- with(Message.obtain()) {
- what = messageType.value
- replyTo = replyMessenger
- data = Bundle()
- message.write(data)
- messenger.send(this)
- }
- }.onFailure {
- cancelableContinuation.cancel(it)
- }
+ lock.withLock {
+ condition.awaitUninterruptibly()
}
+ return response.get() as T
}
override fun createAndReadFile(
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/MappingManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/MappingManager.kt
@@ -16,8 +16,8 @@ import me.rhunk.snapenhance.manager.Manager
import me.rhunk.snapenhance.mapping.Mapper
import me.rhunk.snapenhance.mapping.impl.BCryptClassMapper
import me.rhunk.snapenhance.mapping.impl.CallbackMapper
-import me.rhunk.snapenhance.mapping.impl.EnumMapper
import me.rhunk.snapenhance.mapping.impl.DefaultMediaItemMapper
+import me.rhunk.snapenhance.mapping.impl.EnumMapper
import me.rhunk.snapenhance.mapping.impl.OperaPageViewControllerMapper
import me.rhunk.snapenhance.mapping.impl.PlatformAnalyticsCreatorMapper
import me.rhunk.snapenhance.mapping.impl.PlusSubscriptionMapper
@@ -26,7 +26,6 @@ import me.rhunk.snapenhance.mapping.impl.StoryBoostStateMapper
import me.rhunk.snapenhance.util.getObjectField
import java.nio.charset.StandardCharsets
import java.util.concurrent.ConcurrentHashMap
-import kotlin.concurrent.thread
@Suppress("UNCHECKED_CAST")
class MappingManager(private val context: ModContext) : Manager {
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/TranslationManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/TranslationManager.kt
@@ -14,7 +14,7 @@ class TranslationManager(
lateinit var locale: Locale
override fun init() {
- val messageLocaleResult = context.bridgeClient.fetchTranslations();
+ val messageLocaleResult = context.bridgeClient.fetchTranslations()
locale = messageLocaleResult.locale?.split("_")?.let { Locale(it[0], it[1]) } ?: Locale.getDefault()
val translations = JsonParser.parseString(messageLocaleResult.content?.toString(Charsets.UTF_8)).asJsonObject