diff --git a/app/src/main/java/com/fankes/tsbattery/hook/entity/QQTIMHooker.kt b/app/src/main/java/com/fankes/tsbattery/hook/entity/QQTIMHooker.kt index 74cdfd3..51473d2 100644 --- a/app/src/main/java/com/fankes/tsbattery/hook/entity/QQTIMHooker.kt +++ b/app/src/main/java/com/fankes/tsbattery/hook/entity/QQTIMHooker.kt @@ -36,7 +36,7 @@ import com.fankes.tsbattery.hook.factory.hookSystemWakeLock import com.fankes.tsbattery.hook.factory.jumpToModuleSettings import com.fankes.tsbattery.hook.factory.startModuleSettings 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.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.factory.* @@ -512,7 +512,7 @@ object QQTIMHooker : YukiBaseHooker() { if (hasCalledSuper.not()) baseConfiguration = baseContext.resources.configuration } onCreate { - appVersionName = versionName + appVersionName = appVersionName ConfigData.init(context = this) registerModuleAppActivities(AboutActivityClass) if (ConfigData.isDisableAllHook) return@onCreate diff --git a/app/src/main/java/com/fankes/tsbattery/hook/entity/WeChatHooker.kt b/app/src/main/java/com/fankes/tsbattery/hook/entity/WeChatHooker.kt index 122ca3c..e9401b4 100644 --- a/app/src/main/java/com/fankes/tsbattery/hook/entity/WeChatHooker.kt +++ b/app/src/main/java/com/fankes/tsbattery/hook/entity/WeChatHooker.kt @@ -36,8 +36,8 @@ import com.fankes.tsbattery.hook.factory.jumpToModuleSettings import com.fankes.tsbattery.hook.factory.startModuleSettings import com.fankes.tsbattery.utils.factory.absoluteStatusBarHeight import com.fankes.tsbattery.utils.factory.dp -import com.fankes.tsbattery.utils.factory.versionCode -import com.fankes.tsbattery.utils.factory.versionName +import com.fankes.tsbattery.utils.factory.appVersionCode +import com.fankes.tsbattery.utils.factory.appVersionName import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.factory.current import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources @@ -73,7 +73,7 @@ object WeChatHooker : YukiBaseHooker() { when { EmptyActivityClass.hasClass() -> EmptyActivityClass 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 diff --git a/app/src/main/java/com/fankes/tsbattery/ui/activity/MainActivity.kt b/app/src/main/java/com/fankes/tsbattery/ui/activity/MainActivity.kt index 04341fc..5cf8bfe 100644 --- a/app/src/main/java/com/fankes/tsbattery/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/fankes/tsbattery/ui/activity/MainActivity.kt @@ -95,9 +95,9 @@ class MainActivity : BaseActivity() { noCancelable() } /** 设置安装状态 */ - binding.mainTextQqVer.text = if (PackageName.QQ.isInstall) versionBrandOf(PackageName.QQ) else "未安装" - binding.mainTextTimVer.text = if (PackageName.TIM.isInstall) versionBrandOf(PackageName.TIM) else "未安装" - binding.mainTextWechatVer.text = if (PackageName.WECHAT.isInstall) versionBrandOf(PackageName.WECHAT) else "未安装" + binding.mainTextQqVer.text = PackageName.QQ.takeIf { isInstall(it) }?.let { appVersionBrandOf(it) } ?: "未安装" + binding.mainTextTimVer.text = PackageName.TIM.takeIf { isInstall(it) }?.let { appVersionBrandOf(it) } ?: "未安装" + binding.mainTextWechatVer.text = PackageName.WECHAT.takeIf { isInstall(it) }?.let { appVersionBrandOf(it) } ?: "未安装" /** 设置文本 */ binding.mainTextVersion.text = "模块版本:${BuildConfig.VERSION_NAME} $pendingFlag" binding.mainQqItem.setOnClickListener { @@ -152,7 +152,7 @@ class MainActivity : BaseActivity() { * @param packageName 包名 */ private fun startModuleSettings(packageName: String) { - if (packageName.isInstall) runCatching { + if (isInstall(packageName)) runCatching { startActivity(Intent().apply { component = ComponentName( packageName, diff --git a/app/src/main/java/com/fankes/tsbattery/ui/activity/parasitic/ConfigActivity.kt b/app/src/main/java/com/fankes/tsbattery/ui/activity/parasitic/ConfigActivity.kt index 1374a9f..c6fbadd 100644 --- a/app/src/main/java/com/fankes/tsbattery/ui/activity/parasitic/ConfigActivity.kt +++ b/app/src/main/java/com/fankes/tsbattery/ui/activity/parasitic/ConfigActivity.kt @@ -72,7 +72,7 @@ class ConfigActivity : BaseActivity() { binding.titleNameText.text = "TSBattery 设置 (${appName.trim()})" binding.appIcon.setImageDrawable(appIconOf()) 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.activeModeIcon.isVisible = HookEntry.isHookClientSupport binding.inactiveModeIcon.isGone = HookEntry.isHookClientSupport diff --git a/app/src/main/java/com/fankes/tsbattery/utils/factory/FunctionFactory.kt b/app/src/main/java/com/fankes/tsbattery/utils/factory/FunctionFactory.kt index f00b9bd..4ad94b3 100644 --- a/app/src/main/java/com/fankes/tsbattery/utils/factory/FunctionFactory.kt +++ b/app/src/main/java/com/fankes/tsbattery/utils/factory/FunctionFactory.kt @@ -19,7 +19,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 @@ -29,14 +29,17 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageInfo import android.content.pm.PackageManager +import android.content.pm.PackageManager.PackageInfoFlags import android.content.res.Configuration import android.graphics.Color import android.graphics.drawable.Drawable import android.net.ConnectivityManager import android.net.Uri +import android.os.Build import android.provider.Settings import android.widget.Toast import androidx.core.content.getSystemService +import androidx.core.content.pm.PackageInfoCompat import com.fankes.tsbattery.BuildConfig import com.google.android.material.snackbar.Snackbar 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 /** - * 得到安装包信息 - * @return [PackageInfo] + * 得到 APP 安装包信息 (兼容) + * @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() /** - * 判断应用是否安装 - * @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 ?: "" - -/** - * 得到版本号 + * 得到 APP 版本号 (兼容 [PackageInfo.getLongVersionCode]) * @return [Int] */ -val Context.versionCode get() = packageInfo.versionCode +private val PackageInfo.versionCodeCompat get() = PackageInfoCompat.getLongVersionCode(this) /** - * 得到版本信息与版本号 - * @param name APP 包名 - 默认为当前 APP + * 判断 APP 是否安装 + * @param packageName APP 包名 + * @return [Boolean] + */ +fun Context.isInstall(packageName: String) = getPackageInfoCompat(packageName)?.let { true } ?: false + +/** + * 得到 APP 版本信息 * @return [String] */ -fun Context.versionBrandOf(name: String = packageName) = safeOfNothing { - packageManager?.getPackageInfo(name, 0)?.let { - "${it.versionName}(${it.versionCode})" - } ?: "" -} +val Context.appVersionName get() = getPackageInfoCompat(packageName)?.versionName ?: "" + +/** + * 得到 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 名称 - * @param name APP 包名 - 默认为当前 APP + * @param packageName APP 包名 - 默认为当前 APP * @return [String] */ -fun Context.appNameOf(name: String = packageName) = - safeOfNothing { packageManager?.getPackageInfo(name, 0)?.applicationInfo?.loadLabel(packageManager).toString() } +fun Context.appNameOf(packageName: String = getPackageName()) = + getPackageInfoCompat(packageName)?.applicationInfo?.loadLabel(packageManager)?.toString() ?: "" /** * 得到 APP 图标 - * @param name APP 包名 - 默认为当前 APP + * @param packageName APP 包名 - 默认为当前 APP * @return [Drawable] or null */ -fun Context.appIconOf(name: String = packageName) = - safeOfNull { packageManager?.getPackageInfo(name, 0)?.applicationInfo?.loadIcon(packageManager) } +fun Context.appIconOf(packageName: String = getPackageName()) = getPackageInfoCompat(packageName)?.applicationInfo?.loadIcon(packageManager) /** * 网络连接是否正常 * @return [Boolean] 网络是否连接 */ -val isNetWorkSuccess get() = appContext.isNetWorkSuccess - -/** - * 网络连接是否正常 - * @return [Boolean] 网络是否连接 - */ -val Context.isNetWorkSuccess get() = safeOfFalse { getSystemService()?.activeNetworkInfo != null } +val Context.isNetWorkSuccess + get() = safeOfFalse { + @Suppress("DEPRECATION") + getSystemService()?.activeNetworkInfo != null + } /** * dp 转换为 pxInt @@ -190,7 +192,7 @@ fun Context.snake(msg: String, actionText: String = "", callback: () -> Unit = { * @param packageName 包名 */ fun Context.openSelfSetting(packageName: String = appContext.packageName) = runCatching { - if (packageName.isInstall) + if (isInstall(packageName)) startActivity(Intent().apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS