Remove custom permission, fix client lifecycle and encrypted prefs
Remove USE_LCK_CONTROL permission from service to fix binding failures caused by Android revoking custom permissions on app reinstall. Add auto-cleanup of dead clients via RemoteCallbackList.onCallbackDied and handle corrupted EncryptedSharedPreferences keyset gracefully. Lower SDK minSdk to 32.
This commit is contained in:
@@ -57,7 +57,18 @@ class LckControlService : Service() {
|
||||
|
||||
private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
||||
private val clientTracker = ClientTracker()
|
||||
private val callbacks = RemoteCallbackList<ILckControlCallback>()
|
||||
private val callbacks = object : RemoteCallbackList<ILckControlCallback>() {
|
||||
override fun onCallbackDied(callback: ILckControlCallback, cookie: Any?) {
|
||||
val uid = cookie as? Int ?: return
|
||||
serviceScope.launch {
|
||||
val removed = clientTracker.unregisterByUid(uid)
|
||||
for (client in removed) {
|
||||
Log.d(TAG, "Auto-unregistered client ${client.clientId} (${client.packageName}) - process died")
|
||||
broadcastClientUnregistered(client.clientId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val binder = object : ILckControlService.Stub() {
|
||||
|
||||
@@ -146,7 +157,8 @@ class LckControlService : Service() {
|
||||
// ── Clients ─────────────────────────────────────────
|
||||
|
||||
override fun registerClient(clientName: String, packageName: String): String {
|
||||
val clientId = clientTracker.register(clientName, packageName)
|
||||
val uid = android.os.Binder.getCallingUid()
|
||||
val clientId = clientTracker.register(clientName, packageName, uid)
|
||||
broadcastClientRegistered(clientId)
|
||||
return clientId
|
||||
}
|
||||
@@ -174,7 +186,8 @@ class LckControlService : Service() {
|
||||
// ── Callbacks ───────────────────────────────────────
|
||||
|
||||
override fun registerCallback(callback: ILckControlCallback) {
|
||||
callbacks.register(callback)
|
||||
val uid = android.os.Binder.getCallingUid()
|
||||
callbacks.register(callback, uid)
|
||||
}
|
||||
|
||||
override fun unregisterCallback(callback: ILckControlCallback) {
|
||||
|
||||
Reference in New Issue
Block a user