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