From 0fa4ed704dafb843a10cf7eeea61449db24754d7 Mon Sep 17 00:00:00 2001 From: Nacho Date: Fri, 3 Oct 2025 15:31:52 +0800 Subject: [PATCH 1/4] fix(BottomShortcutMenu): fix BottomShortcutMenu not work on higher version --- .../ono/hooks/item/chat/BottomShortcutMenu.kt | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt b/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt index 9f37c367..26e8189f 100644 --- a/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt +++ b/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt @@ -4,22 +4,23 @@ import android.annotation.SuppressLint import android.content.Context import android.os.Bundle import android.view.View +import android.view.ViewGroup import android.widget.ImageView +import android.widget.LinearLayout import com.lxj.xpopup.XPopup import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.XC_MethodHook.MethodHookParam import de.robv.android.xposed.XposedHelpers -import moe.ono.bridge.ntapi.ChatTypeConstants.GROUP +import moe.ono.R import moe.ono.config.CacheConfig import moe.ono.config.ConfigManager import moe.ono.constants.Constants -import moe.ono.creator.PacketHelperDialog import moe.ono.creator.FakeFileSender +import moe.ono.creator.PacketHelperDialog import moe.ono.creator.QQMessageTrackerDialog import moe.ono.hooks.XHook import moe.ono.hooks._base.BaseSwitchFunctionHookItem import moe.ono.hooks._core.annotation.HookItem -import moe.ono.hooks._core.factory.HookItemFactory import moe.ono.hooks._core.factory.HookItemFactory.getItem import moe.ono.hooks.base.util.Toasts import moe.ono.hooks.item.developer.QQHookCodec @@ -27,16 +28,14 @@ import moe.ono.hooks.item.developer.QQPacketHelperEntry import moe.ono.hooks.item.sigma.QQMessageTracker import moe.ono.reflex.XMethod import moe.ono.ui.CommonContextWrapper -import moe.ono.util.ContactUtils import moe.ono.util.Initiator import moe.ono.util.Logger -import moe.ono.util.Session import moe.ono.util.SyncUtils @SuppressLint("DiscouragedApi") @HookItem( path = "聊天与消息/快捷菜单", - description = "长按红包或拍照按钮调出快捷菜单,部分功能依赖此选项,推荐开启" + description = "点击聊天页面下方 ONO 图标调出快捷菜单,部分功能依赖此选项,推荐开启" ) class BottomShortcutMenu : BaseSwitchFunctionHookItem() { private val classNames: List = mutableListOf( @@ -52,13 +51,36 @@ class BottomShortcutMenu : BaseSwitchFunctionHookItem() { hookAfter(method) { param: MethodHookParam -> val imageView = param.result as ImageView - if ("红包".contentEquals(imageView.contentDescription) || "拍照".contentEquals(imageView.contentDescription)) { - imageView.setOnLongClickListener { view: View -> - val fixContext = - CommonContextWrapper.createAppCompatContext(imageView.context) - popMenu(fixContext, view) - true - } + if ("拍照".contentEquals(imageView.contentDescription)) { + imageView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { + override fun onViewAttachedToWindow(v: View) { + val parent = v.parent + if (parent is ViewGroup) { + Logger.d(parent::class.java.name) + + val onoImageView = ImageView(parent.context) + onoImageView.setImageResource(R.drawable.ic_ouo) + + val layoutParams = LinearLayout.LayoutParams(0, (28.0f * parent.resources.displayMetrics.density + 0.5f).toInt()) + layoutParams.weight = 1.0f + layoutParams.gravity = 16 + + onoImageView.layoutParams = layoutParams + + onoImageView.setOnClickListener { view -> + val fixContext = + CommonContextWrapper.createAppCompatContext(imageView.context) + popMenu(fixContext, view) + true + } + + parent.addView(onoImageView, 4) + } + } + + override fun onViewDetachedFromWindow(v: View) { + } + }) } } From 969322001e69298681a34e2d2ecc9ffc19cadaee Mon Sep 17 00:00:00 2001 From: Nacho Date: Fri, 3 Oct 2025 18:11:58 +0800 Subject: [PATCH 2/4] fix(BottomShortcutMenu): fix sometimes add two icons --- .../ono/hooks/item/chat/BottomShortcutMenu.kt | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt b/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt index 26e8189f..c4cddbe5 100644 --- a/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt +++ b/app/src/main/java/moe/ono/hooks/item/chat/BottomShortcutMenu.kt @@ -58,23 +58,36 @@ class BottomShortcutMenu : BaseSwitchFunctionHookItem() { if (parent is ViewGroup) { Logger.d(parent::class.java.name) - val onoImageView = ImageView(parent.context) - onoImageView.setImageResource(R.drawable.ic_ouo) + fun foundONO(view: ViewGroup) : Boolean { + for (i in 0 until view.childCount) { + val child = view.getChildAt(i) + if (child.contentDescription == "ONO") { + return true + } + } + return false + } - val layoutParams = LinearLayout.LayoutParams(0, (28.0f * parent.resources.displayMetrics.density + 0.5f).toInt()) - layoutParams.weight = 1.0f - layoutParams.gravity = 16 + if (!foundONO(parent)) { + val onoImageView = ImageView(parent.context) + onoImageView.setImageResource(R.drawable.ic_ouo) + onoImageView.contentDescription = "ONO" - onoImageView.layoutParams = layoutParams + val layoutParams = LinearLayout.LayoutParams(0, (28.0f * parent.resources.displayMetrics.density + 0.5f).toInt()) + layoutParams.weight = 1.0f + layoutParams.gravity = 16 - onoImageView.setOnClickListener { view -> - val fixContext = - CommonContextWrapper.createAppCompatContext(imageView.context) - popMenu(fixContext, view) - true - } + onoImageView.layoutParams = layoutParams - parent.addView(onoImageView, 4) + onoImageView.setOnClickListener { view -> + val fixContext = + CommonContextWrapper.createAppCompatContext(imageView.context) + popMenu(fixContext, view) + true + } + + parent.addView(onoImageView, 4) + } } } From 428e5bd9666ef4c6ab2ff1929c8d7f2e7528819f Mon Sep 17 00:00:00 2001 From: Nacho Date: Fri, 3 Oct 2025 18:20:59 +0800 Subject: [PATCH 3/4] fix(JsonViewerDialog): change title to "Json Viewer" --- .../java/moe/ono/creator/JsonViewerDialog.kt | 38 ++----------------- .../layout_qq_message_fetcher_result.xml | 1 + 2 files changed, 5 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/moe/ono/creator/JsonViewerDialog.kt b/app/src/main/java/moe/ono/creator/JsonViewerDialog.kt index 4ca09847..e69c491f 100644 --- a/app/src/main/java/moe/ono/creator/JsonViewerDialog.kt +++ b/app/src/main/java/moe/ono/creator/JsonViewerDialog.kt @@ -8,6 +8,7 @@ import android.os.Handler import android.os.Looper import android.widget.Button import android.widget.RadioGroup +import android.widget.TextView import com.lxj.xpopup.XPopup import com.lxj.xpopup.core.BasePopupView import com.lxj.xpopup.core.BottomPopupView @@ -29,8 +30,11 @@ class JsonViewerDialog(context: Context) : BottomPopupView(context) { val jsonViewer = findViewById(R.id.rv_json) val btnCopy = findViewById