From af61504eeba733bd7a1bc5e115dd7e8b0b4a6926 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Thu, 6 Jan 2022 21:12:46 +0800 Subject: [PATCH] [app] Support dynamic colors (#1512) --- app/build.gradle.kts | 2 +- core/build.gradle.kts | 2 +- .../lspd/util/ParasiticManagerHooker.java | 4 +++ .../src/main/java/hidden/HiddenApiBridge.java | 26 ++++++++++++++++--- .../android/content/pm/ApplicationInfo.java | 7 +++++ 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 12d965cc..eb940af8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -193,7 +193,7 @@ dependencies { implementation("dev.rikka.rikkax.widget:switchbar:1.0.2") implementation("dev.rikka.rikkax.layoutinflater:layoutinflater:1.1.0") implementation("me.zhanghai.android.appiconloader:appiconloader:1.3.1") - implementation("org.lsposed.hiddenapibypass:hiddenapibypass:3.0") + implementation("org.lsposed.hiddenapibypass:hiddenapibypass:4.2") implementation(project(":manager-service")) } diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 8829adb9..e2975c18 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -162,7 +162,7 @@ dependencies { implementation("dev.rikka.ndk.thirdparty:cxx:1.2.0") implementation("io.github.vvb2060.ndk:dobby:1.2") implementation("org.apache.commons:commons-lang3:3.12.0") - implementation("de.upb.cs.swt:axml:2.1.1") + implementation("de.upb.cs.swt:axml:2.1.2") compileOnly("androidx.annotation:annotation:1.3.0") compileOnly(project(":hiddenapi-stubs")) implementation(project(":hiddenapi-bridge")) diff --git a/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java b/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java index 2e044ae8..38b6da30 100644 --- a/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java +++ b/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java @@ -76,6 +76,10 @@ public class ParasiticManagerHooker { newAppInfo.deviceProtectedDataDir = appInfo.deviceProtectedDataDir; newAppInfo.processName = appInfo.processName; HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(newAppInfo, HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(appInfo)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + HiddenApiBridge.ApplicationInfo_overlayPaths(newAppInfo, HiddenApiBridge.ApplicationInfo_overlayPaths(appInfo)); + } + HiddenApiBridge.ApplicationInfo_resourceDirs(newAppInfo, HiddenApiBridge.ApplicationInfo_resourceDirs(appInfo)); newAppInfo.uid = appInfo.uid; } catch (Throwable e) { Utils.logE("get manager pkginfo", e); diff --git a/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java b/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java index 31489fdb..1ca10128 100644 --- a/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java +++ b/hiddenapi-bridge/src/main/java/hidden/HiddenApiBridge.java @@ -40,11 +40,11 @@ import android.system.Int32Ref; import android.system.Os; import android.util.MutableInt; +import androidx.annotation.RequiresApi; + import java.io.File; import java.io.FileDescriptor; -import dalvik.system.VMRuntime; - public class HiddenApiBridge { public static int AssetManager_addAssetPath(AssetManager am, String path) { return am.addAssetPath(path); @@ -80,11 +80,11 @@ public class HiddenApiBridge { return ctx.registerReceiverAsUser(receiver, user, filter, broadcastPermission, scheduler); } - public static UserHandle UserHandle_ALL(){ + public static UserHandle UserHandle_ALL() { return UserHandle.ALL; } - public static UserHandle UserHandle(int h){ + public static UserHandle UserHandle(int h) { return new UserHandle(h); } @@ -96,6 +96,24 @@ public class HiddenApiBridge { applicationInfo.credentialProtectedDataDir = dir; } + public static String[] ApplicationInfo_resourceDirs(ApplicationInfo applicationInfo) { + return applicationInfo.resourceDirs; + } + + public static void ApplicationInfo_resourceDirs(ApplicationInfo applicationInfo, String[] resourceDirs) { + applicationInfo.resourceDirs = resourceDirs; + } + + @RequiresApi(31) + public static String[] ApplicationInfo_overlayPaths(ApplicationInfo applicationInfo) { + return applicationInfo.overlayPaths; + } + + @RequiresApi(31) + public static void ApplicationInfo_overlayPaths(ApplicationInfo applicationInfo, String[] overlayPaths) { + applicationInfo.overlayPaths = overlayPaths; + } + public static CompatibilityInfo Resources_getCompatibilityInfo(Resources res) { return res.getCompatibilityInfo(); } diff --git a/hiddenapi-stubs/src/main/java/android/content/pm/ApplicationInfo.java b/hiddenapi-stubs/src/main/java/android/content/pm/ApplicationInfo.java index 3f48f397..a6e62a6c 100644 --- a/hiddenapi-stubs/src/main/java/android/content/pm/ApplicationInfo.java +++ b/hiddenapi-stubs/src/main/java/android/content/pm/ApplicationInfo.java @@ -1,5 +1,12 @@ package android.content.pm; +import androidx.annotation.RequiresApi; + public class ApplicationInfo { public String credentialProtectedDataDir; + + public String[] resourceDirs; + + @RequiresApi(31) + public String[] overlayPaths; }