diff --git a/app/src/main/java/moe/qwq/miko/ActionManager.kt b/app/src/main/java/moe/qwq/miko/ActionManager.kt index 96cfe60..3965989 100644 --- a/app/src/main/java/moe/qwq/miko/ActionManager.kt +++ b/app/src/main/java/moe/qwq/miko/ActionManager.kt @@ -6,6 +6,7 @@ import moe.qwq.miko.hooks.BrowserAccessRestrictions import moe.qwq.miko.actions.FetchService import moe.qwq.miko.actions.* import moe.qwq.miko.hooks.AllowGroupFlashPic +import moe.qwq.miko.hooks.CheckBoxHook import moe.qwq.miko.hooks.DefaultPacketHijacker import moe.qwq.miko.hooks.DisableFlashPictures import moe.qwq.miko.hooks.DisableQRLoginCheck @@ -46,7 +47,8 @@ object ActionManager { QQCrashHook::class.java, OptimizeAtSort::class.java, DisableQRLoginCheck::class.java, - DisableReplyAt::class.java + DisableReplyAt::class.java, + CheckBoxHook::class.java ) private val instanceMap = hashMapOf, IAction>() diff --git a/app/src/main/java/moe/qwq/miko/hooks/CheckBoxHook.kt b/app/src/main/java/moe/qwq/miko/hooks/CheckBoxHook.kt new file mode 100644 index 0000000..a55748b --- /dev/null +++ b/app/src/main/java/moe/qwq/miko/hooks/CheckBoxHook.kt @@ -0,0 +1,29 @@ +package moe.qwq.miko.hooks + +import android.content.Context +import android.widget.CheckBox +import de.robv.android.xposed.XC_MethodHook +import de.robv.android.xposed.XposedBridge +import moe.fuqiuluo.processor.HookAction +import moe.qwq.miko.actions.IAction +import moe.qwq.miko.ext.beforeHook +import moe.qwq.miko.ext.hookMethod +import moe.qwq.miko.internals.setting.QwQSetting + +@HookAction(desc = "默认勾选复选框") +class CheckBoxHook: IAction { + override fun onRun(ctx: Context) { + XposedBridge.hookAllConstructors(CheckBox::class.java, object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + val checkBox = param.thisObject as CheckBox + checkBox.post { checkBox.isChecked = true } + } + }) + val hook = beforeHook { + it.args[0] = true + } + CheckBox::class.java.hookMethod("setChecked", hook) + } + + override val name: String = QwQSetting.CHECK_BOX_HOOK +} \ No newline at end of file diff --git a/app/src/main/java/moe/qwq/miko/hooks/DisableReplyAt.kt b/app/src/main/java/moe/qwq/miko/hooks/DisableReplyAt.kt index ad1c085..42a1aea 100644 --- a/app/src/main/java/moe/qwq/miko/hooks/DisableReplyAt.kt +++ b/app/src/main/java/moe/qwq/miko/hooks/DisableReplyAt.kt @@ -3,11 +3,13 @@ package moe.qwq.miko.hooks import android.content.Context import com.tencent.mobileqq.aio.msg.AIOMsgItem import de.robv.android.xposed.XposedBridge +import moe.fuqiuluo.processor.HookAction import moe.fuqiuluo.xposed.loader.LuoClassloader import moe.qwq.miko.actions.IAction import moe.qwq.miko.ext.beforeHook import moe.qwq.miko.internals.setting.QwQSetting +@HookAction("禁用回复At") class DisableReplyAt: IAction { override fun onRun(ctx: Context) { val replyAt = LuoClassloader.load("com.tencent.mobileqq.aio.input.reply.c") // 混淆的类名 diff --git a/app/src/main/java/moe/qwq/miko/internals/setting/QwQSetting.kt b/app/src/main/java/moe/qwq/miko/internals/setting/QwQSetting.kt index 38be7d1..0dad7db 100644 --- a/app/src/main/java/moe/qwq/miko/internals/setting/QwQSetting.kt +++ b/app/src/main/java/moe/qwq/miko/internals/setting/QwQSetting.kt @@ -6,6 +6,7 @@ import mqq.app.MobileQQ import kotlin.reflect.KProperty object QwQSetting { + const val CHECK_BOX_HOOK: String = "check_box_hook" const val DISABLE_REPLY_AT: String = "disable_reply_at" const val DISABLE_QRLOGIN_CHECK: String = "disable_qrlogin_check" const val DISABLE_QQ_CRASH_REPORT: String = "disable_qq_crash_report" @@ -57,7 +58,8 @@ object QwQSetting { MESSAGE_ENCRYPT to Setting(MESSAGE_ENCRYPT, SettingType.STRING, ""), // 消息加密密钥 DISABLE_QQ_CRASH_REPORT to Setting(DISABLE_QQ_CRASH_REPORT, SettingType.BOOLEAN, true), DISABLE_QRLOGIN_CHECK to Setting(DISABLE_QRLOGIN_CHECK, SettingType.BOOLEAN, true), - DISABLE_REPLY_AT to Setting(DISABLE_REPLY_AT, SettingType.BOOLEAN) + DISABLE_REPLY_AT to Setting(DISABLE_REPLY_AT, SettingType.BOOLEAN), + CHECK_BOX_HOOK to Setting(CHECK_BOX_HOOK, SettingType.BOOLEAN, true) ) val settingUrl: String