From 2620adae0e1f5cc75cba5e6c1fc9f842396e8254 Mon Sep 17 00:00:00 2001 From: klxiaoniu Date: Fri, 21 Jul 2023 10:33:08 +0800 Subject: [PATCH] fix: ChatInputHint private chat for QQNT --- .../java/xyz/nextalone/hook/ChatInputHint.kt | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/xyz/nextalone/hook/ChatInputHint.kt b/app/src/main/java/xyz/nextalone/hook/ChatInputHint.kt index 66ed175c89..30904da957 100644 --- a/app/src/main/java/xyz/nextalone/hook/ChatInputHint.kt +++ b/app/src/main/java/xyz/nextalone/hook/ChatInputHint.kt @@ -32,7 +32,6 @@ import android.widget.EditText import android.widget.LinearLayout import android.widget.Toast import cc.ioctl.util.LayoutHelper -import com.github.kyuubiran.ezxhelper.utils.hookAfter import io.github.qauxv.base.IUiItemAgent import io.github.qauxv.base.annotation.FunctionHookEntry import io.github.qauxv.base.annotation.UiItemAgentEntry @@ -43,6 +42,7 @@ import io.github.qauxv.ui.CommonContextWrapper import io.github.qauxv.util.Initiator import io.github.qauxv.util.QQVersion import io.github.qauxv.util.Toasts +import io.github.qauxv.util.dexkit.AIO_InputRootInit_QQNT import io.github.qauxv.util.dexkit.DexKit import io.github.qauxv.util.dexkit.NBaseChatPie_init import io.github.qauxv.util.requireMinQQVersion @@ -55,7 +55,7 @@ import xyz.nextalone.util.throwOrTrue @FunctionHookEntry @UiItemAgentEntry -object ChatInputHint : CommonConfigFunctionHook("na_chat_input_hint", arrayOf(NBaseChatPie_init)) { +object ChatInputHint : CommonConfigFunctionHook("na_chat_input_hint", arrayOf(NBaseChatPie_init, AIO_InputRootInit_QQNT)) { override val name = "输入框增加提示" override val valueState: MutableStateFlow? = null @@ -64,10 +64,19 @@ object ChatInputHint : CommonConfigFunctionHook("na_chat_input_hint", arrayOf(NB override fun initOnce(): Boolean = throwOrTrue { if (requireMinQQVersion(QQVersion.QQ_8_9_63)) { - "Lcom/tencent/mobileqq/aio/input/b/c;->l()V".method.hookAfter { param -> + // 初始化后 + DexKit.requireMethodFromCache(AIO_InputRootInit_QQNT).hookAfter(this) { + it.thisObject.javaClass.declaredFields.single { it.type == EditText::class.java }.apply { + isAccessible = true + val et = get(it.thisObject) as EditText + et.hint = getValue() + } + } + // 群设置hint为空后 + "Lcom/tencent/mobileqq/aio/input/b/c;->l()V".method.hookAfter(this) { param -> val f = param.thisObject.javaClass.getDeclaredField("f").apply { isAccessible = true }.get(param.thisObject) val b = f.javaClass.getDeclaredField("b").apply { isAccessible = true }.get(f) as EditText - b.hint = getDefaultConfig().getStringOrDefault(strCfg, "Typing words...") + b.hint = getValue() } } else { DexKit.requireMethodFromCache(NBaseChatPie_init).hookAfter(this) { @@ -81,7 +90,7 @@ object ChatInputHint : CommonConfigFunctionHook("na_chat_input_hint", arrayOf(NB break } } - aioRootView?.findHostView("input")?.hint = getDefaultConfig().getStringOrDefault(strCfg, "Typing words...") + aioRootView?.findHostView("input")?.hint = getValue() } } } @@ -92,6 +101,8 @@ object ChatInputHint : CommonConfigFunctionHook("na_chat_input_hint", arrayOf(NB showInputHintDialog(activity) } + private fun getValue(): String = getDefaultConfig().getStringOrDefault(strCfg, "Typing words...") + private fun showInputHintDialog(activity: Context) { val ctx = CommonContextWrapper.createAppCompatContext(activity) val dialog = androidx.appcompat.app.AlertDialog.Builder(ctx) @@ -99,12 +110,7 @@ object ChatInputHint : CommonConfigFunctionHook("na_chat_input_hint", arrayOf(NB editText.textSize = 16f val _5 = LayoutHelper.dip2px(activity, 5f) editText.setPadding(_5, _5, _5, _5 * 2) - editText.setText( - getDefaultConfig().getStringOrDefault( - strCfg, - "Typing words..." - ) - ) + editText.setText(getValue()) val checkBox = CheckBox(ctx) checkBox.text = "开启输入框文字提示" checkBox.isChecked = isEnabled