From cf92e9f0baf5d57e38cd41845b210fb646c8ae8b Mon Sep 17 00:00:00 2001 From: Henry-ZHR Date: Sat, 27 Apr 2024 20:45:31 +0800 Subject: [PATCH] feat: hide stories from service notifications --- .../ioctl/tmoe/fragment/SettingsFragment.kt | 3 ++ .../tmoe/hook/func/HideServiceStories.kt | 36 +++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 42 insertions(+) create mode 100644 app/src/main/java/cc/ioctl/tmoe/hook/func/HideServiceStories.kt diff --git a/app/src/main/java/cc/ioctl/tmoe/fragment/SettingsFragment.kt b/app/src/main/java/cc/ioctl/tmoe/fragment/SettingsFragment.kt index e301d2a2..975f6b6e 100644 --- a/app/src/main/java/cc/ioctl/tmoe/fragment/SettingsFragment.kt +++ b/app/src/main/java/cc/ioctl/tmoe/fragment/SettingsFragment.kt @@ -125,6 +125,9 @@ class SettingsFragment : BaseHierarchyFragment() { ShowExactLastSeenTime, "ShowExactLastSeenTime", R.string.ShowExactLastSeenTime, "ShowExactLastSeenTimeDesc", R.string.ShowExactLastSeenTimeDesc ) + functionSwitch( + HideServiceStories, "HideServiceStories", R.string.HideServiceStories + ) } category("LostMsgMitigation", R.string.LostMsgMitigation) { functionSwitch( diff --git a/app/src/main/java/cc/ioctl/tmoe/hook/func/HideServiceStories.kt b/app/src/main/java/cc/ioctl/tmoe/hook/func/HideServiceStories.kt new file mode 100644 index 00000000..a43572aa --- /dev/null +++ b/app/src/main/java/cc/ioctl/tmoe/hook/func/HideServiceStories.kt @@ -0,0 +1,36 @@ +package cc.ioctl.tmoe.hook.func + +import cc.ioctl.tmoe.base.annotation.FunctionHookEntry +import cc.ioctl.tmoe.hook.base.CommonDynamicHook +import com.github.kyuubiran.ezxhelper.utils.argTypes +import com.github.kyuubiran.ezxhelper.utils.field +import com.github.kyuubiran.ezxhelper.utils.hookAfter +import com.github.kyuubiran.ezxhelper.utils.loadClass +import com.github.kyuubiran.ezxhelper.utils.method +import com.github.kyuubiran.ezxhelper.utils.staticMethod +import com.github.kyuubiran.ezxhelper.utils.tryOrLogFalse + +@FunctionHookEntry +object HideServiceStories : CommonDynamicHook() { + override fun initOnce(): Boolean = tryOrLogFalse { + // Telegram uses this method to decide if users can hide the stories + // https://github.com/DrKLO/Telegram/blob/a906f12aaec2768969c77650a7e4b377baa6cf2a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java#L4913-L4916 + val mIsService = loadClass("org.telegram.messenger.UserObject").staticMethod( + "isService", + Boolean::class.java, + argTypes(Long::class.java) + ) + val kUser = loadClass("org.telegram.tgnet.TLRPC\$User") + val fHidden = kUser.field("stories_hidden", false, Boolean::class.java) + loadClass("org.telegram.messenger.MessagesController").method( + "getUser", + kUser, + false, + argTypes(Long::class.javaObjectType) + ).hookAfter { param -> + if (isEnabled && mIsService.invoke(null, param.args[0]) == true) { + fHidden.set(param.result, true) + } + } + } +} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 32a4dda8..52953914 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -63,4 +63,5 @@ 最后上线精确到秒 仅对有权限查看用户最后上线时间的用户有效 禁用即时相机 + 隐藏“服务通知”的动态 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index db0a8045..17d5f0a9 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -44,4 +44,5 @@ 新增重新整理訊息按鈕 在聊天選單新增重新整理訊息按鈕 按音量鍵時保持影片靜音 + 隱藏“服務通知”的動態 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index de09f7d0..83a25f7a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -91,4 +91,5 @@ Remove tracking If you click on an ad provided by Telegram, they will track it and might use it as the basis for personalizing the ad.This function is to disable it Disable Instant Camera + Hide stories from service notifications