mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-05-15 13:47:09 +02:00
pref: bridge client
This commit is contained in:
parent
8caf2b6d90
commit
fd3e7e416e
@ -13,8 +13,6 @@ import android.os.HandlerThread
|
|||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.os.Message
|
import android.os.Message
|
||||||
import android.os.Messenger
|
import android.os.Messenger
|
||||||
import kotlinx.coroutines.runBlocking
|
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
|
||||||
import me.rhunk.snapenhance.BuildConfig
|
import me.rhunk.snapenhance.BuildConfig
|
||||||
import me.rhunk.snapenhance.Logger.xposedLog
|
import me.rhunk.snapenhance.Logger.xposedLog
|
||||||
import me.rhunk.snapenhance.bridge.AbstractBridgeClient
|
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 me.rhunk.snapenhance.bridge.service.BridgeService
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
import java.util.concurrent.Executors
|
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.reflect.KClass
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
|
|
||||||
class ServiceBridgeClient: AbstractBridgeClient(), ServiceConnection {
|
class ServiceBridgeClient: AbstractBridgeClient(), ServiceConnection {
|
||||||
private val handlerThread = HandlerThread("BridgeClient")
|
private val handlerThread = HandlerThread("BridgeClient")
|
||||||
|
private val lock = ReentrantLock()
|
||||||
|
|
||||||
private lateinit var messenger: Messenger
|
private lateinit var messenger: Messenger
|
||||||
private lateinit var future: CompletableFuture<Boolean>
|
private lateinit var future: CompletableFuture<Boolean>
|
||||||
@ -83,33 +84,31 @@ class ServiceBridgeClient: AbstractBridgeClient(), ServiceConnection {
|
|||||||
@Suppress("UNCHECKED_CAST", "UNUSED_PARAMETER")
|
@Suppress("UNCHECKED_CAST", "UNUSED_PARAMETER")
|
||||||
private fun <T : BridgeMessage> sendMessage(
|
private fun <T : BridgeMessage> sendMessage(
|
||||||
messageType: BridgeMessageType,
|
messageType: BridgeMessageType,
|
||||||
message: BridgeMessage,
|
bridgeMessage: BridgeMessage,
|
||||||
resultType: KClass<T>? = null
|
resultType: KClass<T>? = null
|
||||||
) = runBlocking {
|
): T {
|
||||||
suspendCancellableCoroutine { cancelableContinuation ->
|
val response = AtomicReference<BridgeMessage>()
|
||||||
val replyMessenger = Messenger(object : Handler(handlerThread.looper) {
|
val condition = lock.newCondition()
|
||||||
|
|
||||||
|
with(Message.obtain()) {
|
||||||
|
what = messageType.value
|
||||||
|
replyTo = Messenger(object : Handler(handlerThread.looper) {
|
||||||
override fun handleMessage(msg: Message) {
|
override fun handleMessage(msg: Message) {
|
||||||
if (cancelableContinuation.isCancelled) return
|
response.set(handleResponseMessage(msg))
|
||||||
runCatching {
|
lock.withLock {
|
||||||
cancelableContinuation.resume(handleResponseMessage(msg) as T)
|
condition.signal()
|
||||||
}.onFailure {
|
|
||||||
cancelableContinuation.cancel(it)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
data = Bundle()
|
||||||
runCatching {
|
bridgeMessage.write(data)
|
||||||
with(Message.obtain()) {
|
messenger.send(this)
|
||||||
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(
|
override fun createAndReadFile(
|
||||||
|
@ -16,8 +16,8 @@ import me.rhunk.snapenhance.manager.Manager
|
|||||||
import me.rhunk.snapenhance.mapping.Mapper
|
import me.rhunk.snapenhance.mapping.Mapper
|
||||||
import me.rhunk.snapenhance.mapping.impl.BCryptClassMapper
|
import me.rhunk.snapenhance.mapping.impl.BCryptClassMapper
|
||||||
import me.rhunk.snapenhance.mapping.impl.CallbackMapper
|
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.DefaultMediaItemMapper
|
||||||
|
import me.rhunk.snapenhance.mapping.impl.EnumMapper
|
||||||
import me.rhunk.snapenhance.mapping.impl.OperaPageViewControllerMapper
|
import me.rhunk.snapenhance.mapping.impl.OperaPageViewControllerMapper
|
||||||
import me.rhunk.snapenhance.mapping.impl.PlatformAnalyticsCreatorMapper
|
import me.rhunk.snapenhance.mapping.impl.PlatformAnalyticsCreatorMapper
|
||||||
import me.rhunk.snapenhance.mapping.impl.PlusSubscriptionMapper
|
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 me.rhunk.snapenhance.util.getObjectField
|
||||||
import java.nio.charset.StandardCharsets
|
import java.nio.charset.StandardCharsets
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
import kotlin.concurrent.thread
|
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
class MappingManager(private val context: ModContext) : Manager {
|
class MappingManager(private val context: ModContext) : Manager {
|
||||||
|
@ -14,7 +14,7 @@ class TranslationManager(
|
|||||||
lateinit var locale: Locale
|
lateinit var locale: Locale
|
||||||
|
|
||||||
override fun init() {
|
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()
|
locale = messageLocaleResult.locale?.split("_")?.let { Locale(it[0], it[1]) } ?: Locale.getDefault()
|
||||||
|
|
||||||
val translations = JsonParser.parseString(messageLocaleResult.content?.toString(Charsets.UTF_8)).asJsonObject
|
val translations = JsonParser.parseString(messageLocaleResult.content?.toString(Charsets.UTF_8)).asJsonObject
|
||||||
|
Loading…
x
Reference in New Issue
Block a user