From 775c28a7aa7c18f53ecd7b1d5116f45ad82c0204 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sat, 14 May 2022 18:44:24 +0800 Subject: [PATCH] Added module home page --- README.md | 2 +- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 26 ++ .../fankes/apperrorstracking/const/Const.kt | 21 ++ .../apperrorstracking/data/DataConst.kt | 29 ++ .../hook/entity/FrameworkHooker.kt | 4 + .../apperrorstracking/locale/LocaleString.kt | 48 +++ .../ui/activity/main/MainActivity.kt | 102 ++++++ .../ui/view/MaterialSwitch.kt | 74 +++++ .../utils/factory/FunctionFactory.kt | 58 +++- .../utils/tool/FrameworkTool.kt | 41 +++ .../main/res/drawable-night/bg_dark_round.xml | 6 + app/src/main/res/drawable/bg_dark_round.xml | 6 + app/src/main/res/drawable/bg_green_round.xml | 6 + app/src/main/res/drawable/bg_orange_round.xml | 6 + app/src/main/res/drawable/bg_yellow_round.xml | 6 + app/src/main/res/layout/activity_main.xml | 308 ++++++++++++++++++ app/src/main/res/mipmap-xxhdpi/ic_about.png | Bin 0 -> 4357 bytes app/src/main/res/mipmap-xxhdpi/ic_github.png | Bin 0 -> 5987 bytes app/src/main/res/mipmap-xxhdpi/ic_home.png | Bin 0 -> 4999 bytes app/src/main/res/mipmap-xxhdpi/ic_restart.png | Bin 0 -> 4880 bytes app/src/main/res/mipmap-xxhdpi/ic_success.png | Bin 0 -> 4948 bytes app/src/main/res/mipmap-xxhdpi/ic_warn.png | Bin 0 -> 4102 bytes .../main/res/mipmap-xxhdpi/ic_yukihookapi.png | Bin 0 -> 8490 bytes app/src/main/res/values-ja/strings.xml | 21 +- app/src/main/res/values-zh-rCN/strings.xml | 17 + app/src/main/res/values-zh-rHK/strings.xml | 17 + app/src/main/res/values-zh-rMO/strings.xml | 17 + app/src/main/res/values-zh-rTW/strings.xml | 17 + app/src/main/res/values/strings.xml | 17 + 30 files changed, 844 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/fankes/apperrorstracking/data/DataConst.kt create mode 100644 app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt create mode 100644 app/src/main/java/com/fankes/apperrorstracking/ui/view/MaterialSwitch.kt create mode 100755 app/src/main/res/drawable-night/bg_dark_round.xml create mode 100755 app/src/main/res/drawable/bg_dark_round.xml create mode 100755 app/src/main/res/drawable/bg_green_round.xml create mode 100755 app/src/main/res/drawable/bg_orange_round.xml create mode 100755 app/src/main/res/drawable/bg_yellow_round.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_about.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_github.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_home.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_restart.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_success.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_warn.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_yukihookapi.png diff --git a/README.md b/README.md index f9f36b9..3567e72 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Added more features to app's crash dialog, fixed custom rom deleted dialog, the 此项目依然在开发中,现在未解决的问题和包含的问题如下 -- 排除列表和模块主界面功能正在开发 +- 排除列表以及更多功能正在开发 - 后台进程可能依然会弹出崩溃对话框且开发者选项里的设置无效,还在排查 diff --git a/app/build.gradle b/app/build.gradle index 288f5b2..fe4ca07 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,6 +61,7 @@ dependencies { compileOnly 'de.robv.android.xposed:api:82' implementation 'com.highcapable.yukihookapi:api:1.0.87' ksp 'com.highcapable.yukihookapi:ksp-xposed:1.0.87' + implementation "com.github.topjohnwu.libsu:core:3.1.2" implementation 'com.geyifeng.immersionbar:immersionbar:3.2.0' implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.0' implementation 'androidx.core:core-ktx:1.7.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4e724c2..f6e9a1f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,6 +28,32 @@ android:name="xposedscope" android:resource="@array/module_scope" /> + + + + + + + + + + + + + + + + + + + * + * This file is Created by fankes on 2022/5/14. + */ +package com.fankes.apperrorstracking.data + +import com.highcapable.yukihookapi.hook.xposed.prefs.data.PrefsData + +object DataConst { + + val ENABLE_HIDE_ICON = PrefsData("_hide_icon", false) +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt b/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt index 297525b..89c99a2 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/hook/entity/FrameworkHooker.kt @@ -119,6 +119,10 @@ object FrameworkHooker : YukiBaseHooker() { if (it.isNotBlank()) context?.sendBroadcast(Intent().apply { action = Const.ACTION_MODULE_HANDLER_RECEIVER when (it) { + Const.TYPE_MODULE_VERSION_VERIFY -> { + putExtra(Const.TAG_MODULE_VERSION_VERIFY, Const.MODULE_VERSION_VERIFY) + putExtra(Const.KEY_MODULE_HOST_FETCH, Const.TYPE_MODULE_VERSION_VERIFY) + } Const.TYPE_APP_ERRORS_DATA_GET -> { putExtra(Const.TAG_APP_ERRORS_DATA_GET_CONTENT, appErrorsRecords) putExtra(Const.KEY_MODULE_HOST_FETCH, Const.TYPE_APP_ERRORS_DATA_GET) diff --git a/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt b/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt index 7ad2b08..4b5fc79 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/locale/LocaleString.kt @@ -250,4 +250,52 @@ object LocaleString { /** @string Automatic generated */ fun dontScreenshotTip(vararg objArrs: Any) = R.string.dont_screenshot_tip.bind(*objArrs) + + /** @string Automatic generated */ + val moduleVersion get() = moduleVersion() + + /** @string Automatic generated */ + fun moduleVersion(vararg objArrs: Any) = R.string.module_version.bind(*objArrs) + + /** @string Automatic generated */ + val systemVersion get() = systemVersion() + + /** @string Automatic generated */ + fun systemVersion(vararg objArrs: Any) = R.string.system_version.bind(*objArrs) + + /** @string Automatic generated */ + val areYouSureRestartSystem get() = areYouSureRestartSystem() + + /** @string Automatic generated */ + fun areYouSureRestartSystem(vararg objArrs: Any) = R.string.are_your_sure_restart_system.bind(*objArrs) + + /** @string Automatic generated */ + val fastRestart get() = fastRestart() + + /** @string Automatic generated */ + fun fastRestart(vararg objArrs: Any) = R.string.fast_restart.bind(*objArrs) + + /** @string Automatic generated */ + val accessRootFail get() = accessRootFail() + + /** @string Automatic generated */ + fun accessRootFail(vararg objArrs: Any) = R.string.access_root_fail.bind(*objArrs) + + /** @string Automatic generated */ + val moduleNotActivated get() = moduleNotActivated() + + /** @string Automatic generated */ + fun moduleNotActivated(vararg objArrs: Any) = R.string.module_not_activated.bind(*objArrs) + + /** @string Automatic generated */ + val moduleIsActivated get() = moduleIsActivated() + + /** @string Automatic generated */ + fun moduleIsActivated(vararg objArrs: Any) = R.string.module_is_activated.bind(*objArrs) + + /** @string Automatic generated */ + val moduleNotFullyActivated get() = moduleNotFullyActivated() + + /** @string Automatic generated */ + fun moduleNotFullyActivated(vararg objArrs: Any) = R.string.module_not_fully_activated.bind(*objArrs) } \ No newline at end of file diff --git a/app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt new file mode 100644 index 0000000..ad84137 --- /dev/null +++ b/app/src/main/java/com/fankes/apperrorstracking/ui/activity/main/MainActivity.kt @@ -0,0 +1,102 @@ +/* + * AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/KitsunePie/AppErrorsTracking + * + * This software is non-free but opensource 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, or any later version. + * + * This software 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 + * and eula along with this software. If not, see + * + * + * This file is Created by fankes on 2022/5/14. + */ +@file:Suppress("SetTextI18n") + +package com.fankes.apperrorstracking.ui.activity.main + +import android.content.ComponentName +import android.content.pm.PackageManager +import android.os.Build +import androidx.core.view.isVisible +import com.fankes.apperrorstracking.R +import com.fankes.apperrorstracking.const.Const +import com.fankes.apperrorstracking.data.DataConst +import com.fankes.apperrorstracking.databinding.ActivityMainBinding +import com.fankes.apperrorstracking.locale.LocaleString +import com.fankes.apperrorstracking.ui.activity.base.BaseActivity +import com.fankes.apperrorstracking.utils.factory.openBrowser +import com.fankes.apperrorstracking.utils.tool.FrameworkTool +import com.highcapable.yukihookapi.hook.factory.isXposedModuleActive +import com.highcapable.yukihookapi.hook.factory.modulePrefs +import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus + +class MainActivity : BaseActivity() { + + /** 模块是否有效 */ + private var isModuleValied = false + + override fun onCreate() { + binding.mainTextVersion.text = LocaleString.moduleVersion(Const.MODULE_VERSION_NAME) + binding.mainTextSystemVersion.text = + LocaleString.systemVersion("${Build.VERSION.RELEASE} (API ${Build.VERSION.SDK_INT}) ${Build.DISPLAY}") + binding.hideIconInLauncherSwitch.isChecked = modulePrefs.get(DataConst.ENABLE_HIDE_ICON) + binding.hideIconInLauncherSwitch.setOnCheckedChangeListener { btn, b -> + if (btn.isPressed.not()) return@setOnCheckedChangeListener + modulePrefs.put(DataConst.ENABLE_HIDE_ICON, b) + packageManager.setComponentEnabledSetting( + ComponentName(packageName, "${Const.MODULE_PACKAGE_NAME}.Home"), + if (b) PackageManager.COMPONENT_ENABLED_STATE_DISABLED else PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP + ) + } + /** 重启按钮点击事件 */ + binding.titleRestartIcon.setOnClickListener { FrameworkTool.restartSystem(context = this) } + /** 项目地址按钮点击事件 */ + binding.titleGithubIcon.setOnClickListener { openBrowser(url = "https://github.com/KitsunePie/AppErrorsTracking") } + } + + /** 刷新模块状态 */ + private fun refreshModuleStatus() { + binding.mainLinStatus.setBackgroundResource( + when { + isXposedModuleActive && isModuleValied.not() -> R.drawable.bg_yellow_round + isXposedModuleActive -> R.drawable.bg_green_round + else -> R.drawable.bg_dark_round + } + ) + binding.mainImgStatus.setImageResource( + when { + isXposedModuleActive -> R.mipmap.ic_success + else -> R.mipmap.ic_warn + } + ) + binding.mainTextStatus.text = + when { + isXposedModuleActive && isModuleValied.not() -> LocaleString.moduleNotFullyActivated + isXposedModuleActive -> LocaleString.moduleIsActivated + else -> LocaleString.moduleNotActivated + } + binding.mainTextApiWay.isVisible = isXposedModuleActive + binding.mainTextApiWay.text = "Activated by ${YukiHookModuleStatus.executorName} API ${YukiHookModuleStatus.executorVersion}" + } + + override fun onResume() { + super.onResume() + /** 刷新模块状态 */ + refreshModuleStatus() + /** 发送广播检查模块激活状态 */ + FrameworkTool.checkingActivated(context = this) { isValied -> + isModuleValied = isValied + refreshModuleStatus() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/apperrorstracking/ui/view/MaterialSwitch.kt b/app/src/main/java/com/fankes/apperrorstracking/ui/view/MaterialSwitch.kt new file mode 100644 index 0000000..bd617ec --- /dev/null +++ b/app/src/main/java/com/fankes/apperrorstracking/ui/view/MaterialSwitch.kt @@ -0,0 +1,74 @@ +/* + * AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer. + * Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com) + * https://github.com/KitsunePie/AppErrorsTracking + * + * This software is non-free but opensource 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, or any later version. + * + * This software 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 + * and eula along with this software. If not, see + * + * + * This file is Created by fankes on 2022/5/14. + */ +@file:Suppress("SameParameterValue") + +package com.fankes.apperrorstracking.ui.view + +import android.content.Context +import android.content.res.ColorStateList +import android.graphics.Color +import android.text.TextUtils +import android.util.AttributeSet +import androidx.appcompat.widget.SwitchCompat +import com.fankes.apperrorstracking.utils.drawable.drawabletoolbox.DrawableBuilder +import com.fankes.apperrorstracking.utils.factory.dp +import com.fankes.apperrorstracking.utils.factory.isSystemInDarkMode + +class MaterialSwitch(context: Context, attrs: AttributeSet?) : SwitchCompat(context, attrs) { + + private fun toColors(selected: Int, pressed: Int, normal: Int): ColorStateList { + val colors = intArrayOf(selected, pressed, normal) + val states = arrayOfNulls(3) + states[0] = intArrayOf(android.R.attr.state_checked) + states[1] = intArrayOf(android.R.attr.state_pressed) + states[2] = intArrayOf() + return ColorStateList(states, colors) + } + + private val thumbColor get() = if (context.isSystemInDarkMode) 0xFF7C7C7C else 0xFFCCCCCC + + init { + trackDrawable = DrawableBuilder() + .rectangle() + .rounded() + .solidColor(0xFF656565.toInt()) + .height(20.dp(context)) + .cornerRadius(15.dp(context)) + .build() + thumbDrawable = DrawableBuilder() + .rectangle() + .rounded() + .solidColor(Color.WHITE) + .size(20.dp(context), 20.dp(context)) + .cornerRadius(20.dp(context)) + .strokeWidth(8.dp(context)) + .strokeColor(Color.TRANSPARENT) + .build() + trackTintList = toColors( + 0xFF656565.toInt(), + thumbColor.toInt(), + thumbColor.toInt() + ) + isSingleLine = true + ellipsize = TextUtils.TruncateAt.END + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt b/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt index 4a46521..c5e4e63 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/utils/factory/FunctionFactory.kt @@ -28,16 +28,19 @@ import android.app.Service import android.content.* import android.content.pm.PackageManager import android.content.res.Configuration +import android.graphics.Color import android.graphics.drawable.Drawable import android.net.Uri import android.provider.Settings import android.widget.Toast import androidx.core.content.res.ResourcesCompat -import com.fankes.apperrorstracking.BuildConfig import com.fankes.apperrorstracking.R +import com.fankes.apperrorstracking.const.Const import com.fankes.apperrorstracking.locale.LocaleString +import com.google.android.material.snackbar.Snackbar import com.highcapable.yukihookapi.hook.factory.field import com.highcapable.yukihookapi.hook.type.android.ApplicationInfoClass +import com.topjohnwu.superuser.Shell /** * 系统深色模式是否开启 @@ -114,6 +117,19 @@ fun Context.appIcon(packageName: String) = */ fun Context.toast(msg: String) = Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() +/** + * 弹出 [Snackbar] + * @param msg 提示内容 + * @param actionText 按钮文本 - 不写默认取消按钮 + * @param it 按钮事件回调 + */ +fun Context.snake(msg: String, actionText: String = "", it: () -> Unit = {}) = + Snackbar.make((this as Activity).findViewById(android.R.id.content), msg, Snackbar.LENGTH_LONG).apply { + if (actionText.isBlank()) return@apply + setActionTextColor(if (isSystemInDarkMode) Color.BLACK else Color.WHITE) + setAction(actionText) { it() } + }.show() + /** * 跳转到指定页面 * @@ -125,7 +141,7 @@ inline fun Context.navigate(isOutSide: Boolean = false, c startActivity((if (isOutSide) Intent() else Intent(if (this is Service) applicationContext else this, T::class.java)).apply { flags = if (this@navigate !is Activity) Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK else Intent.FLAG_ACTIVITY_NEW_TASK - if (isOutSide) component = ComponentName(BuildConfig.APPLICATION_ID, T::class.java.name) + if (isOutSide) component = ComponentName(Const.MODULE_PACKAGE_NAME, T::class.java.name) callback(this) }) }.onFailure { toast(msg = "Start ${T::class.java.name} failed") } @@ -155,6 +171,24 @@ fun Context.openSelfSetting(packageName: String = this.packageName) = runCatchin }) }.onFailure { toast(msg = "Cannot open '$packageName'") } +/** + * 启动系统浏览器 + * @param url 网址 + * @param packageName 指定包名 - 可不填 + */ +fun Context.openBrowser(url: String, packageName: String = "") = runCatching { + startActivity(Intent().apply { + if (packageName.isNotBlank()) setPackage(packageName) + action = Intent.ACTION_VIEW + data = Uri.parse(url) + /** 防止顶栈一样重叠在自己的 APP 中 */ + flags = Intent.FLAG_ACTIVITY_NEW_TASK + }) +}.onFailure { + if (packageName.isNotBlank()) snake(msg = "Cannot start '$packageName'") + else snake(msg = "Start system browser failed") +} + /** * 当前 APP 是否可被启动 * @param packageName 包名 @@ -170,4 +204,22 @@ fun Context.openApp(packageName: String = this.packageName) = runCatching { startActivity(packageManager.getLaunchIntentForPackage(packageName)?.apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK }) -}.onFailure { toast(msg = "Cannot start '$packageName'") } \ No newline at end of file +}.onFailure { toast(msg = "Cannot start '$packageName'") } + +/** + * 是否有 Root 权限 + * @return [Boolean] + */ +val isRootAccess get() = runCatching { Shell.rootAccess() }.getOrNull() ?: false + +/** + * 执行命令 + * @param cmd 命令 + * @param isSu 是否使用 Root 权限执行 - 默认:是 + * @return [String] 执行结果 + */ +fun execShell(cmd: String, isSu: Boolean = true) = runCatching { + (if (isSu) Shell.su(cmd) else Shell.sh(cmd)).exec().out.let { + if (it.isNotEmpty()) it[0].trim() else "" + } +}.getOrNull() ?: "" \ No newline at end of file diff --git a/app/src/main/java/com/fankes/apperrorstracking/utils/tool/FrameworkTool.kt b/app/src/main/java/com/fankes/apperrorstracking/utils/tool/FrameworkTool.kt index 65a9c25..0888e7e 100644 --- a/app/src/main/java/com/fankes/apperrorstracking/utils/tool/FrameworkTool.kt +++ b/app/src/main/java/com/fankes/apperrorstracking/utils/tool/FrameworkTool.kt @@ -29,6 +29,11 @@ import android.content.Intent import android.content.IntentFilter import com.fankes.apperrorstracking.bean.AppErrorsInfoBean import com.fankes.apperrorstracking.const.Const +import com.fankes.apperrorstracking.locale.LocaleString +import com.fankes.apperrorstracking.utils.factory.execShell +import com.fankes.apperrorstracking.utils.factory.isRootAccess +import com.fankes.apperrorstracking.utils.factory.showDialog +import com.fankes.apperrorstracking.utils.factory.snake import com.highcapable.yukihookapi.hook.log.loggerE import java.io.Serializable @@ -37,6 +42,9 @@ import java.io.Serializable */ object FrameworkTool { + /** 回调模块激活状态 */ + private var onModuleActiveStatusCallback: ((Boolean) -> Unit)? = null + /** 回调获取的 APP 异常信息 */ private var onAppErrorsInfoDataCallback: ((ArrayList) -> Unit)? = null @@ -54,6 +62,8 @@ object FrameworkTool { runCatching { intent.getStringExtra(Const.KEY_MODULE_HOST_FETCH)?.also { if (it.isNotBlank()) when (it) { + Const.TYPE_MODULE_VERSION_VERIFY -> + onModuleActiveStatusCallback?.invoke(intent.getStringExtra(Const.TAG_MODULE_VERSION_VERIFY) == Const.MODULE_VERSION_VERIFY) Const.TYPE_APP_ERRORS_DATA_GET -> runCatching { onAppErrorsInfoDataCallback?.invoke( intent.getSerializableExtra(Const.TAG_APP_ERRORS_DATA_GET_CONTENT) as ArrayList @@ -69,6 +79,27 @@ object FrameworkTool { } } + /** + * 重启系统 + * @param context 实例 + */ + fun restartSystem(context: Context) = + context.showDialog { + title = LocaleString.notice + msg = LocaleString.areYouSureRestartSystem + confirmButton { + if (isRootAccess) + execShell(cmd = "reboot") + else context.snake(LocaleString.accessRootFail) + } + neutralButton(LocaleString.fastRestart) { + if (isRootAccess) + execShell(cmd = "killall zygote") + else context.snake(LocaleString.accessRootFail) + } + cancelButton() + } + /** * 发送广播 * @param context 实例 @@ -92,6 +123,16 @@ object FrameworkTool { }) } + /** + * 检查模块是否激活 + * @param context 实例 + * @param it 成功后回调 - ([Boolean] 是否激活) + */ + fun checkingActivated(context: Context, it: (Boolean) -> Unit) { + onModuleActiveStatusCallback = it + pushReceiver(context, Const.TYPE_MODULE_VERSION_VERIFY) + } + /** * 获取 APP 异常信息数组 * @param context 实例 diff --git a/app/src/main/res/drawable-night/bg_dark_round.xml b/app/src/main/res/drawable-night/bg_dark_round.xml new file mode 100755 index 0000000..71baadb --- /dev/null +++ b/app/src/main/res/drawable-night/bg_dark_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_dark_round.xml b/app/src/main/res/drawable/bg_dark_round.xml new file mode 100755 index 0000000..ccc45c0 --- /dev/null +++ b/app/src/main/res/drawable/bg_dark_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_green_round.xml b/app/src/main/res/drawable/bg_green_round.xml new file mode 100755 index 0000000..5ac75d3 --- /dev/null +++ b/app/src/main/res/drawable/bg_green_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_orange_round.xml b/app/src/main/res/drawable/bg_orange_round.xml new file mode 100755 index 0000000..043d002 --- /dev/null +++ b/app/src/main/res/drawable/bg_orange_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_yellow_round.xml b/app/src/main/res/drawable/bg_yellow_round.xml new file mode 100755 index 0000000..215bdc4 --- /dev/null +++ b/app/src/main/res/drawable/bg_yellow_round.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..fef047f --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/ic_about.png b/app/src/main/res/mipmap-xxhdpi/ic_about.png new file mode 100644 index 0000000000000000000000000000000000000000..12a0dda1890ae23287760900f7e40a3a2867489e GIT binary patch literal 4357 zcmV+g5&G_lP)k;_k5=AA3X%3g0?tdnt&ox}@$t>gW^)TOZ$ZS(05Bpy%=}8n zaTb5K{uZea@uvVVFTcYuT>LG6%MUZ3K*Zy&>mHw)nmSQsX|XDe*IK`knJ-4f^CE}@ zrZ)k=P(~Uw5b=A=d|Y5-=BE(xVc++^pHY3eGFw`(Mn^}_b6xk>0N?@uxC8*s%8ByN z1Hd-`;E86l`H$1n(@*8ZFQaah3M{46nZEl1Jv(0pKtZ-CqQU#3 zuxhp1*&_KnDI?cl)oQh^VHnB?B|kD++4QqDvpL6c=IZtO z(|HvnmtgJPyZ2QaHf*>F0OZG}wH26LSXh{xnVI=X-bBhBSXyg&6@k=DnnJHMF=j}tp z>Ev$N5?L$2%%edN9LlPm%)ruGe}b7mla=GvZh8d}@n+xm|1`a&)fO@VODVM%05bbD zWFbU_ZSEtY8Pn}I4wmP6zlDfjGwrCgmz@I4d|40#e`B%+qhM*R-_6W&0>!3+DS(KV z_`d&5Q*Ijr%k#W8eeD^nXg}4LdaXF8<-R&RJbdls_F7={m)ZId1%{)X@Sf7h+!qf`Nr zvFvG*h(4aAk%_>Hj%YoWq=KU4Z8n>)nVz2h?&^y{Z3qsVuPiWx&Z*b5Z7?Q@_mDdBv@Obq?D3Kff6*W z5(yD+h zov^oe@TpU$etvd#_EeHiS4zoRR^N|SCGpX8UPL_L`~D}o+3gBe6iVn=H$z4L|7Np! ze$tb}N-0?&mV>vIN{-`f>lQ+(D_BY?IjyWJpj@J_)Sl;^gNU*`QN@!-L_~T$Ce{T@ zDJ9YKWYx7QLC>}mQLN<@rIdV;kuNk=O!KbmZd)(1U^lQTHHSdNBQL)A;#IS=vkU9d z;(6XRi1_6y64ln`2_o9RmIiBr6$O%&(W+`OKmQgHulIfbKRSu#dEW0MqVdBA1%&kZ zjT<*^TPxu1nqXJHv_|GrB^wN_y214T2&?FbrnB6Cfaz&(vXb;4aafLt=H?z?*3T?mQw0w z0Qi$^e6Utas=zHov@A|XC$QujQPFSFDrx`awpmAs=xy!ZEd$H*yekm#tGRXGI+j}n znECxd5d3w^!DV16r6fR_+^l7jRUoMXcMy@>d9;{Tg7pFb{7O=bHosK>0REkbmO?Bn zfn|ewSUA!u&>mD|2`sI(X6AZYdd21YkdzhUsYXMY|GOsfQa|{ zzP}j9V`;=vO4<2UT4indrFqsOSkY?xb5<9tKw1SH$2mt<;TOS@%O{!ni)oFPsC+{< z@-g#20f4;TlGDzz(?gDXom--I8gEMLh*%4(fSJdP*HS=(%=}-j>wctOuRpNTeXaEy zqYt3H25*hNMZ|-??|X}2DWzn^^zs67VA^Gg#c(+ht$8YG_wL=V7#SInU~|81y7H3P zyPt@zXpLCUmiRDglKzTy1>4xz*mlQp9!X-jDtYBltMB`7X^mJf1Hgu=G=7bCo@_K4 zZ$EVCkc?Vglh%5YnLpMwWA!pD5YaI1-Me@5h7B8@uU`9CwfG()x+bm;N-5a^B0E8B zTA{$g!opdolzJ}!JY>~@PZQA}#MNP9Vq$oHe*Q(fA+n=lm!ju+zlVskaRn`FK4$(v z5Ck$QkDZiK{{jGSiCv%~8JT$xYOVj6nPY!aORUX%){2z8R-2Vl62eHG zQ`(#sEJIz(%>QS>IwPh9%OqI#QMjb017pUKKx&+!js_9&0sBhFj#ydHcBg#_ZNbU{ti_kmp8|kSW?{WxHtn}ULmjrbZN_f& zv&#*Jcv>>ExY5sUO}1c}1`7Z##qsg+&CO=h9;UD_p^fq7y6#!6<6m-j%#bn5#WZB+ zSZ4aIK|~u`V0{Mw&M{-RuvRQsX1eYrXgMnwEvdfSDyV8Ke+bS~7SRM;j zO0WRnZA5f*8Cdd%QtAW%EL~fXzMeu^uwbR@t`~@CbIXLiq{%Ljro-t>>9sFus?};& zgkf0KYvt^Sl>#xxao%6A*E?S;Cw4v0JBo-MZzfMsZxM=GuzKtzW_~INf@PPduDW4W zYkdndf4avyid@Ws)no4=;wOFIUv}NIy=>ghv3kU5saU+r#wEMf`YwsdnYPA)mA4~S z4;>~~!}z}c!Iec7tbS76ANu z9PLVw=PN{XW!!ee9mmSc9=A z^4>^9UGK*p8ykDQ<2a90;6&4p0ANS!NLP~n>j^BWKx_RWX1+5?Wd+FlBoTETwY1jL z%)GAv?MdY#GhZ77!Iye5(lc1m$aNb4{9!K@=eW$b0pMdq^x#S#qxHNg0Qhi@{Wszo zBHrfve$N{aQh^o0bvFQ9ZKO5%GIBQ}KHO+D?sZ-FTxNcs<2b*`%vqt)u#Hi4%+hlQ-GOw1wnA1i5iW86^&dr9nK&Sg_9NmB-}mL6Zzd^I zu%gG}B>?dCOuV;7dsQIurpBZdWe%1&RIAnA8HS;(&{s7KWzv4hD*p@2e02~6vOzJ^ z)EBU#kxNed++kPfGwsjyj6dTz&WF35t}*3Z-@p=wwbsAH%=MDKTQt=tS=hO!(P-$j zuW6Dv)>p7vjwz+exGN%w?tROfc9%l0jt&H@X!Mf(T(ZZ!Y?}pp?F-Z8e#FeW*Zov! zof#Nd(Y#9nq6%CWr)`KWzf6ILW#-Y#&QDW14iqeD#GXBSHf`FpNj8)v+N^I%fD+o7 zJay{S{@K~tM0?at>o9Pz+U8vs$>|?vj(v8`v=~LUhloeyG)o6xWUz&fGV^^AP=yXSQh2c1 zIq*F13Ph9<>{0;u<-sx%yY?Rdz(X=Z1wpWM-(T#~In7uquvS3!4##mW1b_>eS{7_5bTu}td(NQBQp%c?TEOQnYSR~7G{1^hV!!qB7TpVk0au7 zW`5dnoJZ^RdZ8b2aUrb?SZfI~K0dy=*=!1A0-IcxE#EvxnE92C<1GGe{Vg^S@uvVV zFTcYuT>LG6%MUZ35QtpYJ-%LW{kWY|LO1kH1}q100000NkvXXu0mjf9`1Iq literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_github.png b/app/src/main/res/mipmap-xxhdpi/ic_github.png new file mode 100644 index 0000000000000000000000000000000000000000..302740a4733a3720d6d7177b626fcfdc4fbf1b9c GIT binary patch literal 5987 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 HxBq_tfmS9j literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_restart.png b/app/src/main/res/mipmap-xxhdpi/ic_restart.png new file mode 100644 index 0000000000000000000000000000000000000000..c98cd02d0a84d91dc629c42b239d5beeaa3232ac GIT binary patch literal 4880 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 LYGX^4EyDi?Ys6*r literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_warn.png b/app/src/main/res/mipmap-xxhdpi/ic_warn.png new file mode 100644 index 0000000000000000000000000000000000000000..5e87f03a3793efdfc9b4de7b3a3d04c375aa22e3 GIT binary patch literal 4102 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 B)j|LO literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_yukihookapi.png b/app/src/main/res/mipmap-xxhdpi/ic_yukihookapi.png new file mode 100644 index 0000000000000000000000000000000000000000..f16902d4a651d3366383f826e940473ca9d8dc3e GIT binary patch literal 8490 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 zキャンセル モア ヒント - すべてのエラーレコードをクリアしてもよろしいですか? + すべてのエラーレコードをクリアしてもよろしいですか すべてのアラーレコードがクリアされました - すべてのログファイルをエクスポートしてもよろしいですか? 梱包プロセスには時間がかかる場合があります。 + すべてのログファイルをエクスポートしてもよろしいですか。梱包プロセスには時間がかかる場合があります。 詳細を見る すべてのエラーレコードがエクスポートされました すべてのエラーレコードのエクスポートに失敗しました @@ -48,4 +48,21 @@ 分かります スクリーンショットを撮らないでください エラーログのスクリーンショットを撮ることはお勧めできません。このインターフェイスの右上隅にあるボタンをクリックして、ログの内容を抽出またはコピーする必要があります。 + リスタートシステム + プロジェクトアドレス + モジュールが無効化でした + モジュールバージョン: %1$s + システムバージョン: %1$s + モジュールが有効化でした + 一部の設定を変更した後、リスタートシステムして有効にするには、右上隅をクリックする必要がある場合があります。 + 表示設定 + デスクトップ上のアプリアイコンを非表示 + モジュールアイコンを非表示にすると、インターフェイスが閉じてデスクトップに表示されなくなります。モジュール設定は、EdXposedまたはLSPosedで検索して開くことができます。 + 注:LSPosedの「Force apps to show launcher icons」機能を必ずオフにしてください + このモジュールは、YukiHookAPIを使用して構築できます。 \n詳細 https://github.com/fankes/YukiHookAPI + モジュールが不完全に有効化でした + リスタートシステムしてもよろしいですか + 高速リスタート + ルート権限を取得できませんでした + より多くの機能が開発中です \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4226fb1..53df9f5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -48,4 +48,21 @@ 我知道了 请不要截屏 在错误日志中截屏是不明智的做法,你应当点击此界面右上角的按钮提取或复制日志内容。 + 重启系统 + 项目地址 + 模块未激活 + 模块版本:%1$s + 系统版本:%1$s + 模块已激活 + 部分设置修改后可能需要点击右上角重启系统才能生效。 + 显示设置 + 在桌面隐藏模块图标 + 隐藏模块图标后界面可能会被关闭,将不会再在桌面显示,你可以在 EdXposed、LSPosed 中找到模块设置并打开。 + 注意:请务必在 LSPosed 中关闭“强制显示桌面图标”功能 + 此模块使用 YukiHookAPI 构建。\n了解更多 https://github.com/fankes/YukiHookAPI + 模块未完全激活,请重启系统 + 你确定要重启系统吗? + 快速重启 + 获取 Root 权限失败 + 更多功能正在开发 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 8ffeae3..1ef0384 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -48,4 +48,21 @@ 我懂了 請不要捕獲熒屏 在錯誤日誌中捕獲熒屏是不明理的做法,你應當點擊此界面右上角的按鈕提取或複制日誌內容。 + 重新開機 + 項目地址 + 模組未激活 + 模組版本:%1$s + 系統版本:%1$s + 模組已激活 + 部分設置修改後可能需要點擊右上角重啟系統才能生效。 + 顯示設置 + 在桌面隱藏模組圖標 + 隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。 + 注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能 + 此模組使用 YukiHookAPI 構建。 \n了解更多 https://github.com/fankes/YukiHookAPI + 模組未完全激活,請重新開機 + 你確定要重新開機嗎? + 急速重開 + 取得 Root 权利失败 + 更多機能正在開發 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rMO/strings.xml b/app/src/main/res/values-zh-rMO/strings.xml index 2609e07..f562aac 100644 --- a/app/src/main/res/values-zh-rMO/strings.xml +++ b/app/src/main/res/values-zh-rMO/strings.xml @@ -48,4 +48,21 @@ 我懂了 請不要捕獲熒屏 在錯誤日誌中捕獲熒屏是不明理的做法,你應當點擊此界面右上角的按鈕提取或複制日誌內容。 + 重新開機 + 項目地址 + 模組未激活 + 模組版本:%1$s + 系統版本:%1$s + 模組已激活 + 部分設置修改後可能需要點擊右上角重啟系統才能生效。 + 顯示設置 + 在桌面隱藏模組圖標 + 隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。 + 注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能 + 此模組使用 YukiHookAPI 構建。 \n了解更多 https://github.com/fankes/YukiHookAPI + 模組未完全激活,請重新開機 + 你確定要重新開機嗎? + 急速重開 + 取得 Root 权利失败 + 更多機能正在開發 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 576a9f4..d9fbc2f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -48,4 +48,21 @@ 我懂了 請不要捕獲熒屏 在錯誤日誌中捕獲熒屏是不明理的做法,你應當點擊此界面右上角的按鈕提取或複制日誌內容。 + 重新開機 + 項目地址 + 模組未激活 + 模組版本:%1$s + 系統版本:%1$s + 模組已激活 + 部分設置修改後可能需要點擊右上角重啟系統才能生效。 + 顯示設置 + 在桌面隱藏模組圖標 + 隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。 + 注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能 + 此模組使用 YukiHookAPI 構建。 \n了解更多 https://github.com/fankes/YukiHookAPI + 模組未完全激活,請重新開機 + 你確定要重新開機嗎? + 急速重開 + 取得 Root 权利失败 + 更多機能正在開發 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5b418ba..8680cca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -47,4 +47,21 @@ Got it Do not take screenshots It is not advisable to take a screenshot of the error log, you should extract or copy the log content by clicking the button in the upper right corner of this interface. + Restart system + Project address + Module not activated + Module version: %1$s + System version: %1$s + Module is activated + After some settings are modified, you may need to click the upper right corner to restart the system to take effect. + Display settings + Hide app icons on desktop + After hiding the app icon, the interface may be closed and will no longer be displayed on the desktop. You can find and open the module settings in EdXposed or LSPosed. + Note: Be sure to turn off the \"Force apps to show launcher icons\" feature in LSPosed + This module is made by YukiHookAPI. \nLearn more https://github.com/fankes/YukiHookAPI + Module not fully activated + Are you sure you want to restart system? + Fast restart + Access Root failed + More features are in development \ No newline at end of file