From ee0ec3fbfaed50d12d556b7b54fa9c9dc39efe1c Mon Sep 17 00:00:00 2001 From: vvb2060 Date: Thu, 25 Feb 2021 06:09:26 +0800 Subject: [PATCH] Use UID_REMOVED action for multi-user and shared user id compatibility --- app/src/main/AndroidManifest.xml | 3 +- .../com/topjohnwu/magisk/core/Receiver.kt | 29 ++++++++++--------- .../magisk/core/magiskdb/PolicyDao.kt | 6 ---- stub/src/main/AndroidManifest.xml | 6 ++-- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 922ad35d0..280a3eb84 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,6 +15,7 @@ @@ -52,7 +53,7 @@ - + diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt b/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt index 9d0c662fe..257adb60d 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt @@ -1,10 +1,10 @@ package com.topjohnwu.magisk.core +import android.annotation.SuppressLint import android.content.ContextWrapper import android.content.Intent import com.topjohnwu.magisk.core.base.BaseReceiver import com.topjohnwu.magisk.core.magiskdb.PolicyDao -import com.topjohnwu.magisk.core.su.SuCallbackHandler import com.topjohnwu.magisk.view.Shortcuts import com.topjohnwu.superuser.Shell import kotlinx.coroutines.GlobalScope @@ -15,30 +15,33 @@ open class Receiver : BaseReceiver() { private val policyDB: PolicyDao by inject() - private fun getPkg(intent: Intent): String { - return intent.data?.encodedSchemeSpecificPart.orEmpty() + @SuppressLint("InlinedApi") + private fun getPkg(intent: Intent): String? { + val pkg = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME) + return pkg ?: intent.data?.schemeSpecificPart + } + + private fun getUid(intent: Intent): Int? { + val uid = intent.getIntExtra(Intent.EXTRA_UID, -1) + return if (uid == -1) null else uid } override fun onReceive(context: ContextWrapper, intent: Intent?) { intent ?: return - fun rmPolicy(pkg: String) = GlobalScope.launch { - policyDB.delete(pkg) + fun rmPolicy(uid: Int) = GlobalScope.launch { + policyDB.delete(uid) } when (intent.action ?: return) { - Intent.ACTION_REBOOT -> { - SuCallbackHandler(context, intent.getStringExtra("action"), intent.extras) - } Intent.ACTION_PACKAGE_REPLACED -> { // This will only work pre-O if (Config.suReAuth) - rmPolicy(getPkg(intent)) + getUid(intent)?.let { rmPolicy(it) } } - Intent.ACTION_PACKAGE_FULLY_REMOVED -> { - val pkg = getPkg(intent) - rmPolicy(pkg) - Shell.su("magiskhide --rm $pkg").submit() + Intent.ACTION_UID_REMOVED -> { + getUid(intent)?.let { rmPolicy(it) } + getPkg(intent)?.let { Shell.su("magiskhide rm $it").submit() } } Intent.ACTION_LOCALE_CHANGED -> Shortcuts.setupDynamic(context) } diff --git a/app/src/main/java/com/topjohnwu/magisk/core/magiskdb/PolicyDao.kt b/app/src/main/java/com/topjohnwu/magisk/core/magiskdb/PolicyDao.kt index fef1cc403..ad1fe4a54 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/magiskdb/PolicyDao.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/magiskdb/PolicyDao.kt @@ -31,12 +31,6 @@ class PolicyDao( } }.commit() - suspend fun delete(packageName: String) = buildQuery { - condition { - equals("package_name", packageName) - } - }.commit() - suspend fun delete(uid: Int) = buildQuery { condition { equals("uid", uid) diff --git a/stub/src/main/AndroidManifest.xml b/stub/src/main/AndroidManifest.xml index 7ed3c849a..02629ac3f 100644 --- a/stub/src/main/AndroidManifest.xml +++ b/stub/src/main/AndroidManifest.xml @@ -14,7 +14,9 @@ tools:ignore="GoogleAppIndexingWarning,MissingApplicationIcon,UnusedAttribute"> - + @@ -51,7 +53,7 @@ - +