3 Commits
Author SHA1 Message Date
LittleChest a321cc564a Update deps 2026-08-30 01:33:31 +08:00
LittleChest 61c4588c4d 1.3
* Fix launcher hook on Android 17 QPR2 Beta 4
2026-08-30 01:00:55 +08:00
LittleChest 54abef0728 1.2 2025-08-19 21:24:26 +08:00
8 changed files with 45 additions and 33 deletions
+4 -4
View File
@@ -4,14 +4,14 @@ plugins {
android { android {
namespace = "top.littlew.acer" namespace = "top.littlew.acer"
compileSdk = 36 compileSdk = 37
defaultConfig { defaultConfig {
applicationId = "top.littlew.acer" applicationId = "top.littlew.acer"
minSdk = 34 minSdk = 34
targetSdk = 36 targetSdk = 37
versionCode = 2 versionCode = 4
versionName = "1.1" versionName = "1.3"
} }
buildTypes { buildTypes {
@@ -25,6 +25,7 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class XposedInit implements IXposedHookLoadPackage { public class XposedInit implements IXposedHookLoadPackage {
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
private static Context mContext; private static Context mContext;
private static List<String> cachedCloneableApps;
@Override @Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) { public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) {
@@ -107,7 +108,7 @@ public class XposedInit implements IXposedHookLoadPackage {
XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.android.launcher3.allapps.ActivityAllAppsContainerView$AdapterHolder", lpparam.classLoader), "setup", View.class, Predicate.class, new XC_MethodHook() { XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.android.launcher3.allapps.ActivityAllAppsContainerView$AdapterHolder", lpparam.classLoader), "setup", View.class, Predicate.class, new XC_MethodHook() {
@Override @Override
protected void beforeHookedMethod(MethodHookParam param) { protected void beforeHookedMethod(MethodHookParam param) {
if ((int) XposedHelpers.getObjectField(param.thisObject, "mType") == 0) { if (((/* Before A17Q2B4: Integer | After A17Q2B4: Byte */ Number) XposedHelpers.getObjectField(param.thisObject, "mType")).intValue() == 0) {
Object allAppsContainerView = XposedHelpers.getObjectField(param.thisObject, "this$0"); Object allAppsContainerView = XposedHelpers.getObjectField(param.thisObject, "this$0");
Predicate workProfileMatcher = (Predicate) XposedHelpers.callMethod(XposedHelpers.getObjectField(allAppsContainerView, "mWorkManager"), "getItemInfoMatcher"); Predicate workProfileMatcher = (Predicate) XposedHelpers.callMethod(XposedHelpers.getObjectField(allAppsContainerView, "mWorkManager"), "getItemInfoMatcher");
@@ -124,11 +125,16 @@ public class XposedInit implements IXposedHookLoadPackage {
} }
} }
@SuppressLint("QueryPermissionsNeeded")
private List<String> getCloneableApps() { private List<String> getCloneableApps() {
if (mContext == null) { if (mContext == null) {
return new ArrayList<>(); return new ArrayList<>();
} }
if (cachedCloneableApps != null) {
return cachedCloneableApps;
}
@SuppressLint("DiscouragedApi") List<String> cloneableApps = new ArrayList<>(Arrays.asList(mContext.getResources().getStringArray(mContext.getResources().getIdentifier("cloneable_apps", "array", "android")))); @SuppressLint("DiscouragedApi") List<String> cloneableApps = new ArrayList<>(Arrays.asList(mContext.getResources().getStringArray(mContext.getResources().getIdentifier("cloneable_apps", "array", "android"))));
SharedPreferences sharedPrefs = mContext.getSharedPreferences("cloneable_apps", Context.MODE_PRIVATE); SharedPreferences sharedPrefs = mContext.getSharedPreferences("cloneable_apps", Context.MODE_PRIVATE);
@@ -146,6 +152,7 @@ public class XposedInit implements IXposedHookLoadPackage {
} }
} }
return cloneableApps; cachedCloneableApps = cloneableApps;
return cachedCloneableApps;
} }
} }
@@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp" android:width="24dp"
android:height="48dp" android:height="24dp"
android:viewportWidth="960" android:viewportWidth="960"
android:viewportHeight="960"> android:viewportHeight="960">
<group <group
@@ -10,6 +10,6 @@
android:pivotY="480"> android:pivotY="480">
<path <path
android:fillColor="@android:color/white" android:fillColor="@android:color/white"
android:pathData="M571,632L631,632L631,508L754,508L754,448L631,448L631,325L571,325L571,448L447,448L447,508L571,508L571,632ZM233,816Q128,774 64,682.74Q0,591.48 0,479.24Q0,367 64.5,276Q129,185 233,143L233,211Q154,247 107,319.7Q60,392.4 60,479Q60,567 107,639Q154,711 233,748L233,816ZM600,839Q525,839 459.5,810.5Q394,782 345.5,733.5Q297,685 268.5,619.5Q240,554 240,479Q240,404 268.5,338.5Q297,273 345.5,224.5Q394,176 459.5,147.5Q525,119 600,119Q675,119 740.5,147.5Q806,176 854.5,224.5Q903,273 931.5,338.5Q960,404 960,479Q960,554 931.5,619.5Q903,685 854.5,733.5Q806,782 740.5,810.5Q675,839 600,839ZM600,479Q600,479 600,479Q600,479 600,479Q600,479 600,479Q600,479 600,479Q600,479 600,479Q600,479 600,479Q600,479 600,479Q600,479 600,479ZM600.5,779Q725,779 812.5,691.68Q900,604.36 900,479Q900,355 812.68,267Q725.36,179 600,179Q476,179 388,267Q300,355 300,479Q300,604.36 388,691.68Q476,779 600.5,779Z"/> android:pathData="M560,640L640,640L640,520L760,520L760,440L640,440L640,320L560,320L560,440L440,440L440,520L560,520L560,640ZM240,820Q131,782 65.5,688.5Q0,595 0,480Q0,365 65.5,271.5Q131,178 240,140L240,228Q166,263 123,331Q80,399 80,480Q80,561 123,629Q166,697 240,732L240,820ZM600,840Q525,840 459.5,811.5Q394,783 345.5,734.5Q297,686 268.5,620.5Q240,555 240,480Q240,405 268.5,339.5Q297,274 345.5,225.5Q394,177 459.5,148.5Q525,120 600,120Q675,120 740.5,148.5Q806,177 854.5,225.5Q903,274 931.5,339.5Q960,405 960,480Q960,555 931.5,620.5Q903,686 854.5,734.5Q806,783 740.5,811.5Q675,840 600,840ZM600,480Q600,480 600,480Q600,480 600,480Q600,480 600,480Q600,480 600,480Q600,480 600,480Q600,480 600,480Q600,480 600,480Q600,480 600,480ZM600,760Q717,760 798.5,678.5Q880,597 880,480Q880,363 798.5,281.5Q717,200 600,200Q483,200 401.5,281.5Q320,363 320,480Q320,597 401.5,678.5Q483,760 600,760Z"/>
</group> </group>
</vector> </vector>
+12 -20
View File
@@ -1,21 +1,13 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode. android.useAndroidX=false
# This option should only be used with decoupled projects. For more details, visit android.nonTransitiveRClass=true
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects android.defaults.buildfeatures.resvalues=true
# org.gradle.parallel=true android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
# AndroidX package structure to make it clearer which packages are bundled with the android.enableAppCompileTimeRClass=false
# Android operating system, and which are packaged with your app's APK android.usesSdkInManifest.disallowed=false
# https://developer.android.com/topic/libraries/support-library/androidx-rn android.uniquePackageNames=false
android.useAndroidX=true android.dependency.useConstraints=true
# Enables namespacing of each library's R class so that its R class includes only the android.r8.strictFullModeForKeepRules=false
# resources declared in the library itself and none from the library's dependencies, android.r8.optimizedResourceShrinking=false
# thereby reducing the size of the R class for that library android.builtInKotlin=false
android.nonTransitiveRClass=true android.newDsl=false
+13
View File
@@ -0,0 +1,13 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7083b89563e7ce20943037b8cd2b8cc2/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/060bbb778a1f55ea705fdebd2ccfeab9/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d09679dc60fe5aa05ef7d03efdefac20/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/ed4e3bf2f5e7c5d9aabc4cbd8acd555e/redirect
toolchainVendor=JETBRAINS
toolchainVersion=21
+1 -1
View File
@@ -1,5 +1,5 @@
[versions] [versions]
agp = "8.12.1" agp = "9.3.2"
[plugins] [plugins]
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }
+2 -2
View File
@@ -1,6 +1,6 @@
#Thu Aug 14 21:53:58 CST 2025 #Sun Aug 30 01:04:59 CST 2026
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
+1 -1
View File
@@ -16,5 +16,5 @@ dependencyResolutionManagement {
} }
} }
rootProject.name = "Double Tap To Wake" rootProject.name = "App Clone Enabler"
include(":app") include(":app")