From 0d6e388ea8b7171105d984bc274d90f255ba4128 Mon Sep 17 00:00:00 2001 From: MoonLeeeaf <150461955+MoonLeeeaf@users.noreply.github.com> Date: Sat, 3 Aug 2024 10:04:48 +0800 Subject: [PATCH] feat: inject setting button --- .androidide/editor/openedFiles.json | 42 +++++++-------- app/build.gradle | 4 +- .../github/moonleeeaf/fuckmaonemo/Hook.java | 51 ++++++++++++++++++- app/src/main/res/xml/config.xml | 14 ++++- 4 files changed, 85 insertions(+), 26 deletions(-) diff --git a/.androidide/editor/openedFiles.json b/.androidide/editor/openedFiles.json index 9ac754c..0a67edd 100644 --- a/.androidide/editor/openedFiles.json +++ b/.androidide/editor/openedFiles.json @@ -1,32 +1,32 @@ { "allFiles": [ - { - "file": "/storage/emulated/0/MoonLeaf/Projects/FuckMaoNemo/app/src/main/res/xml/config.xml", - "selection": { - "end": { - "column": 83, - "index": 3436, - "line": 97 - }, - "start": { - "column": 83, - "index": 3436, - "line": 97 - } - } - }, { "file": "/storage/emulated/0/MoonLeaf/Projects/FuckMaoNemo/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java", "selection": { "end": { - "column": 58, - "index": 8459, - "line": 207 + "column": 30, + "index": 4201, + "line": 112 }, "start": { - "column": 58, - "index": 8459, - "line": 207 + "column": 30, + "index": 4201, + "line": 112 + } + } + }, + { + "file": "/storage/emulated/0/MoonLeaf/Projects/FuckMaoNemo/app/src/main/res/xml/config.xml", + "selection": { + "end": { + "column": 27, + "index": 461, + "line": 13 + }, + "start": { + "column": 27, + "index": 461, + "line": 13 } } }, diff --git a/app/build.gradle b/app/build.gradle index 9fec826..9e5ea72 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "io.github.moonleeeaf.fuckmaonemo" minSdk 21 targetSdk 33 - versionCode 15000 - versionName "1.5.0" + versionCode 16000 + versionName "1.6.0" vectorDrawables { useSupportLibrary true diff --git a/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java b/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java index c551531..bb13c95 100644 --- a/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java +++ b/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java @@ -1,6 +1,8 @@ package io.github.moonleeeaf.fuckmaonemo; import android.app.Activity; +import android.app.AlertDialog; import android.app.Application; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; @@ -9,7 +11,10 @@ import android.os.Bundle; import android.text.InputFilter; import android.text.Spanned; import android.util.Pair; +import android.view.Menu; +import android.view.View; import android.widget.EditText; +import android.widget.PopupMenu; import android.widget.Toast; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; @@ -98,6 +103,46 @@ public class Hook implements IXposedHookLoadPackage { XposedBridge.log("[FuckMaoNemo] 注入中..."); + // 劫持设置按钮的点击事件 + load("inject_settings_button", () -> { + XposedBridge.log("[FuckMaoNemo] Hook_注入设置菜单"); + XposedBridge.hookMethod( + getMethod( + XposedHelpers.findClass("com.codemao.nemo.fragment.MineFragment", classLoader), + "onClick", + View.class + ), + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam mp) throws Throwable { + View v = (View) mp.args[0]; + if (v.getId() == 2131297099) + v.setId(11451419); + } + @Override + protected void afterHookedMethod(MethodHookParam mp) throws Throwable { + View v = (View) mp.args[0]; + Context c = v.getContext(); + if (v.getId() == 11451419) { + PopupMenu pop = new PopupMenu(c, v); + Menu m = pop.getMenu(); + m.add("Nemo设置").setOnMenuItemClickListener((mm) -> { + c.startActivity(new Intent(c, XposedHelpers.findClass("com.codemao.nemo.activity.SettingActivity", classLoader))); + return false; + }); + m.add("模块设置").setOnMenuItemClickListener((mm) -> { + c.startActivity(new Intent().setComponent(new ComponentName("io.github.moonleeeaf.fuckmaonemo", ConfigActivity.class.getName()))); + return false; + }); + pop.show(); + + mp.setResult(null); + } + } + } + ); + }, true); + // 拦截40x码 load("fuck_40x", () -> { XposedBridge.log("[FuckMaoNemo] Hook_拦截40x码"); @@ -420,7 +465,11 @@ public class Hook implements IXposedHookLoadPackage { } public void load(String pref, Callback cb) { - if (xsp.getBoolean(pref, false)) { + load(pref, cb ,false); + } + + public void load(String pref, Callback cb, boolean def) { + if (xsp.getBoolean(pref, def)) { try { cb.onCallback(); nohengheng++; diff --git a/app/src/main/res/xml/config.xml b/app/src/main/res/xml/config.xml index 34ee824..0e682c2 100644 --- a/app/src/main/res/xml/config.xml +++ b/app/src/main/res/xml/config.xml @@ -8,12 +8,22 @@ + android:summary="编程猫 @满月叶\nGitHub @MoonLeeeaf\nBiliBili @静之彼端\n喵呜~" /> + + + +