commit 19ec7463b0257c8bb624cfabf868f0d7d5f3f4b4
parent ee80ab9a3e0ac3d1c5be88a9d975dccfad7e0e60
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Wed, 28 Jun 2023 00:02:42 +0200
fix(bridge): supports SDK <30
Diffstat:
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/SnapEnhance.kt b/app/src/main/kotlin/me/rhunk/snapenhance/SnapEnhance.kt
@@ -80,10 +80,9 @@ class SnapEnhance {
@SuppressLint("ObsoleteSdkInt")
private fun provideBridgeClient(): AbstractBridgeClient {
- //unsafe way for Android 9 devices
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
+ /*if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
return RootBridgeClient()
- }
+ }*/
return ServiceBridgeClient()
}
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
@@ -1,7 +1,6 @@
package me.rhunk.snapenhance.bridge.client
-import android.annotation.TargetApi
import android.content.ComponentName
import android.content.Context
import android.content.Intent
@@ -13,6 +12,7 @@ import android.os.HandlerThread
import android.os.IBinder
import android.os.Message
import android.os.Messenger
+import de.robv.android.xposed.XposedHelpers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.suspendCancellableCoroutine
import me.rhunk.snapenhance.BuildConfig
@@ -33,19 +33,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 java.util.concurrent.locks.ReentrantLock
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>
- @TargetApi(Build.VERSION_CODES.Q)
override fun start(callback: (Boolean) -> Unit) {
this.future = CompletableFuture()
this.handlerThread.start()
@@ -53,12 +50,24 @@ class ServiceBridgeClient: AbstractBridgeClient(), ServiceConnection {
with(context.androidContext) {
val intent = Intent()
.setClassName(BuildConfig.APPLICATION_ID, BridgeService::class.java.name)
- bindService(
- intent,
- Context.BIND_AUTO_CREATE,
- Executors.newSingleThreadExecutor(),
- this@ServiceBridgeClient
- )
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ bindService(
+ intent,
+ Context.BIND_AUTO_CREATE,
+ Executors.newSingleThreadExecutor(),
+ this@ServiceBridgeClient
+ )
+ } else {
+ XposedHelpers.callMethod(
+ this,
+ "bindServiceAsUser",
+ intent,
+ this@ServiceBridgeClient,
+ Context.BIND_AUTO_CREATE,
+ Handler(handlerThread.looper),
+ android.os.Process.myUserHandle()
+ )
+ }
}
callback(future.get())
}