From 6e7288e20c7f4cbb8a1e11fd5924cc74794f8d0c Mon Sep 17 00:00:00 2001 From: DDC <643063583@qq.com> Date: Thu, 26 Mar 2026 04:12:02 +0800 Subject: [PATCH] feat: disable PC Manager clipboard region validation --- .../main/res/values-zh-rCN/strings_app.xml | 2 + .../main/res/values-zh-rHK/strings_app.xml | 4 ++ .../core/src/main/res/values/strings_app.xml | 2 + library/core/src/main/res/xml/milink.xml | 8 ++- .../hyperceiler/libhook/app/MiLink.java | 2 + .../DisablePcManagerClipboardRegionCheck.java | 52 +++++++++++++++++++ 6 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/rules/milink/DisablePcManagerClipboardRegionCheck.java diff --git a/library/core/src/main/res/values-zh-rCN/strings_app.xml b/library/core/src/main/res/values-zh-rCN/strings_app.xml index 6c27821f6d..b54c194772 100644 --- a/library/core/src/main/res/values-zh-rCN/strings_app.xml +++ b/library/core/src/main/res/values-zh-rCN/strings_app.xml @@ -971,6 +971,8 @@ 解锁小米妙享 解锁全部应用流转 需要额外勾选 "跨屏协同服务" 作用域 + 关闭电脑管家剪贴板地区校验 + 修复电脑管家向手机或平板同步剪贴板时,因地区不一致被互联互通服务拦截 强制支持摄像头流转 阻止生成乐播投屏相关文件 diff --git a/library/core/src/main/res/values-zh-rHK/strings_app.xml b/library/core/src/main/res/values-zh-rHK/strings_app.xml index 53119765e3..4496d7ff50 100644 --- a/library/core/src/main/res/values-zh-rHK/strings_app.xml +++ b/library/core/src/main/res/values-zh-rHK/strings_app.xml @@ -933,6 +933,10 @@ 互聯互通服務 解鎖小米妙享 + 解鎖全部應用流轉 + 需要額外勾選「跨屏協同服務」作用域 + 關閉電腦管家剪貼簿地區校驗 + 修復電腦管家向手機或平板同步剪貼簿時,因地區不一致被互聯互通服務攔截 強制支持攝像頭流轉 阻止生成樂播投屏相關檔案 diff --git a/library/core/src/main/res/values/strings_app.xml b/library/core/src/main/res/values/strings_app.xml index 040405b6c2..6d9d764925 100644 --- a/library/core/src/main/res/values/strings_app.xml +++ b/library/core/src/main/res/values/strings_app.xml @@ -1033,6 +1033,8 @@ Unlock Device interconnection Unlock all app transfers Requires additionally checking the \"com.xiaomi.mirror\" scope + Disable PC Manager clipboard region validation + Fixes PC to phone or tablet clipboard sync blocked by region mismatch Force support for camera streaming Block generate of hpplay folders diff --git a/library/core/src/main/res/xml/milink.xml b/library/core/src/main/res/xml/milink.xml index 5e12f03d75..e39ebd28be 100644 --- a/library/core/src/main/res/xml/milink.xml +++ b/library/core/src/main/res/xml/milink.xml @@ -32,6 +32,12 @@ android:key="prefs_key_milink_unlock_send_app" android:defaultValue="false" /> + + - \ No newline at end of file + diff --git a/library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/app/MiLink.java b/library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/app/MiLink.java index d530def856..81c0f89e10 100644 --- a/library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/app/MiLink.java +++ b/library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/app/MiLink.java @@ -22,6 +22,7 @@ import com.sevtinge.hyperceiler.common.utils.PrefsBridge; import com.sevtinge.hyperceiler.libhook.base.BaseLoad; import com.sevtinge.hyperceiler.libhook.rules.milink.AllowCameraDevices; +import com.sevtinge.hyperceiler.libhook.rules.milink.DisablePcManagerClipboardRegionCheck; import com.sevtinge.hyperceiler.libhook.rules.milink.FuckHpplay; import com.sevtinge.hyperceiler.libhook.rules.milink.UnlockMiShare; import com.sevtinge.hyperceiler.libhook.rules.milink.UnlockSendApp; @@ -33,6 +34,7 @@ public class MiLink extends BaseLoad { public void onPackageLoaded() { initHook(new UnlockMiShare(), PrefsBridge.getBoolean("milink_unlock_mishare")); initHook(UnlockSendApp.INSTANCE, PrefsBridge.getBoolean("milink_unlock_send_app")); + initHook(new DisablePcManagerClipboardRegionCheck(), PrefsBridge.getBoolean("milink_disable_pc_clipboard_region_check")); initHook(new AllowCameraDevices(), PrefsBridge.getBoolean("milink_allow_camera_devices")); initHook(new FuckHpplay(), PrefsBridge.getBoolean("milink_fuck_hpplay")); } diff --git a/library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/rules/milink/DisablePcManagerClipboardRegionCheck.java b/library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/rules/milink/DisablePcManagerClipboardRegionCheck.java new file mode 100644 index 0000000000..6105c493d8 --- /dev/null +++ b/library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/rules/milink/DisablePcManagerClipboardRegionCheck.java @@ -0,0 +1,52 @@ +/* + * This file is part of HyperCeiler. + + * HyperCeiler is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + + * Copyright (C) 2023-2026 HyperCeiler Contributions + */ +package com.sevtinge.hyperceiler.libhook.rules.milink; + +import android.content.Context; + +import com.sevtinge.hyperceiler.common.log.XposedLog; +import com.sevtinge.hyperceiler.libhook.base.BaseHook; +import com.sevtinge.hyperceiler.libhook.callback.IMethodHook; + +public class DisablePcManagerClipboardRegionCheck extends BaseHook { + @Override + public void init() { + IMethodHook regionCheckHook = returnConstant(true); + IMethodHook regionValueHook = returnConstant("cn"); + + hookRegionUtils("com.xiaomi.dist.universalclipboardservice.utils.LyraUtil", regionCheckHook, regionValueHook); + hookRegionUtils("com.xiaomi.dist.file.service.utils.LyraUtil", regionCheckHook, regionValueHook); + } + + private void hookRegionUtils(String className, IMethodHook regionCheckHook, IMethodHook regionValueHook) { + try { + findAndHookMethod(className, "isSameRegionWithLocal", Context.class, String.class, regionCheckHook); + XposedLog.i(TAG, getPackageName(), "Hooked " + className + "#isSameRegionWithLocal"); + } catch (Throwable t) { + XposedLog.w(TAG, getPackageName(), "Failed to hook " + className + "#isSameRegionWithLocal", t); + } + + try { + findAndHookMethod(className, "getDeviceRegion", Context.class, String.class, regionValueHook); + XposedLog.i(TAG, getPackageName(), "Hooked " + className + "#getDeviceRegion"); + } catch (Throwable t) { + XposedLog.w(TAG, getPackageName(), "Failed to hook " + className + "#getDeviceRegion", t); + } + } +}