Modify compatible with API 33

This commit is contained in:
2022-10-01 02:16:55 +08:00
parent e2ff60e2ef
commit 376a2a5890
5 changed files with 60 additions and 58 deletions

View File

@@ -36,7 +36,7 @@ import com.fankes.tsbattery.hook.factory.hookSystemWakeLock
import com.fankes.tsbattery.hook.factory.jumpToModuleSettings import com.fankes.tsbattery.hook.factory.jumpToModuleSettings
import com.fankes.tsbattery.hook.factory.startModuleSettings import com.fankes.tsbattery.hook.factory.startModuleSettings
import com.fankes.tsbattery.utils.factory.dp import com.fankes.tsbattery.utils.factory.dp
import com.fankes.tsbattery.utils.factory.versionName import com.fankes.tsbattery.utils.factory.appVersionName
import com.highcapable.yukihookapi.hook.bean.VariousClass import com.highcapable.yukihookapi.hook.bean.VariousClass
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
import com.highcapable.yukihookapi.hook.factory.* import com.highcapable.yukihookapi.hook.factory.*
@@ -512,7 +512,7 @@ object QQTIMHooker : YukiBaseHooker() {
if (hasCalledSuper.not()) baseConfiguration = baseContext.resources.configuration if (hasCalledSuper.not()) baseConfiguration = baseContext.resources.configuration
} }
onCreate { onCreate {
appVersionName = versionName appVersionName = appVersionName
ConfigData.init(context = this) ConfigData.init(context = this)
registerModuleAppActivities(AboutActivityClass) registerModuleAppActivities(AboutActivityClass)
if (ConfigData.isDisableAllHook) return@onCreate if (ConfigData.isDisableAllHook) return@onCreate

View File

@@ -36,8 +36,8 @@ import com.fankes.tsbattery.hook.factory.jumpToModuleSettings
import com.fankes.tsbattery.hook.factory.startModuleSettings import com.fankes.tsbattery.hook.factory.startModuleSettings
import com.fankes.tsbattery.utils.factory.absoluteStatusBarHeight import com.fankes.tsbattery.utils.factory.absoluteStatusBarHeight
import com.fankes.tsbattery.utils.factory.dp import com.fankes.tsbattery.utils.factory.dp
import com.fankes.tsbattery.utils.factory.versionCode import com.fankes.tsbattery.utils.factory.appVersionCode
import com.fankes.tsbattery.utils.factory.versionName import com.fankes.tsbattery.utils.factory.appVersionName
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
import com.highcapable.yukihookapi.hook.factory.current import com.highcapable.yukihookapi.hook.factory.current
import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources
@@ -73,7 +73,7 @@ object WeChatHooker : YukiBaseHooker() {
when { when {
EmptyActivityClass.hasClass() -> EmptyActivityClass EmptyActivityClass.hasClass() -> EmptyActivityClass
WelabMainUIClass.hasClass() -> WelabMainUIClass WelabMainUIClass.hasClass() -> WelabMainUIClass
else -> error("Inject WeChat Activity Proxy failed, unsupport version $versionName($versionCode)") else -> error("Inject WeChat Activity Proxy failed, unsupport version $appVersionName($appVersionCode)")
} }
) )
if (ConfigData.isDisableAllHook) return@onCreate if (ConfigData.isDisableAllHook) return@onCreate

View File

@@ -95,9 +95,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
noCancelable() noCancelable()
} }
/** 设置安装状态 */ /** 设置安装状态 */
binding.mainTextQqVer.text = if (PackageName.QQ.isInstall) versionBrandOf(PackageName.QQ) else "未安装" binding.mainTextQqVer.text = PackageName.QQ.takeIf { isInstall(it) }?.let { appVersionBrandOf(it) } ?: "未安装"
binding.mainTextTimVer.text = if (PackageName.TIM.isInstall) versionBrandOf(PackageName.TIM) else "未安装" binding.mainTextTimVer.text = PackageName.TIM.takeIf { isInstall(it) }?.let { appVersionBrandOf(it) } ?: "未安装"
binding.mainTextWechatVer.text = if (PackageName.WECHAT.isInstall) versionBrandOf(PackageName.WECHAT) else "未安装" binding.mainTextWechatVer.text = PackageName.WECHAT.takeIf { isInstall(it) }?.let { appVersionBrandOf(it) } ?: "未安装"
/** 设置文本 */ /** 设置文本 */
binding.mainTextVersion.text = "模块版本:${BuildConfig.VERSION_NAME} $pendingFlag" binding.mainTextVersion.text = "模块版本:${BuildConfig.VERSION_NAME} $pendingFlag"
binding.mainQqItem.setOnClickListener { binding.mainQqItem.setOnClickListener {
@@ -152,7 +152,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
* @param packageName 包名 * @param packageName 包名
*/ */
private fun startModuleSettings(packageName: String) { private fun startModuleSettings(packageName: String) {
if (packageName.isInstall) runCatching { if (isInstall(packageName)) runCatching {
startActivity(Intent().apply { startActivity(Intent().apply {
component = ComponentName( component = ComponentName(
packageName, packageName,

View File

@@ -72,7 +72,7 @@ class ConfigActivity : BaseActivity<ActivityConfigBinding>() {
binding.titleNameText.text = "TSBattery 设置 (${appName.trim()})" binding.titleNameText.text = "TSBattery 设置 (${appName.trim()})"
binding.appIcon.setImageDrawable(appIconOf()) binding.appIcon.setImageDrawable(appIconOf())
binding.appName.text = appName.trim() binding.appName.text = appName.trim()
binding.appVersion.text = "${versionName}($versionCode)" binding.appVersion.text = "${appVersionName}($appVersionCode)"
binding.moduleVersion.text = "${BuildConfig.VERSION_NAME}(${BuildConfig.VERSION_CODE})" binding.moduleVersion.text = "${BuildConfig.VERSION_NAME}(${BuildConfig.VERSION_CODE})"
binding.activeModeIcon.isVisible = HookEntry.isHookClientSupport binding.activeModeIcon.isVisible = HookEntry.isHookClientSupport
binding.inactiveModeIcon.isGone = HookEntry.isHookClientSupport binding.inactiveModeIcon.isGone = HookEntry.isHookClientSupport

View File

@@ -19,7 +19,7 @@
* *
* This file is Created by fankes on 2022/1/7. * This file is Created by fankes on 2022/1/7.
*/ */
@file:Suppress("DEPRECATION", "unused", "DiscouragedApi", "InternalInsetResource") @file:Suppress("unused", "DiscouragedApi", "InternalInsetResource")
package com.fankes.tsbattery.utils.factory package com.fankes.tsbattery.utils.factory
@@ -29,14 +29,17 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.pm.PackageManager.PackageInfoFlags
import android.content.res.Configuration import android.content.res.Configuration
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.Uri import android.net.Uri
import android.os.Build
import android.provider.Settings import android.provider.Settings
import android.widget.Toast import android.widget.Toast
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.core.content.pm.PackageInfoCompat
import com.fankes.tsbattery.BuildConfig import com.fankes.tsbattery.BuildConfig
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication.Companion.appContext import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication.Companion.appContext
@@ -66,76 +69,75 @@ val Context.isSystemInDarkMode get() = (resources.configuration.uiMode and Confi
inline val Context.isNotSystemInDarkMode get() = !isSystemInDarkMode inline val Context.isNotSystemInDarkMode get() = !isSystemInDarkMode
/** /**
* 得到安装包信息 * 得到 APP 安装包信息 (兼容)
* @return [PackageInfo] * @param packageName APP 包名
* @param flag [PackageInfoFlags]
* @return [PackageInfo] or null
*/ */
private val Context.packageInfo get() = packageManager?.getPackageInfo(packageName, 0) ?: PackageInfo() private fun Context.getPackageInfoCompat(packageName: String, flag: Number = 0) = runCatching {
@Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= 33)
packageManager?.getPackageInfo(packageName, PackageInfoFlags.of(flag.toLong()))
else packageManager?.getPackageInfo(packageName, flag.toInt())
}.getOrNull()
/** /**
* 判断应用是否安装 * 得到 APP 版本号 (兼容 [PackageInfo.getLongVersionCode])
* @return [Boolean]
*/
val String.isInstall
get() = try {
appContext.packageManager.getPackageInfo(
this,
PackageManager.GET_UNINSTALLED_PACKAGES
)
true
} catch (e: Exception) {
false
}
/**
* 得到版本信息
* @return [String]
*/
val Context.versionName get() = packageInfo.versionName ?: ""
/**
* 得到版本号
* @return [Int] * @return [Int]
*/ */
val Context.versionCode get() = packageInfo.versionCode private val PackageInfo.versionCodeCompat get() = PackageInfoCompat.getLongVersionCode(this)
/** /**
* 得到版本信息与版本号 * 判断 APP 是否安装
* @param name APP 包名 - 默认为当前 APP * @param packageName APP 包名
* @return [Boolean]
*/
fun Context.isInstall(packageName: String) = getPackageInfoCompat(packageName)?.let { true } ?: false
/**
* 得到 APP 版本信息
* @return [String] * @return [String]
*/ */
fun Context.versionBrandOf(name: String = packageName) = safeOfNothing { val Context.appVersionName get() = getPackageInfoCompat(packageName)?.versionName ?: ""
packageManager?.getPackageInfo(name, 0)?.let {
"${it.versionName}(${it.versionCode})" /**
} ?: "" * 得到 APP 版本号
} * @return [Int]
*/
val Context.appVersionCode get() = getPackageInfoCompat(packageName)?.versionCodeCompat
/**
* 得到 APP 版本信息与版本号
* @param packageName APP 包名 - 默认为当前 APP
* @return [String]
*/
fun Context.appVersionBrandOf(packageName: String = getPackageName()) =
getPackageInfoCompat(packageName)?.let { "${it.versionName}(${it.versionCodeCompat})" } ?: ""
/** /**
* 得到 APP 名称 * 得到 APP 名称
* @param name APP 包名 - 默认为当前 APP * @param packageName APP 包名 - 默认为当前 APP
* @return [String] * @return [String]
*/ */
fun Context.appNameOf(name: String = packageName) = fun Context.appNameOf(packageName: String = getPackageName()) =
safeOfNothing { packageManager?.getPackageInfo(name, 0)?.applicationInfo?.loadLabel(packageManager).toString() } getPackageInfoCompat(packageName)?.applicationInfo?.loadLabel(packageManager)?.toString() ?: ""
/** /**
* 得到 APP 图标 * 得到 APP 图标
* @param name APP 包名 - 默认为当前 APP * @param packageName APP 包名 - 默认为当前 APP
* @return [Drawable] or null * @return [Drawable] or null
*/ */
fun Context.appIconOf(name: String = packageName) = fun Context.appIconOf(packageName: String = getPackageName()) = getPackageInfoCompat(packageName)?.applicationInfo?.loadIcon(packageManager)
safeOfNull { packageManager?.getPackageInfo(name, 0)?.applicationInfo?.loadIcon(packageManager) }
/** /**
* 网络连接是否正常 * 网络连接是否正常
* @return [Boolean] 网络是否连接 * @return [Boolean] 网络是否连接
*/ */
val isNetWorkSuccess get() = appContext.isNetWorkSuccess val Context.isNetWorkSuccess
get() = safeOfFalse {
/** @Suppress("DEPRECATION")
* 网络连接是否正常 getSystemService<ConnectivityManager>()?.activeNetworkInfo != null
* @return [Boolean] 网络是否连接 }
*/
val Context.isNetWorkSuccess get() = safeOfFalse { getSystemService<ConnectivityManager>()?.activeNetworkInfo != null }
/** /**
* dp 转换为 pxInt * dp 转换为 pxInt
@@ -190,7 +192,7 @@ fun Context.snake(msg: String, actionText: String = "", callback: () -> Unit = {
* @param packageName 包名 * @param packageName 包名
*/ */
fun Context.openSelfSetting(packageName: String = appContext.packageName) = runCatching { fun Context.openSelfSetting(packageName: String = appContext.packageName) = runCatching {
if (packageName.isInstall) if (isInstall(packageName))
startActivity(Intent().apply { startActivity(Intent().apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK flags = Intent.FLAG_ACTIVITY_NEW_TASK
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS