diff --git a/docs-source/src/.vuepress/configs/template.ts b/docs-source/src/.vuepress/configs/template.ts index aba6da08..5d5850ba 100644 --- a/docs-source/src/.vuepress/configs/template.ts +++ b/docs-source/src/.vuepress/configs/template.ts @@ -34,6 +34,7 @@ const navigationLinks = { baseApiPath + 'hook/xposed/prefs/data/PrefsData', baseApiPath + 'hook/xposed/channel/YukiHookDataChannel', baseApiPath + 'hook/xposed/channel/data/ChannelData', + baseApiPath + 'hook/xposed/channel/priority/ChannelPriority', baseApiPath + 'hook/xposed/application/ModuleApplication', baseApiPath + 'hook/xposed/parasitic/activity/base/ModuleAppActivity', baseApiPath + 'hook/xposed/parasitic/activity/base/ModuleAppCompatActivity', diff --git a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md index f84c3ba6..6b1a5d10 100644 --- a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md +++ b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md @@ -105,11 +105,11 @@ fun put(key: String) ### wait - method ```kotlin:no-line-numbers -fun wait(key: String, result: (value: T) -> Unit) +fun wait(key: String, priority: ChannelPriority?, result: (value: T) -> Unit) ``` ```kotlin:no-line-numbers -fun wait(data: ChannelData, result: (value: T) -> Unit) +fun wait(data: ChannelData, priority: ChannelPriority?, result: (value: T) -> Unit) ``` **Change Records** @@ -120,6 +120,10 @@ fun wait(data: ChannelData, result: (value: T) -> Unit) 移除默认值 `value` +`v1.1.5` `modified` + +新增 `priority` 参数 + **Function Illustrate** > 获取键值数据。 @@ -127,13 +131,17 @@ fun wait(data: ChannelData, result: (value: T) -> Unit) ### wait - method ```kotlin:no-line-numbers -fun wait(key: String, callback: () -> Unit) +fun wait(key: String, priority: ChannelPriority?, callback: () -> Unit) ``` **Change Records** `v1.0.88` `added` +`v1.1.5` `modified` + +新增 `priority` 参数 + **Function Illustrate** > 仅获取监听结果,不获取键值数据。 @@ -147,13 +155,17 @@ fun wait(key: String, callback: () -> Unit) ### checkingVersionEquals - method ```kotlin:no-line-numbers -fun checkingVersionEquals(result: (Boolean) -> Unit) +fun checkingVersionEquals(priority: ChannelPriority?, result: (Boolean) -> Unit) ``` **Change Records** `v1.0.88` `added` +`v1.1.5` `modified` + +新增 `priority` 参数 + **Function Illustrate** > 获取模块与宿主的版本是否匹配。 @@ -163,13 +175,17 @@ fun checkingVersionEquals(result: (Boolean) -> Unit) ### obtainLoggerInMemoryData - method ```kotlin:no-line-numbers -fun obtainLoggerInMemoryData(result: (ArrayList) -> Unit) +fun obtainLoggerInMemoryData(priority: ChannelPriority?, result: (ArrayList) -> Unit) ``` **Change Records** `v1.1.4` `added` +`v1.1.5` `modified` + +新增 `priority` 参数 + **Function Illustrate** > 获取模块与宿主之间的 `ArrayList` 数据。 diff --git a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md new file mode 100644 index 00000000..52883fa5 --- /dev/null +++ b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md @@ -0,0 +1,27 @@ +--- +pageClass: code-page +--- + +::: warning + +The English translation of this page has not been completed, you are welcome to contribute translations to us. + +You can use the **Chrome Translation Plugin** to translate entire pages for reference. + +::: + +# ChannelPriority - class + +```kotlin:no-line-numbers +class ChannelPriority(private val conditions: () -> Boolean) +``` + +**Change Records** + +`v1.1.5` `added` + +**Function Illustrate** + +> 数据通讯桥响应优先级构造类。 + +这个类是对 `YukiHookDataChannel` 的一个扩展用法。 \ No newline at end of file diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md index fc90977f..036dd5af 100644 --- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md +++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md @@ -97,11 +97,11 @@ fun put(key: String) ### wait - method ```kotlin:no-line-numbers -fun wait(key: String, result: (value: T) -> Unit) +fun wait(key: String, priority: ChannelPriority?, result: (value: T) -> Unit) ``` ```kotlin:no-line-numbers -fun wait(data: ChannelData, result: (value: T) -> Unit) +fun wait(data: ChannelData, priority: ChannelPriority?, result: (value: T) -> Unit) ``` **变更记录** @@ -112,6 +112,10 @@ fun wait(data: ChannelData, result: (value: T) -> Unit) 移除默认值 `value` +`v1.1.5` `修改` + +新增 `priority` 参数 + **功能描述** > 获取键值数据。 @@ -119,13 +123,17 @@ fun wait(data: ChannelData, result: (value: T) -> Unit) ### wait - method ```kotlin:no-line-numbers -fun wait(key: String, callback: () -> Unit) +fun wait(key: String, priority: ChannelPriority?, callback: () -> Unit) ``` **变更记录** `v1.0.88` `新增` +`v1.1.5` `修改` + +新增 `priority` 参数 + **功能描述** > 仅获取监听结果,不获取键值数据。 @@ -139,13 +147,17 @@ fun wait(key: String, callback: () -> Unit) ### checkingVersionEquals - method ```kotlin:no-line-numbers -fun checkingVersionEquals(result: (Boolean) -> Unit) +fun checkingVersionEquals(priority: ChannelPriority?, result: (Boolean) -> Unit) ``` **变更记录** `v1.0.88` `新增` +`v1.1.5` `修改` + +新增 `priority` 参数 + **功能描述** > 获取模块与宿主的版本是否匹配。 @@ -155,13 +167,17 @@ fun checkingVersionEquals(result: (Boolean) -> Unit) ### obtainLoggerInMemoryData - method ```kotlin:no-line-numbers -fun obtainLoggerInMemoryData(result: (ArrayList) -> Unit) +fun obtainLoggerInMemoryData(priority: ChannelPriority?, result: (ArrayList) -> Unit) ``` **变更记录** `v1.1.4` `新增` +`v1.1.5` `修改` + +新增 `priority` 参数 + **功能描述** > 获取模块与宿主之间的 `ArrayList` 数据。 diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md new file mode 100644 index 00000000..c4beef9b --- /dev/null +++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md @@ -0,0 +1,19 @@ +--- +pageClass: code-page +--- + +# ChannelPriority - class + +```kotlin:no-line-numbers +class ChannelPriority(private val conditions: () -> Boolean) +``` + +**变更记录** + +`v1.1.5` `新增` + +**功能描述** + +> 数据通讯桥响应优先级构造类。 + +这个类是对 `YukiHookDataChannel` 的一个扩展用法。 \ No newline at end of file diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt index eb57c57f..503e3ecf 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt @@ -48,6 +48,7 @@ import com.highcapable.yukihookapi.hook.log.yLoggerW import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication import com.highcapable.yukihookapi.hook.xposed.bridge.YukiHookBridge import com.highcapable.yukihookapi.hook.xposed.channel.data.ChannelData +import com.highcapable.yukihookapi.hook.xposed.channel.priority.ChannelPriority import com.highcapable.yukihookapi.hook.xposed.helper.YukiHookAppHelper import java.io.Serializable import java.util.concurrent.ConcurrentHashMap @@ -265,25 +266,28 @@ class YukiHookDataChannel private constructor() { /** * 获取键值数据 * @param key 键值名称 + * @param priority 响应优先级 - 默认不设置 * @param result 回调结果数据 */ - fun wait(key: String, result: (value: T) -> Unit) { + fun wait(key: String, priority: ChannelPriority? = null, result: (value: T) -> Unit) { receiverCallbacks[key + keyShortName(CallbackKeyType.SINGLE)] = Pair(context) { action, intent -> - if (action == if (isXposedEnvironment) hostActionName(packageName) else moduleActionName(context)) { - (intent.extras?.get(key + keyNonRepeatName) as? T?)?.let { result(it) } - } + if (priority == null || priority.result) + if (action == if (isXposedEnvironment) hostActionName(packageName) else moduleActionName(context)) + (intent.extras?.get(key + keyNonRepeatName) as? T?)?.let { result(it) } } } /** * 获取键值数据 * @param data 键值实例 + * @param priority 响应优先级 - 默认不设置 * @param result 回调结果数据 */ - fun wait(data: ChannelData, result: (value: T) -> Unit) { + fun wait(data: ChannelData, priority: ChannelPriority? = null, result: (value: T) -> Unit) { receiverCallbacks[data.key + keyShortName(CallbackKeyType.CDATA)] = Pair(context) { action, intent -> - if (action == if (isXposedEnvironment) hostActionName(packageName) else moduleActionName(context)) - (intent.extras?.get(data.key + keyNonRepeatName) as? T?)?.let { result(it) } + if (priority == null || priority.result) + if (action == if (isXposedEnvironment) hostActionName(packageName) else moduleActionName(context)) + (intent.extras?.get(data.key + keyNonRepeatName) as? T?)?.let { result(it) } } } @@ -292,12 +296,14 @@ class YukiHookDataChannel private constructor() { * * - ❗仅限使用 [VALUE_WAIT_FOR_LISTENER] 发送的监听才能被接收 * @param key 键值名称 + * @param priority 响应优先级 - 默认不设置 * @param callback 回调结果 */ - fun wait(key: String, callback: () -> Unit) { + fun wait(key: String, priority: ChannelPriority? = null, callback: () -> Unit) { receiverCallbacks[key + keyShortName(CallbackKeyType.VMFL)] = Pair(context) { action, intent -> - if (action == if (isXposedEnvironment) hostActionName(packageName) else moduleActionName(context)) - if (intent.getStringExtra(key + keyNonRepeatName) == VALUE_WAIT_FOR_LISTENER) callback() + if (priority == null || priority.result) + if (action == if (isXposedEnvironment) hostActionName(packageName) else moduleActionName(context)) + if (intent.getStringExtra(key + keyNonRepeatName) == VALUE_WAIT_FOR_LISTENER) callback() } } @@ -305,10 +311,11 @@ class YukiHookDataChannel private constructor() { * 获取模块与宿主的版本是否匹配 * * 通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况 + * @param priority 响应优先级 - 默认不设置 * @param result 回调是否匹配 */ - fun checkingVersionEquals(result: (Boolean) -> Unit) { - wait(RESULT_MODULE_GENERATED_VERSION) { result(it == YukiHookBridge.moduleGeneratedVersion) } + fun checkingVersionEquals(priority: ChannelPriority? = null, result: (Boolean) -> Unit) { + wait(RESULT_MODULE_GENERATED_VERSION, priority) { result(it == YukiHookBridge.moduleGeneratedVersion) } put(GET_MODULE_GENERATED_VERSION, packageName) } @@ -320,10 +327,11 @@ class YukiHookDataChannel private constructor() { * - ❗模块与宿主必须启用 [YukiHookLogger.Configs.isRecord] 才能获取到调试日志数据 * * - ❗由于 Android 限制了数据传输大小的最大值 - 如果调试日志过多可能会造成 [TransactionTooLargeException] 异常 + * @param priority 响应优先级 - 默认不设置 * @param result 回调 [ArrayList]<[YukiLoggerData]> */ - fun obtainLoggerInMemoryData(result: (ArrayList) -> Unit) { - wait(RESULT_YUKI_LOGGER_INMEMORY_DATA) { result(it) } + fun obtainLoggerInMemoryData(priority: ChannelPriority? = null, result: (ArrayList) -> Unit) { + wait(RESULT_YUKI_LOGGER_INMEMORY_DATA, priority) { result(it) } put(GET_YUKI_LOGGER_INMEMORY_DATA, packageName) } diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.kt new file mode 100644 index 00000000..637ca393 --- /dev/null +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.kt @@ -0,0 +1,45 @@ +/* + * YukiHookAPI - An efficient Kotlin version of the Xposed Hook API. + * Copyright (C) 2019-2022 HighCapable + * https://github.com/fankes/YukiHookAPI + * + * MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * This file is Created by fankes on 2023/1/3. + */ +package com.highcapable.yukihookapi.hook.xposed.channel.priority + +import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel + +/** + * 数据通讯桥响应优先级构造类 + * + * 这个类是对 [YukiHookDataChannel] 的一个扩展用法 + * @param conditions 条件方法体 + */ +class ChannelPriority(private val conditions: () -> Boolean) { + + /** + * 获取条件方法体结果 + * @return [Boolean] + */ + internal val result get() = conditions() +} \ No newline at end of file