mirror of
https://github.com/fankes/TSBattery.git
synced 2025-09-07 11:10:10 +08:00
Modify compatible with API 33
This commit is contained in:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user