Skip to content

Commit 2e1d7cb

Browse files
committed
fix vivo compatibility
1 parent 3b9f9fc commit 2e1d7cb

2 files changed

Lines changed: 46 additions & 18 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ render.experimental.xml
3030
google-services.json
3131

3232
# Android Profiling
33-
*.hprof
33+
*.hprof
34+
35+
/analysis/

app/src/main/java/moe/lyniko/hiderecent/MainHook.kt

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,62 @@ class MainHook : IXposedHookLoadPackage {
1919
}
2020

2121
private fun onAppHooked(lpparam: LoadPackageParam) {
22-
installHook("RecentTasks.isVisibleRecentTask") {
22+
val visibleRecentTaskHook = object : XC_MethodHook() {
23+
override fun beforeHookedMethod(param: MethodHookParam) {
24+
if (shouldRemoveTask(param.args[0])) {
25+
param.result = false
26+
}
27+
}
28+
}
29+
30+
installHook("RecentTasks.isVisibleRecentTask(Task)") {
2331
findAndHookMethod(
2432
"com.android.server.wm.RecentTasks",
2533
lpparam.classLoader,
2634
"isVisibleRecentTask",
2735
"com.android.server.wm.Task",
28-
object : XC_MethodHook() {
29-
override fun beforeHookedMethod(param: MethodHookParam) {
30-
if (shouldRemoveTask(param.args[0])) {
31-
param.result = false
32-
}
33-
}
34-
}
36+
visibleRecentTaskHook
37+
)
38+
}
39+
40+
// Vivo and some OEM ROMs call the two-arg overload directly from getRecentTasksImpl.
41+
installHook("RecentTasks.isVisibleRecentTask(Task,boolean)") {
42+
findAndHookMethod(
43+
"com.android.server.wm.RecentTasks",
44+
lpparam.classLoader,
45+
"isVisibleRecentTask",
46+
"com.android.server.wm.Task",
47+
Boolean::class.javaPrimitiveType,
48+
visibleRecentTaskHook
3549
)
3650
}
3751

52+
val snapshotModeHook = object : XC_MethodHook() {
53+
override fun beforeHookedMethod(param: MethodHookParam) {
54+
if (shouldHideTaskContent(param.args[0])) {
55+
param.result = SNAPSHOT_MODE_APP_THEME
56+
}
57+
}
58+
}
59+
3860
installHook("TaskSnapshotController.getSnapshotMode") {
3961
findAndHookMethod(
4062
"com.android.server.wm.TaskSnapshotController",
4163
lpparam.classLoader,
4264
"getSnapshotMode",
4365
"com.android.server.wm.Task",
44-
object : XC_MethodHook() {
45-
override fun beforeHookedMethod(param: MethodHookParam) {
46-
if (shouldHideTaskContent(param.args[0])) {
47-
param.result = SNAPSHOT_MODE_APP_THEME
48-
}
49-
}
50-
}
66+
snapshotModeHook
67+
)
68+
}
69+
70+
// getSnapshotMode may live on the parent class on some ROMs.
71+
installHook("AbsAppSnapshotController.getSnapshotMode") {
72+
findAndHookMethod(
73+
"com.android.server.wm.AbsAppSnapshotController",
74+
lpparam.classLoader,
75+
"getSnapshotMode",
76+
"com.android.server.wm.Task",
77+
snapshotModeHook
5178
)
5279
}
5380

@@ -90,8 +117,7 @@ class MainHook : IXposedHookLoadPackage {
90117
hookInstaller()
91118
XposedBridge.log("HideRecent: hook installed: $name")
92119
} catch (t: Throwable) {
93-
XposedBridge.log("HideRecent: hook FAILED: $name")
94-
XposedBridge.log(t)
120+
XposedBridge.log("HideRecent: hook skipped ($name): ${t.message}")
95121
}
96122
}
97123

0 commit comments

Comments
 (0)