feat: simple support HyperOS

This commit is contained in:
2023-10-23 00:45:42 +08:00
parent 03ce7fbbe6
commit ca367bde9e
4 changed files with 151 additions and 40 deletions

View File

@@ -26,9 +26,9 @@ import com.fankes.miui.notify.const.PackageName
import com.fankes.miui.notify.data.ConfigData
import com.fankes.miui.notify.hook.entity.SystemUIHooker
import com.fankes.miui.notify.utils.factory.isLowerAndroidP
import com.fankes.miui.notify.utils.factory.isNotMIUI
import com.fankes.miui.notify.utils.factory.isNotSupportMiuiVersion
import com.fankes.miui.notify.utils.factory.miuiVersion
import com.fankes.miui.notify.utils.factory.isNotMiSystem
import com.fankes.miui.notify.utils.factory.isNotSupportMiSystemVersion
import com.fankes.miui.notify.utils.factory.miSystemVersion
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
import com.highcapable.yukihookapi.hook.factory.configs
import com.highcapable.yukihookapi.hook.factory.encase
@@ -51,9 +51,9 @@ object HookEntry : IYukiHookXposedInit {
loadApp(PackageName.SYSTEMUI) {
ConfigData.init(instance = this)
when {
isNotMIUI -> YLog.warn("Aborted Hook -> This System is not MIUI")
isNotMiSystem -> YLog.warn("Aborted Hook -> This System is not MIUI or HyperOS")
isLowerAndroidP -> YLog.warn("Aborted Hook -> This System is lower than Android P")
isNotSupportMiuiVersion -> YLog.warn("Aborted Hook -> This MIUI Version ${miuiVersion.ifBlank { "unknown" }} not supported")
isNotSupportMiSystemVersion -> YLog.warn("Aborted Hook -> This System Version ${miSystemVersion.ifBlank { "unknown" }} not supported")
ConfigData.isEnableModule.not() -> YLog.warn("Aborted Hook -> Hook Closed")
else -> loadHooker(SystemUIHooker)
}

View File

@@ -39,10 +39,13 @@ import com.fankes.miui.notify.utils.factory.hideOrShowLauncherIcon
import com.fankes.miui.notify.utils.factory.isLauncherIconShowing
import com.fankes.miui.notify.utils.factory.isLowerAndroidP
import com.fankes.miui.notify.utils.factory.isLowerAndroidR
import com.fankes.miui.notify.utils.factory.isNotMIUI
import com.fankes.miui.notify.utils.factory.isMIOS
import com.fankes.miui.notify.utils.factory.isMIUI
import com.fankes.miui.notify.utils.factory.isNotMiSystem
import com.fankes.miui.notify.utils.factory.isNotNoificationEnabled
import com.fankes.miui.notify.utils.factory.isNotSupportMiuiVersion
import com.fankes.miui.notify.utils.factory.miuiFullVersion
import com.fankes.miui.notify.utils.factory.isNotSupportMiSystemVersion
import com.fankes.miui.notify.utils.factory.isUpperOfAndroidU
import com.fankes.miui.notify.utils.factory.miSystemVersion
import com.fankes.miui.notify.utils.factory.miuiVersion
import com.fankes.miui.notify.utils.factory.miuiVersionCode
import com.fankes.miui.notify.utils.factory.navigate
@@ -51,6 +54,7 @@ import com.fankes.miui.notify.utils.factory.openNotifySetting
import com.fankes.miui.notify.utils.factory.showDialog
import com.fankes.miui.notify.utils.factory.showTimePicker
import com.fankes.miui.notify.utils.factory.snake
import com.fankes.miui.notify.utils.factory.systemFullVersion
import com.fankes.miui.notify.utils.tool.GithubReleaseTool
import com.fankes.miui.notify.utils.tool.I18nWarnTool
import com.fankes.miui.notify.utils.tool.SystemUITool
@@ -83,11 +87,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
}
when {
/** 判断是否为 MIUI 系统 */
isNotMIUI ->
/** 判断是否为小米系统 */
isNotMiSystem ->
showDialog {
title = "不是 MIUI 系统"
msg = "此模块专为 MIUI 系统打造,当前无法识别你的系统为 MIUI,所以模块无法工作。"
title = "不是 MIUI 或 HyperOS 系统"
msg = "此模块专为 MIUI、HyperOS 系统打造,当前无法识别你的系统为其中任意之一,所以模块无法工作。"
confirmButton(text = "查看支持的模块") {
openBrowser(url = "https://github.com/fankes/AndroidNotifyIconAdapt")
finish()
@@ -108,14 +112,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
cancelButton(text = "退出") { finish() }
noCancelable()
}
/** 判断支持的 MIUI 版本 */
isNotSupportMiuiVersion ->
/** 判断支持的系统版本 */
isNotSupportMiSystemVersion ->
showDialog {
title = "不支持的 MIUI 版本"
msg = (if (miuiVersion.isNotBlank())
"此模块目前支持 MIUI 11~14 系统,你的 MIUI 版本为 $miuiVersion,暂不支持。\n\n" +
"如果你的 MIUI 版本识别有误,请检查是否有相关插件修改了系统版本。\n\n"
else "无法获取 MIUI 版本,请检查你是否修改了系统参数或使用非官方系统。\n\n") + "若有其它疑问,你可以点击下方按钮前往项目地址进行反馈。"
title = "不支持的系统版本"
msg = (if (miSystemVersion.isNotBlank())
"此模块目前支持 MIUI 11~14 和 HyperOS 1.0 系统,你的系统版本为 $miSystemVersion,暂不支持。\n\n" +
"如果你的系统版本识别有误,请检查是否有相关插件修改了系统版本。\n\n"
else "无法获取系统版本,请检查你是否修改了系统参数或使用非官方系统。\n\n") + "若有其它疑问,你可以点击下方按钮前往项目地址进行反馈。"
confirmButton(text = "前往项目地址") {
openProjectUrl()
finish()
@@ -150,6 +154,17 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
confirmButton(text = "我知道了") { ConfigData.isIgnoredAndroidVersionToLow = true }
noCancelable()
}
// TODO: 适配 MIUI 14 Android 14 和 HyperOS 1.0
if (isMIOS || isMIUI && miuiVersion == "14" && isUpperOfAndroidU)
showDialog {
title = "暂未适配的系统"
msg = "从基于 MIUI 14 的 Android 14 以及 HyperOS 1.0 开始," +
"官方对系统界面部分进行了大量重写,模块功能现处于损坏状态,开发者正在努力进行适配," +
"可能无法第一时间完成,适配成功后此弹窗将被移除。\n\n" +
"你可以订阅 Telegram CI 频道,第一时间获取版本更新。"
confirmButton(text = "我知道了")
cancelButton(text = "CI 频道") { openBrowser(url = "https://t.me/MIUINativeNotifyIcon_CI") }
}
/** 推广、恰饭 */
ProjectPromote.show(activity = this, ModuleVersion.toString())
}
@@ -184,7 +199,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
}
}
binding.mainTextMiuiVersion.text = "系统版本:[$androidVersionCodeName] $miuiFullVersion"
binding.mainTextMiuiVersion.text = "系统版本:[$androidVersionCodeName] $systemFullVersion"
binding.warnSCountDisTip.isGone = miuiVersionCode > 12.5
binding.warnMiuiNotifyStyleTip.isGone = miuiVersionCode > 11
binding.statusIconCountText.text = ConfigData.liftedStatusIconCount.toString()

View File

@@ -24,6 +24,7 @@
package com.fankes.miui.notify.utils.factory
import android.annotation.SuppressLint
import android.app.Activity
import android.app.Notification
import android.app.Service
@@ -101,17 +102,23 @@ val Context.isSystemInDarkMode get() = (resources.configuration.uiMode and Confi
*/
inline val Context.isNotSystemInDarkMode get() = !isSystemInDarkMode
/**
* 系统版本是否高于或等于 Android 14
* @return [Boolean] 是否符合条件
*/
inline val isUpperOfAndroidU get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
/**
* 系统版本是否高于或等于 Android 13
* @return [Boolean] 是否符合条件
*/
inline val isUpperOfAndroidT get() = Build.VERSION.SDK_INT > Build.VERSION_CODES.S
inline val isUpperOfAndroidT get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
/**
* 系统版本是否高于或等于 Android 12
* @return [Boolean] 是否符合条件
*/
inline val isUpperOfAndroidS get() = Build.VERSION.SDK_INT > Build.VERSION_CODES.R
inline val isUpperOfAndroidS get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
/**
* 系统版本是否低于 Android 9
@@ -125,12 +132,30 @@ inline val isLowerAndroidP get() = Build.VERSION.SDK_INT < Build.VERSION_CODES.P
*/
inline val isLowerAndroidR get() = Build.VERSION.SDK_INT < Build.VERSION_CODES.R
/**
* 当前设备是否是 MIUI、HyperOS 定制 Android 系统
* @return [Boolean] 是否符合条件
*/
val isMiSystem get() = isMIUI || isMIOS
/**
* 当前设备是否不是 MIUI、HyperOS 定制 Android 系统
* @return [Boolean] 是否符合条件
*/
val isNotMiSystem get() = !isMiSystem
/**
* 当前设备是否是 MIUI 定制 Android 系统
* @return [Boolean] 是否符合条件
*/
val isMIUI by lazy { "android.miui.R".hasClass() }
/**
* 当前设备是否是 HyperOS 定制 Android 系统
* @return [Boolean] 是否符合条件
*/
val isMIOS get() = isMIUI && miuiVersion == "816"
/**
* 当前设备是否不是 MIUI 定制 Android 系统
* @return [Boolean] 是否符合条件
@@ -138,20 +163,33 @@ val isMIUI by lazy { "android.miui.R".hasClass() }
inline val isNotMIUI get() = !isMIUI
/**
* 是否为支持的 MIUI 版本
* 当前设备是否不是 HyperOS 定制 Android 系统
* @return [Boolean] 是否符合条件
*/
inline val isNotMIOS get() = !isMIOS
/**
* 是否为支持的 MIUI、HyperOS 版本
* @return [Boolean]
*/
val isSupportMiuiVersion
get() = when (miuiVersion) {
"11", "12", "12.5", "13", "14" -> true
val isSupportMiSystemVersion
get() = when {
isMIOS -> when (miosVersion) {
"1.0" -> true
else -> false
}
isMIUI -> when (miuiVersion) {
"11", "12", "12.5", "13", "14" -> true
else -> false
}
else -> false
}
/**
* 是否不为支持的 MIUI 版本
* 是否不为支持的 MIUI、HyperOS 版本
* @return [Boolean]
*/
inline val isNotSupportMiuiVersion get() = !isSupportMiuiVersion
inline val isNotSupportMiSystemVersion get() = !isSupportMiSystemVersion
/**
* 获取 Android 版本代号
@@ -176,6 +214,28 @@ val androidVersionCodeName
else -> "?"
}
/**
* 获取 MIUI、HyperOS 版本
* @return [String]
*/
val miSystemVersion
get() = when {
isMIOS -> miosVersion
isMIUI -> miuiVersion
else -> ""
}
/**
* 获取 MIUI、HyperOS 版本号
* @return [Float]
*/
val miSystemVersionCode
get() = when {
isMIOS -> miosVersionCode
isMIUI -> miuiVersionCode
else -> 0f
}
/**
* 获取 MIUI 版本
* @return [String]
@@ -194,11 +254,28 @@ val miuiVersion
}.trim()
else ""
/**
* 获取 HyperOS 版本
* @return [String]
*/
val miosVersion
get() = if (isMIOS)
findPropString("ro.mi.os.version.name").let {
if (it.startsWith("OS")) it.replaceFirst("OS", "") else it
}.trim()
else ""
/**
* 获取 MIUI 版本号
* @return [Float]
*/
val miuiVersionCode get() = safeOf(default = 0f) { miuiVersion.toFloat() }
val miuiVersionCode get() = miuiVersion.toFloatOrNull() ?: 0f
/**
* 获取 HyperOS 版本号
* @return [Float]
*/
val miosVersionCode get() = findPropString("ro.mi.os.version.code").toFloatOrNull() ?: 0f
/**
* 获取 MIUI 次版本号
@@ -207,18 +284,35 @@ val miuiVersionCode get() = safeOf(default = 0f) { miuiVersion.toFloat() }
val miuiIncrementalVersion get() = findPropString("ro.system.build.version.incremental").trim()
/**
* 获取 MIUI 完全版本
* 获取 HyperOS 次版本
* @return [String]
*/
val miuiFullVersion
get() = if (isMIUI) miuiIncrementalVersion.let {
if (it.lowercase().endsWith(".dev").not() && it.lowercase().any { e -> e.code in 97..122 })
"$it 稳定版"
else when {
it.lowercase().endsWith(".dev") -> "$it 开发版"
else -> "V$miuiVersion $it 开发版"
val miosIncrementalVersion get() = findPropString("ro.mi.os.version.incremental").trim()
/**
* 获取 MIUI、HyperOS 完全版本
* @return [String]
*/
val systemFullVersion
get() = when {
isMIOS -> "HyperOS " + miosIncrementalVersion.let {
if (it.lowercase().endsWith(".dev").not() && it.lowercase().any { e -> e.code in 97..122 })
"${it.replaceFirst("OS", "")} 稳定版"
else when {
it.lowercase().endsWith(".dev") -> "${it.replaceFirst("OS", "")} 开发版"
else -> "$miosVersion $it 开发版"
}
}
} else "不是 MIUI 系统"
isMIUI -> miuiIncrementalVersion.let {
if (it.lowercase().endsWith(".dev").not() && it.lowercase().any { e -> e.code in 97..122 })
"$it 稳定版"
else when {
it.lowercase().endsWith(".dev") -> "$it 开发版"
else -> "V$miuiVersion $it 开发版"
}
}
else -> "不是 MIUI 或 HyperOS 系统"
}
/**
* 获取 [Drawable]
@@ -366,6 +460,7 @@ fun Number.dpFloat(context: Context) = toFloat() * context.resources.displayMetr
* @return [Int] Android < 12 返回 [wallpaperColor]
*/
val Context.systemAccentColor
@SuppressLint("InlinedApi")
get() = safeOf(wallpaperColor) {
if (isUpperOfAndroidS) resources.colorOf(android.R.color.system_accent1_600) else wallpaperColor
}

View File

@@ -34,9 +34,10 @@ import com.fankes.miui.notify.data.ConfigData
import com.fankes.miui.notify.ui.activity.MainActivity
import com.fankes.miui.notify.utils.factory.delayedRun
import com.fankes.miui.notify.utils.factory.execShell
import com.fankes.miui.notify.utils.factory.miuiFullVersion
import com.fankes.miui.notify.utils.factory.isMIOS
import com.fankes.miui.notify.utils.factory.showDialog
import com.fankes.miui.notify.utils.factory.snake
import com.fankes.miui.notify.utils.factory.systemFullVersion
import com.google.android.material.snackbar.Snackbar
import com.highcapable.yukihookapi.YukiHookAPI
import com.highcapable.yukihookapi.hook.factory.dataChannel
@@ -101,7 +102,7 @@ object SystemUITool {
"[Display]: ${Build.DISPLAY}\n" +
"[Android Version]: ${Build.VERSION.RELEASE}\n" +
"[Android API Level]: ${Build.VERSION.SDK_INT}\n" +
"[MIUI Version]: $miuiFullVersion\n" +
"[${if (isMIOS) "HyperOS" else "MIUI"} Version]: $systemFullVersion\n" +
"[System Locale]: ${Locale.getDefault()}\n\n" + YLog.contents(debugLogs).trim()
activity.contentResolver?.openOutputStream(e)?.apply { write(content.toByteArray()) }?.close()
activity.snake(msg = "导出完成")