From fd4818b0d010af08ebc962d73cc617153759db4a Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Tue, 16 Aug 2022 02:23:30 +0800 Subject: [PATCH] Update demo --- demo-module/build.gradle | 1 + .../yukihookapi/demo_module/hook/HookEntry.kt | 12 ++-- .../hook/factory/ComponentCompatFactory.kt | 58 +++++++++++++++++++ 3 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt diff --git a/demo-module/build.gradle b/demo-module/build.gradle index 72cbe500..7039dc80 100644 --- a/demo-module/build.gradle +++ b/demo-module/build.gradle @@ -50,6 +50,7 @@ android { buildFeatures { viewBinding true } + aaptOptions.additionalParameters '--allow-reserved-package-id', '--package-id', '0x64' } dependencies { diff --git a/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/HookEntry.kt b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/HookEntry.kt index d50376bb..9b9c679a 100644 --- a/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/HookEntry.kt +++ b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/HookEntry.kt @@ -30,12 +30,14 @@ package com.highcapable.yukihookapi.demo_module.hook import android.app.Activity -import android.app.AlertDialog import android.widget.Button +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed import com.highcapable.yukihookapi.demo_module.R import com.highcapable.yukihookapi.demo_module.data.DataConst +import com.highcapable.yukihookapi.demo_module.hook.factory.compatStyle +import com.highcapable.yukihookapi.hook.factory.applyTheme import com.highcapable.yukihookapi.hook.type.android.ActivityClass import com.highcapable.yukihookapi.hook.type.android.BundleClass import com.highcapable.yukihookapi.hook.type.java.StringArrayClass @@ -155,7 +157,7 @@ class HookEntry : IYukiHookXposedInit { // 在执行方法之后拦截 afterHook { if (prefs.getBoolean("show_dialog_when_demo_app_opend")) - AlertDialog.Builder(instance()) + MaterialAlertDialogBuilder(instance().applyTheme(R.style.Theme_Default)) .setTitle("Hooked") .setMessage( "This App has been hooked!\n\n" + @@ -164,7 +166,7 @@ class HookEntry : IYukiHookXposedInit { "Support Resources Hook: ${YukiHookAPI.Status.isSupportResourcesHook}" ) .setPositiveButton("OK", null) - .show() + .show().compatStyle() } } // 注入要 Hook 的方法 @@ -202,7 +204,7 @@ class HookEntry : IYukiHookXposedInit { } // 拦截整个方法 replaceUnit { - AlertDialog.Builder(instance()) + MaterialAlertDialogBuilder(instance().applyTheme(R.style.Theme_Default)) .setTitle("Hooked") .setMessage("I am hook your toast showing!") .setPositiveButton("OK", null) @@ -210,7 +212,7 @@ class HookEntry : IYukiHookXposedInit { dataChannel.put(DataConst.TEST_CN_DATA, value = "I am host, can you hear me?") }.setNeutralButton("REMOVE HOOK") { _, _ -> removeSelf() - }.show() + }.show().compatStyle() } } // 注入要 Hook 的方法 diff --git a/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt new file mode 100644 index 00000000..82d9c8ba --- /dev/null +++ b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt @@ -0,0 +1,58 @@ +/* + * 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 2022/8/16. + */ +package com.highcapable.yukihookapi.demo_module.hook.factory + +import android.graphics.drawable.Drawable +import android.util.TypedValue +import android.widget.Button +import androidx.appcompat.app.AlertDialog +import com.highcapable.yukihookapi.hook.factory.current + +/** + * 修复 [AlertDialog] 对话框按钮在一些宿主中注入模块资源后会发生问题 + * + * 通过反射重新设置按钮的文字颜色和背景 [Drawable] + * @return [AlertDialog] + */ +fun AlertDialog.compatStyle(): AlertDialog { + current().field { name = "mAlert" }.current { + arrayOf( + field { name = "mButtonPositive" }.cast