diff --git a/app/build.gradle b/app/build.gradle index 07b5b4d..7c478bb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "io.github.moonleeeaf.fuckmaonemo" minSdk 21 targetSdk 33 - versionCode 17000 - versionName "1.7.0" + versionCode 18000 + versionName "1.8.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 4adfd63..b850e7d 100644 --- a/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java +++ b/app/src/main/java/io/github/moonleeeaf/fuckmaonemo/Hook.java @@ -14,6 +14,7 @@ import android.text.Spanned; import android.util.Pair; import android.view.Menu; import android.view.View; +import android.webkit.CookieManager; import android.widget.EditText; import android.widget.PopupMenu; import android.widget.Toast; @@ -27,6 +28,7 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.net.Proxy; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -196,6 +198,43 @@ public class Hook implements IXposedHookLoadPackage { ); }); + // 劫持分享菜单 + load("long_press_share_work_to_open_more_menu", () -> { + XposedBridge.log("[FuckMaoNemo] 长按作品分享更多菜单"); + XposedBridge.hookMethod( + getMethod( + XposedHelpers.findClass("com.codemao.nemo.activity.WorkDetailActivity", classLoader), + "onCreate", + Bundle.class + ), + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam mp) throws Throwable { + Activity self = (Activity) mp.thisObject; + View v = self.findViewById( + XposedHelpers.getStaticIntField( + XposedHelpers.findClass("com.codemao.nemo.R$id", classLoader), + "ll_share" + ) + ); + + long workId = XposedHelpers.getLongField(self, "workId"); + + v.setOnLongClickListener((_v) -> { + PopupMenu pop = new PopupMenu(self, v); + Menu m = pop.getMenu(); + m.add("获取分享口令").setOnMenuItemClickListener((mm) -> { + openWorkShareCodeGetter(workId); + return false; + }); + pop.show(); + return false; + }); + } + } + ); + }); + load("test", () -> { methodToVoid( getMethod( @@ -604,7 +643,7 @@ public class Hook implements IXposedHookLoadPackage { public interface Callback { public void onCallback() throws Exception; } - + public void methodToVoid(Method m) { XposedBridge.hookMethod(m, new XC_MethodReplacement() { @Override @@ -630,6 +669,24 @@ public class Hook implements IXposedHookLoadPackage { } } + public void openWorkShareCodeGetter(long workId) { + try { + Context self = getApplication(); + String cookie = CookieManager.getInstance().getCookie("https://api.codemao.cn"); + int a = cookie.indexOf(";", cookie.indexOf("Bearer ")); + String token = cookie.substring(cookie.indexOf("Bearer ") + "Bearer ".length(), a == -1 ? cookie.length() : a - 1); + + // XposedBridge.log("cookie=" + cookie); + // XposedBridge.log("token=" + token); + self.startActivity(new Intent().setFlags(Intent.FLAG_ACTIVITY_NEW_TASK).setData(Uri.parse("nemo://com.codemao.nemo/openwith?type=5&url=" + + URLEncoder.encode("https://moonbcmtools.github.io/CodemaoNemoOneKeyBuildShareCode/?token=" + token + "&workId=" + workId, "utf-8") + ))); + } catch(Exception e) { + XposedBridge.log(e); + // Toast.makeText(self, "[FuckMaoNemo] " + e, Toast.LENGTH_LONG).show(); + } + } + public static class NewestWorksFilter { private String type; private String value; diff --git a/app/src/main/res/xml/config.xml b/app/src/main/res/xml/config.xml index a64b2f5..be3cd3d 100644 --- a/app/src/main/res/xml/config.xml +++ b/app/src/main/res/xml/config.xml @@ -78,6 +78,11 @@ android:title="绕过防沉迷" android:summary="滞空防沉迷检测方法的调用实现无伤速通破解防沉迷,无需 Player 链接,不支持叽叽猫砸进里面的岛3,不支持内嵌社区网页的防沉迷,那不属于我的能力范围" /> + +