Repository: HuanCheng65/MIUILevelChecker
Branch: master
Commit: ee29d3e2628b
Files: 52
Total size: 81.2 KB
Directory structure:
gitextract_6b_kueyn/
├── .github/
│ └── workflows/
│ └── android.yml
├── .gitignore
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── com/
│ │ └── huanchengfly/
│ │ └── miui/
│ │ └── checker/
│ │ └── ExampleInstrumentedTest.kt
│ └── main/
│ ├── AndroidManifest.xml
│ ├── assets/
│ │ └── xposed_init
│ ├── java/
│ │ └── com/
│ │ └── huanchengfly/
│ │ └── miui/
│ │ └── checker/
│ │ ├── Extensions.kt
│ │ ├── MainActivity.kt
│ │ ├── utils/
│ │ │ ├── DeviceUtil.kt
│ │ │ ├── OSUtil.kt
│ │ │ ├── VersionUtil.kt
│ │ │ └── XposedUtil.kt
│ │ └── xposed/
│ │ └── FullDeviceLevelModule.kt
│ └── res/
│ ├── animator/
│ │ └── appbar_elevation.xml
│ ├── drawable/
│ │ ├── emoji_confused_face.xml
│ │ ├── emoji_expressionless_face.xml
│ │ ├── emoji_grinning_squinting_face.xml
│ │ ├── emoji_thinking_face.xml
│ │ ├── ic_launcher_foreground.xml
│ │ ├── ic_logo_github.xml
│ │ ├── ic_round_developer_board.xml
│ │ ├── ic_round_exit_to_app.xml
│ │ ├── ic_round_help.xml
│ │ ├── ic_round_memory.xml
│ │ ├── ic_round_offline_bolt.xml
│ │ ├── ic_round_phone_android.xml
│ │ ├── ic_round_score.xml
│ │ ├── ic_round_settings.xml
│ │ ├── ic_round_smartphone.xml
│ │ └── ic_round_storage.xml
│ ├── layout/
│ │ ├── activity_main.xml
│ │ └── dialog_about.xml
│ ├── menu/
│ │ └── menu_main.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ ├── values/
│ │ ├── arrays.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── themes.xml
│ ├── values-en/
│ │ └── strings.xml
│ └── values-es/
│ └── strings.xml
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/android.yml
================================================
name: Android CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew assembleRelease
- name: Upload APK
uses: actions/upload-artifact@v2
with:
name: app-release
path: app/build/outputs/apk/release/
================================================
FILE: .gitignore
================================================
.DS_Store
.cxx
# Built application files
*.apk
*.ap_
app/release/
# Files for the ART/Dalvik VM
*.dex
# Java class files
*.class
# Generated files
bin/
gen/
out/
output.json
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
app/lint.xml
# app/proguard-project.txt
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# IntelliJ
*.iml
.idea/
# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
*.jks
keystore.properties
# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild
# Google Services (e.g. APIs or Firebase)
google-services.json
# Freeline
freeline.py
freeline/
freeline_project_description.json
# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md
================================================
FILE: README.md
================================================
# MIUILevelChecker
帮助你查看自己的机型在 MIUI 12.5 上的分级
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/build.gradle
================================================
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.huanchengfly.miui.checker"
minSdkVersion 28
targetSdkVersion 29
versionCode 1001
versionName "1.0.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
viewBinding = true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
compileOnly 'de.robv.android.xposed:api:82'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: app/src/androidTest/java/com/huanchengfly/miui/checker/ExampleInstrumentedTest.kt
================================================
package com.huanchengfly.miui.checker
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.miui.fuck", appContext.packageName)
}
}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.huanchengfly.miui.checker">
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.FuckMIUI">
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="@string/xposed_description" />
<meta-data
android:name="xposedminversion"
android:value="82" />
<meta-data
android:name="xposedscope"
android:resource="@array/xposedscope" />
<activity android:name="com.huanchengfly.miui.checker.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
================================================
FILE: app/src/main/assets/xposed_init
================================================
com.huanchengfly.miui.checker.xposed.FullDeviceLevelModule
================================================
FILE: app/src/main/java/com/huanchengfly/miui/checker/Extensions.kt
================================================
package com.huanchengfly.miui.checker
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.provider.Browser
import android.view.LayoutInflater
import android.widget.Toast
import androidx.viewbinding.ViewBinding
inline fun <reified Binding : ViewBinding> Activity.bindView(): Binding {
val clazz = Binding::class.java
val inflateMethod = clazz.getDeclaredMethod("inflate", LayoutInflater::class.java)
val binding: Binding = inflateMethod.invoke(null, layoutInflater) as Binding
setContentView(binding.root)
return binding
}
fun Context.toastShort(text: String) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}
fun Context.toastShort(resId: Int, vararg args: Any) {
Toast.makeText(this, getString(resId, *args), Toast.LENGTH_SHORT).show()
}
inline fun <reified T : Activity> Context.goToActivity() {
startActivity(Intent(this, T::class.java))
}
inline fun <reified T : Activity> Context.goToActivity(pre: Intent.() -> Unit) {
startActivity(Intent(this, T::class.java).apply(pre))
}
fun Context.startApp(packageName: String) {
startActivity(packageManager.getLaunchIntentForPackage(packageName))
}
fun Context.startURL(uri: Uri) {
startActivity(Intent(Intent.ACTION_VIEW, uri).apply {
putExtra(Browser.EXTRA_APPLICATION_ID, packageName)
})
}
fun Context.startURL(url: String) {
startURL(Uri.parse(url))
}
================================================
FILE: app/src/main/java/com/huanchengfly/miui/checker/MainActivity.kt
================================================
package com.huanchengfly.miui.checker
import android.annotation.SuppressLint
import android.os.Build
import android.os.Bundle
import android.text.Html
import android.view.Menu
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import com.huanchengfly.miui.checker.databinding.ActivityMainBinding
import com.huanchengfly.miui.checker.databinding.DialogAboutBinding
import com.huanchengfly.miui.checker.utils.DeviceUtil
import com.huanchengfly.miui.checker.utils.OSUtil
import com.huanchengfly.miui.checker.utils.VersionUtil
import com.huanchengfly.miui.checker.utils.XposedUtil
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = bindView()
setSupportActionBar(binding.toolbar)
if (OSUtil.isMIUI()) {
load()
} else {
AlertDialog.Builder(this)
.setTitle(R.string.title_dialog_not_miui)
.setMessage(R.string.text_dialog_not_miui)
.setPositiveButton(R.string.btn_ok, null)
.show()
}
}
private fun load() {
binding.contentContainer.visibility = View.VISIBLE
var manufacturer = Character.toUpperCase(Build.MANUFACTURER[0]).toString() + Build.MANUFACTURER.substring(1)
if (Build.BRAND != Build.MANUFACTURER) {
manufacturer += " " + Character.toUpperCase(Build.BRAND[0]) + Build.BRAND.substring(1)
}
manufacturer += " " + Build.MODEL
binding.phoneInfo.text = manufacturer
binding.socInfo.text = DeviceUtil.getHardwareInfo()
binding.ramInfo.text = getString(R.string.text_ram_info, DeviceUtil.getTotalRam())
when (DeviceUtil.getDeviceLevel()) {
DeviceUtil.DEVICE_HIGH_END -> {
binding.statusIcon.setImageResource(R.drawable.emoji_grinning_squinting_face)
binding.statusTitle.setText(R.string.status_title_full)
binding.statusText.setText(R.string.status_text_full)
binding.deviceLevelInfo.setText(R.string.level_text_high_end)
}
DeviceUtil.DEVICE_MIDDLE -> {
binding.statusIcon.setImageResource(R.drawable.emoji_expressionless_face)
binding.statusTitle.setText(R.string.status_title_basic)
binding.statusText.setText(R.string.status_text_basic)
binding.deviceLevelInfo.setText(R.string.level_text_middle)
}
DeviceUtil.DEVICE_PRIMARY -> {
binding.statusIcon.setImageResource(R.drawable.emoji_confused_face)
binding.statusTitle.setText(R.string.status_title_none)
binding.statusText.setText(R.string.status_text_none)
binding.deviceLevelInfo.setText(R.string.level_text_primary)
}
DeviceUtil.DEVICE_UNKNOWN -> {
binding.statusIcon.setImageResource(R.drawable.emoji_thinking_face)
binding.statusTitle.setText(R.string.status_title_unknown)
binding.statusText.setText(R.string.status_text_unknown)
binding.deviceLevelInfo.setText(R.string.level_text_unknown)
}
}
if (DeviceUtil.isMiuiLite()) {
binding.miuiLiteInfo.setText(R.string.miui_lite_yes)
} else {
binding.miuiLiteInfo.setText(R.string.miui_lite_no)
}
binding.miuiLiteHelpBtn.setOnClickListener {
AlertDialog.Builder(this)
.setTitle(R.string.title_dialog_whats_this)
.setMessage(R.string.text_dialog_miui_lite_help)
.setPositiveButton(R.string.btn_ok, null)
.show()
}
if (XposedUtil.isModuleEnabled) {
binding.xposedModuleStatusCard.setCardBackgroundColor(getColor(R.color.green_400))
binding.xposedModuleStatus.setText(R.string.title_xposed_module_enabled)
binding.xposedModuleStatusMessage.text = Html.fromHtml(getString(R.string.text_xposed_module_enabled), Html.FROM_HTML_MODE_COMPACT)
binding.xposedModuleStatusActionBtn.setImageResource(R.drawable.ic_round_settings)
binding.xposedModuleStatusActionBtn.visibility = View.GONE
} else if (!XposedUtil.isManagerInstalled(this)) {
binding.xposedModuleStatusCard.visibility = View.GONE
} else {
binding.xposedModuleStatusCard.setCardBackgroundColor(getColor(R.color.red_A400))
binding.xposedModuleStatus.setText(R.string.title_xposed_module_not_actived)
binding.xposedModuleStatusMessage.text = Html.fromHtml(getString(R.string.text_xposed_module_not_enabled), Html.FROM_HTML_MODE_COMPACT)
binding.xposedModuleStatusActionBtn.setImageResource(R.drawable.ic_round_exit_to_app)
binding.xposedModuleStatusCard.setOnClickListener {
startApp(XposedUtil.getInstalledManagerPackageName(this)!!)
}
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
@SuppressLint("SetTextI18n")
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.menu_about) {
val dialogViewBinding = DialogAboutBinding.inflate(layoutInflater)
dialogViewBinding.dialogAboutText.text = getString(R.string.text_dialog_about, VersionUtil.getVersionName(this), VersionUtil.getVersionCode(this))
dialogViewBinding.btnGithub.setOnClickListener {
startURL(getString(R.string.link_source))
}
AlertDialog.Builder(this)
.setView(dialogViewBinding.root)
.show()
}
return false
}
}
================================================
FILE: app/src/main/java/com/huanchengfly/miui/checker/utils/DeviceUtil.kt
================================================
package com.huanchengfly.miui.checker.utils
import android.text.TextUtils
import android.util.Log
import java.io.*
import java.util.*
import java.util.regex.Matcher
import java.util.regex.Pattern
object DeviceUtil {
private const val TAG = "DeviceUtil"
private val MT_PATTERN: Pattern = Pattern.compile("MT([\\d]{2})([\\d]+)")
private val SM_PATTERN: Pattern = Pattern.compile("Inc ([A-Z]+)([\\d]+)")
const val DEVICE_HIGH_END = 2
const val DEVICE_MIDDLE = 1
const val DEVICE_PRIMARY = 0
const val DEVICE_UNKNOWN = -1
private const val ARM_V8 = 8
private const val CORE_COUNT = 8
private const val BIG_CORE_FREQ = 2000000
private const val MIDDLE_FREQ = 2300000
private const val HIGH_FREQ = 2700000
private const val MTK_DIMENSITY = 68
private const val D800 = 73
private const val MIDDLE_EIGHT_SERIES = 45
private const val HEX = "0x"
private const val CPU_MAX_INFO_FORMAT = "/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq"
private const val IMPLEMENTOR = "CPU implementer"
private const val ARCHITECTURE = "CPU architecture"
private const val PART = "CPU part"
private const val PROCESSOR = "processor"
private const val QUALCOMM = "Qualcomm"
private const val SNAPDRAGON = "sm"
private const val SEPARATOR = ": "
private var mLevel = DEVICE_UNKNOWN
private var mTotalRam = Int.MAX_VALUE
fun getDeviceLevel(): Int {
if (mLevel != DEVICE_UNKNOWN) {
return mLevel
}
if (isMiuiLite()) {
mLevel = DEVICE_PRIMARY
} else {
mLevel = getCpuLevel()
if (mLevel == DEVICE_MIDDLE && getTotalRam() <= 4) {
mLevel = DEVICE_PRIMARY
}
}
return mLevel
}
fun getTotalRam(): Int {
if (mTotalRam == Int.MAX_VALUE) {
mTotalRam = try {
((Class.forName("miui.util.HardwareInfo")
.getMethod("getTotalPhysicalMemory")
.invoke(null) as Long).toLong() / 1024 / 1024 / 1024).toInt()
} catch (e: Exception) {
Log.e(TAG, "${e.message}")
0
}
}
return mTotalRam
}
fun isMiuiLite(): Boolean {
return try {
Class.forName("miui.os.Build").getDeclaredField("IS_MIUI_LITE_VERSION")
.get(null) as Boolean
} catch (e: Exception) {
e.printStackTrace()
false
}
}
private fun createCpuInfo(str: String): CpuInfo {
val cpuInfo = CpuInfo()
cpuInfo.id = str.toInt()
val contentFromFileInfo = getContentFromFileInfo(
String.format(
Locale.ENGLISH,
CPU_MAX_INFO_FORMAT,
cpuInfo.id!!
)
)
if (contentFromFileInfo != null) {
cpuInfo.maxFreq = contentFromFileInfo.toInt()
}
return cpuInfo
}
private fun getContentFromFileInfo(filePath: String): String? {
try {
val fileInputStream = FileInputStream(filePath)
val inputStreamReader = InputStreamReader(fileInputStream)
val bufferedReader = BufferedReader(inputStreamReader)
val str = bufferedReader.readLine()
bufferedReader.close()
fileInputStream.close()
inputStreamReader.close()
return str
} catch (e: IOException) {
e.printStackTrace()
}
return null
}
private fun getCpuInfoList(): List<CpuInfo> {
val arrayList = mutableListOf<CpuInfo>()
try {
val scanner = Scanner(File("/proc/cpuinfo"))
var cpuInfo: CpuInfo? = null
while (scanner.hasNextLine()) {
val split: List<String> = scanner.nextLine().split(SEPARATOR)
if (split.size > 1) {
cpuInfo = parseLine(split, arrayList, cpuInfo)
}
}
} catch (e: java.lang.Exception) {
Log.e(TAG, "getChipSetFromCpuInfo failed", e)
}
return arrayList
}
private fun getCpuStats(): CpuStats {
val cpuInfoList: List<CpuInfo> = getCpuInfoList()
val cpuStats = CpuStats()
if (cpuInfoList.size < CORE_COUNT) {
cpuStats.level = DEVICE_PRIMARY
}
doCpuStats(cpuStats, cpuInfoList)
return cpuStats
}
private fun doCpuStats(cpuStats: CpuStats, list: List<CpuInfo>) {
for (next in list) {
if (next.architecture!! < ARM_V8) {
cpuStats.level = DEVICE_PRIMARY
}
if (next.maxFreq > cpuStats.maxFreq) {
cpuStats.maxFreq = next.maxFreq
}
if (next.maxFreq >= BIG_CORE_FREQ) {
cpuStats.bigCoreCount++
} else {
cpuStats.smallCoreCount++
}
}
decideLevel(cpuStats)
}
private fun decideLevel(cpuStats: CpuStats) {
if (cpuStats.level == DEVICE_UNKNOWN) {
cpuStats.level = when {
cpuStats.bigCoreCount >= 4 ->
when {
cpuStats.maxFreq > HIGH_FREQ -> DEVICE_HIGH_END
cpuStats.maxFreq > MIDDLE_FREQ -> DEVICE_MIDDLE
else -> DEVICE_PRIMARY
}
cpuStats.maxFreq > MIDDLE_FREQ -> DEVICE_MIDDLE
else -> DEVICE_PRIMARY
}
}
}
private fun parseLine(
strArr: List<String>,
list: MutableList<CpuInfo>,
cpuInfo: CpuInfo?
): CpuInfo? {
val trim = strArr[1].trim { it <= ' ' }
return if (strArr[0].contains(PROCESSOR) && TextUtils.isDigitsOnly(trim)) {
createCpuInfo(trim).also { list.add(it) }
} else {
if (cpuInfo != null) {
getCpuInfo(strArr[0], trim, cpuInfo)
}
cpuInfo
}
}
private fun getCpuInfo(str: String, str2: String, cpuInfo: CpuInfo) {
when {
str.contains(IMPLEMENTOR) -> {
cpuInfo.implementor = toInt(str2)
}
str.contains(ARCHITECTURE) -> {
cpuInfo.architecture = toInt(str2)
}
str.contains(PART) -> {
cpuInfo.part = toInt(str2)
}
}
}
private fun toInt(str: String): Int {
return if (str.startsWith(HEX)) {
str.substring(2).toInt(16)
} else {
str.toInt()
}
}
fun getHardwareInfo(): String {
return try {
val scanner = Scanner(File("/proc/cpuinfo"))
while (scanner.hasNextLine()) {
val nextLine = scanner.nextLine()
if (!scanner.hasNextLine()) {
val split = nextLine.split(SEPARATOR).toTypedArray()
if (split.size > 1) {
return split[1]
}
}
}
""
} catch (e: java.lang.Exception) {
Log.e(TAG, "getChipSetFromCpuInfo failed", e)
""
}
}
private fun getCpuLevel(): Int {
val hardwareInfo = getHardwareInfo()
val level = if (hardwareInfo.isNotEmpty()) {
if (hardwareInfo.contains(QUALCOMM)) {
getQualcommCpuLevel(hardwareInfo)
} else {
getMtkCpuLevel(hardwareInfo)
}
} else {
DEVICE_UNKNOWN
}
return if (level == DEVICE_UNKNOWN) {
getCpuStats().level
} else {
level
}
}
private fun getMtkCpuLevel(str: String): Int {
val matcher: Matcher = MT_PATTERN.matcher(str)
if (!matcher.find()) {
return DEVICE_UNKNOWN
}
val group: String? = matcher.group(1)
val group2: String? = matcher.group(2)
if (group == null || group2 == null) {
return DEVICE_UNKNOWN
}
val parseInt = group.toInt()
val parseInt2 = group2.toInt()
return if (parseInt != MTK_DIMENSITY || parseInt2 < D800) {
DEVICE_PRIMARY
} else {
DEVICE_MIDDLE
}
}
private fun getQualcommCpuLevel(str: String): Int {
val matcher: Matcher = SM_PATTERN.matcher(str)
if (!matcher.find()) {
return DEVICE_UNKNOWN
}
val group: String? = matcher.group(1)
val group2: String? = matcher.group(2)
if (group == null || group2 == null || group.toLowerCase(Locale.ENGLISH) != SNAPDRAGON) {
return DEVICE_UNKNOWN
}
val parseInt = group2.substring(0, 1).toInt()
val parseInt2 = group2.substring(1).toInt()
if (parseInt >= 8 && parseInt2 > MIDDLE_EIGHT_SERIES) {
return DEVICE_HIGH_END
}
return if (parseInt >= 7) {
DEVICE_MIDDLE
} else {
DEVICE_PRIMARY
}
}
class CpuInfo {
var id: Int? = null
var implementor: Int? = null
var architecture: Int? = null
var part: Int? = null
var maxFreq: Int = 0
override fun toString(): String {
return "CpuInfo(id=$id, implementor=$implementor, architecture=$architecture, part=$part, maxFreq=$maxFreq)"
}
}
class CpuStats {
var level: Int = DEVICE_UNKNOWN
var maxFreq: Int = 0
var bigCoreCount: Int = 0
var smallCoreCount: Int = 0
override fun toString(): String {
return "CpuStats(level=$level, maxFreq=$maxFreq, bigCoreCount=$bigCoreCount, smallCoreCount=$smallCoreCount)"
}
}
}
================================================
FILE: app/src/main/java/com/huanchengfly/miui/checker/utils/OSUtil.kt
================================================
package com.huanchengfly.miui.checker.utils
import java.io.File
object OSUtil {
fun isMIUI(): Boolean {
return File("/system/framework/framework-miui-res.apk").exists() ||
File("/system/app/miui/miui.apk").exists() ||
File("/system/app/miuisystem/miuisystem.apk").exists()
}
}
================================================
FILE: app/src/main/java/com/huanchengfly/miui/checker/utils/VersionUtil.kt
================================================
package com.huanchengfly.miui.checker.utils
import android.content.Context
import android.content.pm.PackageManager
object VersionUtil {
fun getVersionCode(context: Context): Int {
var versionCode = 0
try {
versionCode =
context.packageManager.getPackageInfo(context.packageName, 0).versionCode
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return versionCode
}
fun getVersionName(context: Context): String {
var verName = ""
try {
verName = context.packageManager.getPackageInfo(context.packageName, 0).versionName
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return verName
}
}
================================================
FILE: app/src/main/java/com/huanchengfly/miui/checker/utils/XposedUtil.kt
================================================
package com.huanchengfly.miui.checker.utils
import android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
object XposedUtil {
private val MANAGER_PACKAGE_NAME_LIST = listOf(
"org.meowcat.edxposed.manager"
)
@JvmStatic
val isModuleEnabled: Boolean
get() = false
fun isManagerInstalled(context: Context): Boolean {
return getInstalledManagerPackageName(context) != null
}
fun getInstalledManagerPackageName(context: Context): String? {
return MANAGER_PACKAGE_NAME_LIST.firstOrNull {
checkAppInstalled(context, it)
}
}
fun checkAppInstalled(context: Context, pkgName: String): Boolean {
if (pkgName.isEmpty()) {
return false
}
var packageInfo: PackageInfo?
try {
packageInfo = context.packageManager.getPackageInfo(pkgName, 0)
} catch (e: PackageManager.NameNotFoundException) {
packageInfo = null
e.printStackTrace()
}
return packageInfo != null
}
}
================================================
FILE: app/src/main/java/com/huanchengfly/miui/checker/xposed/FullDeviceLevelModule.kt
================================================
package com.huanchengfly.miui.checker.xposed
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XC_MethodReplacement
import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage
class FullDeviceLevelModule : IXposedHookLoadPackage {
override fun handleLoadPackage(packageParam: XC_LoadPackage.LoadPackageParam) {
val pkgName = packageParam.packageName
if (SELF_PACKAGE_NAME == pkgName) {
val clazz =
XposedHelpers.findClassIfExists(
"$SELF_PACKAGE_NAME.utils.XposedUtil",
packageParam.classLoader
) ?: return
XposedHelpers.findAndHookMethod(
clazz,
"isModuleEnabled",
XC_MethodReplacement.returnConstant(true)
)
} else if ("miui" in pkgName || "xiaomi" in pkgName) {
val clazz =
XposedHelpers.findClassIfExists(
MIUIX_DEVICE_UTILS_CLASS_NAME,
packageParam.classLoader
) ?: return
XposedHelpers.findAndHookMethod(
clazz,
"getDeviceLevel",
XC_MethodReplacement.returnConstant(2)
)
}
}
companion object {
const val SELF_PACKAGE_NAME = "com.huanchengfly.miui.checker"
const val MIUIX_DEVICE_UTILS_CLASS_NAME = "miuix.animation.utils.DeviceUtils"
}
}
================================================
FILE: app/src/main/res/animator/appbar_elevation.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<objectAnimator
android:duration="1"
android:propertyName="elevation"
android:valueTo="0dp"
android:valueType="floatType" />
</item>
</selector>
================================================
FILE: app/src/main/res/drawable/emoji_confused_face.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="127.956375dp"
android:height="128dp"
android:viewportWidth="117.32"
android:viewportHeight="117.36">
<path
android:fillColor="#1a1626"
android:pathData="M117.32,58.89c-0.15,32.24 -26.88,58.74 -59,58.47s-58.59,-27 -58.32,-59.15c0.27,-32 26.78,-58.27 58.75,-58.21C90.98,0.07 117.47,26.68 117.32,58.89Z" />
<path
android:fillColor="#fed414"
android:pathData="M59.07,5.54a53.14,53.14 0,1 1,-53.55 52.85A52.84,52.84 0,0 1,59.07 5.54Z" />
<path
android:fillColor="#1b1726"
android:pathData="M65.09,69.48a40.13,40.13 0,0 1,11.27 1.53c2.36,0.62 4,1.87 3.26,4.58s-2.61,3 -5.11,2.36c-7.88,-2 -15.75,-2.36 -23.31,1.29a36.91,36.91 0,0 0,-6.71 4.18c-2,1.59 -4,2.88 -6,0.56 -2.33,-2.65 -0.33,-4.57 1.69,-6.18A37.22,37.22 0,0 1,65.09 69.48Z" />
<path
android:fillColor="#1c1726"
android:pathData="M69.46,46.27c0,-5 2.84,-8.65 6.82,-8.73s7.37,4 7.25,8.92 -3.26,8.55 -7.19,8.49S69.48,51.28 69.46,46.27Z" />
<path
android:fillColor="#1b1726"
android:pathData="M47.85,46.06c0.07,5 -2.72,8.7 -6.66,8.89 -4.11,0.19 -7.44,-3.74 -7.41,-8.77 0,-4.77 3.15,-8.6 7,-8.64S47.78,41.08 47.85,46.06Z" />
</vector>
================================================
FILE: app/src/main/res/drawable/emoji_expressionless_face.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="127.91275dp"
android:height="128dp"
android:viewportWidth="117.28"
android:viewportHeight="117.36">
<path
android:fillColor="#1a1626"
android:pathData="M0,58.32c0.21,-32.15 27.1,-58.66 59.13,-58.31s58.23,26.82 58.15,58.78c-0.08,32.17 -26.78,58.74 -58.87,58.57S-0.21,90.43 0,58.32Z" />
<path
android:fillColor="#fed414"
android:pathData="M5.52,58.67a53.12,53.12 0,1 1,53.26 53.13A52.85,52.85 0,0 1,5.52 58.67Z" />
<path
android:fillColor="#1a1626"
android:pathData="M59.12,74.67c6.82,0 13.63,0 20.45,0 2.71,0 4.81,0.83 4.68,3.79 -0.11,2.64 -2.18,3.33 -4.65,3.32q-20.94,-0.07 -41.89,0c-2.71,0 -4.82,-0.82 -4.68,-3.78 0.12,-2.63 2.17,-3.36 4.65,-3.33C44.83,74.67 51.97,74.67 59.12,74.67Z" />
<path
android:fillColor="#1f1a25"
android:pathData="M38.42,46.3c3.31,0 6.62,0 9.93,0 2.3,0 4,1 4,3.44s-1.58,3.63 -3.86,3.66c-6.79,0.07 -13.57,0.06 -20.36,0 -2.29,0 -3.94,-1.19 -4,-3.54 0,-2.72 1.87,-3.6 4.34,-3.59C31.79,46.31 35.1,46.29 38.42,46.3Z" />
<path
android:fillColor="#1f1a25"
android:pathData="M78.97,53.44c-3.31,0 -6.62,0.06 -9.93,0 -2.5,-0.05 -4.24,-1.3 -4.07,-3.94 0.15,-2.41 2,-3.19 4.23,-3.19 6.62,0 13.24,0 19.86,0 2.28,0 4,0.93 4.07,3.35 0.05,2.65 -1.74,3.76 -4.23,3.79C85.63,53.47 82.28,53.45 78.97,53.44Z" />
</vector>
================================================
FILE: app/src/main/res/drawable/emoji_grinning_squinting_face.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="127.96728dp"
android:height="128dp"
android:viewportWidth="117.32"
android:viewportHeight="117.35">
<path
android:fillColor="#1a1626"
android:pathData="M117.32,58.48c0.12,32.14 -26.43,58.82 -58.59,58.88s-58.76,-26.62 -58.73,-58.74c0,-31.94 26.35,-58.39 58.34,-58.62S117.2,26.3 117.32,58.48Z" />
<path
android:fillColor="#fed414"
android:pathData="M58.91,5.54a53.14,53.14 0,1 1,-53.39 53A52.84,52.84 0,0 1,58.91 5.54Z" />
<path
android:fillColor="#1a1626"
android:pathData="M58.47,63.89c9,0.34 17.93,0.64 26.77,2.28 6.28,1.17 7.95,3.84 6.87,10.22a24.58,24.58 0,0 1,-14.53 19,43.09 43.09,0 0,1 -37.55,0.17 24.85,24.85 0,0 1,-15 -19.75c-0.87,-5.66 1,-8.41 6.66,-9.52C40.54,64.53 49.52,64.29 58.47,63.89Z" />
<path
android:fillColor="#1b1726"
android:pathData="M77.86,46.26c4.33,1.76 7.7,3.1 11,4.5 2.55,1.08 4.39,2.68 3,5.73 -1.32,2.81 -3.5,2.4 -5.9,1.38 -6.11,-2.58 -12.27,-5 -18.4,-7.55 -1.74,-0.71 -3.38,-1.69 -3.48,-3.8 -0.1,-2.35 1.5,-3.46 3.5,-4.27q9.43,-3.82 18.83,-7.79c2.31,-1 4.25,-1 5.44,1.53 1.3,2.71 -0.05,4.5 -2.45,5.56C85.92,43.09 82.36,44.44 77.86,46.26Z" />
<path
android:fillColor="#1b1726"
android:pathData="M39.39,46.28c-4.25,-1.75 -7.75,-3.15 -11.21,-4.62 -2.39,-1 -4,-2.61 -2.86,-5.4s3.28,-2.77 5.77,-1.72c6.26,2.65 12.57,5.2 18.87,7.75 1.84,0.74 3.27,1.91 3.29,3.95s-1.47,3.2 -3.28,3.94q-9.66,4 -19.32,8c-2.35,1 -4.27,0.66 -5.35,-1.84s0.17,-4.24 2.37,-5.22C31.28,49.48 34.98,48.08 39.39,46.28Z" />
<path
android:fillColor="#fbfbfb"
android:pathData="M58.15,76.54c-7.64,0 -15.29,0 -22.93,0 -2,0 -4.43,0.29 -4.7,-2.42 -0.31,-3.18 2.52,-3.05 4.54,-3.3a195.79,195.79 0,0 1,47.22 0c2,0.25 4.85,0.13 4.51,3.31 -0.28,2.71 -2.73,2.41 -4.71,2.41C74.1,76.55 66.13,76.54 58.15,76.54Z" />
<path
android:fillColor="#f7779a"
android:pathData="M44.22,91.28c9.62,-3.16 19.26,-3.15 30,-0.16A40.49,40.49 0,0 1,44.22 91.28Z" />
</vector>
================================================
FILE: app/src/main/res/drawable/emoji_thinking_face.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="128.32776dp"
android:height="128dp"
android:viewportWidth="117.46"
android:viewportHeight="117.16">
<path
android:fillColor="#1b1626"
android:pathData="M2.9,73.67c-4.54,-11.18 -3.23,-22.44 0.3,-33.41 8.87,-27.55 36.47,-44.05 65.39,-39.52 27.29,4.27 48.28,28.69 48.85,56.84 0.79,38.38 -36.05,67.42 -73.17,57.68l-3.38,-0.84c-2.75,-3.34 0,-4.45 2.31,-5.74 8.88,1.3 17.75,2.46 26.72,0.52 22.48,-4.84 42.38,-25.68 40.58,-55.21 -1.4,-22.79 -20.88,-43.76 -44.61,-46.85 -31.6,-4.11 -58.66,19.7 -58.68,51.64 0,2.82 0.11,5.65 -0.12,8.48A9.42,9.42 0,0 1,2.9 73.67Z" />
<path
android:fillColor="#9aa8ad"
android:pathData="M42.85,109.39c-0.51,1.73 -3.61,2.45 -2,5 -6.67,2 -13.31,-0.28 -20,-0.19a18.9,18.9 0,0 1,-18.7 -22.5c1.15,-6.08 2.08,-12 0.69,-18.06 0,-2.72 2.16,-4 3.64,-5.77 4.48,-2.7 8.86,-1.31 11.77,3.74 3.35,5.8 3.38,5.88 9.72,3.59 4.86,-1.77 9.61,-2.25 14.51,-0.09 3,1.34 6.38,1.74 9.6,2.52 2.89,0.7 5.19,2.36 5.72,5.55s-0.15,6.62 -3.07,7.81c-6.09,2.49 -7.84,7.51 -9.38,13A11.79,11.79 0,0 1,42.85 109.39Z" />
<path
android:fillColor="#fed414"
android:pathData="M42.85,109.39c0.39,-5.34 3.22,-10 4.2,-15.17 0.31,-1.62 1.73,-1.75 3,-2.09 4.08,-1.07 7,-3.32 6.71,-8s-3.76,-5.35 -7.46,-5.69a7.08,7.08 0,0 1,-2.41 -0.57c-8.06,-3.9 -16,-3.56 -23.79,0.71 -2.77,1.52 -3.83,0.93 -4.44,-2.46 -1.27,-7 -4.71,-9.08 -12.16,-8.26 -5.56,-28.1 13.22,-55.63 42,-61.54 28,-5.76 56.19,12.54 62.18,40.48C119.26,86.66 83.2,121.19 42.85,109.39Z" />
<path
android:fillColor="#fefefe"
android:pathData="M42.72,87.72c-0.09,2.53 4.19,6.18 -1.95,7.12 -0.74,0.11 0.15,1 0.34,1.55 1,2.67 2.07,5.43 -2.15,6.32 -1.18,0.25 -0.71,0.89 -0.39,1.41 1.65,2.68 0.81,5 -1.56,6.42s-5.41,1.88 -7.89,0a3.09,3.09 0,0 0,-3.12 -0.58c-10.86,2.95 -22.91,-3.67 -19.86,-20.3 0.87,-4.76 2.28,-9.29 0.87,-14.17 -0.46,-1.6 -0.25,-3.43 1.93,-4s4.05,0 5.13,2a14.57,14.57 0,0 1,1.76 7.67c-0.2,3.28 1.15,3.76 3.83,2.5a19,19 0,0 0,2.34 -0.82c9.59,-6.26 19.29,-3.62 29,-0.46 1.4,0.46 2.64,0.95 2.29,2.63 -0.41,2 -1.85,3 -3.82,3.44C47.13,89.03 45.09,86.91 42.72,87.72Z" />
<path
android:fillColor="#1c1726"
android:pathData="M65.8,72.59a3.5,3.5 0,0 1,-2.05 3.16,2.93 2.93,0 0,1 -3.7,-0.25c-7.23,-6.77 -15.64,-7.23 -24.68,-4.88 -2.11,0.55 -4.07,0 -4.64,-2.52 -0.49,-2.17 0.62,-3.56 2.62,-4.15 10.81,-3.12 21,-2.56 30.06,5C64.52,69.91 65.8,70.88 65.8,72.59Z" />
<path
android:fillColor="#1b1726"
android:pathData="M48,37.97c0.05,5.45 -3.51,9.87 -7.85,9.75 -3.54,-0.1 -6.17,-3.34 -6.21,-7.68 0,-5.26 3.72,-9.85 8,-9.75C45.57,30.37 47.97,33.4 48,37.97Z" />
<path
android:fillColor="#1c1726"
android:pathData="M79.96,45.31c-0.05,5.2 -3.47,9.46 -7.61,9.5 -3.8,0 -6.54,-3.34 -6.45,-7.93 0.09,-5 3.69,-9.43 7.74,-9.49C77.51,37.33 80.01,40.47 79.96,45.31Z" />
<path
android:fillColor="#d69700"
android:pathData="M78.19,26.6c5.08,-0.28 9.22,1.39 13.37,3.06 2.12,0.86 2.78,2.41 1.82,4.37s-2.65,1.57 -4.23,0.66c-5.8,-3.36 -11.89,-3.62 -18.16,-1.64 -2,0.64 -4.26,1.1 -4.89,-1.54s2,-3.43 3.75,-3.67C72.8,27.44 75.58,25.95 78.19,26.6Z" />
<path
android:fillColor="#d69700"
android:pathData="M40.04,17.62A26.18,26.18 0,0 1,52.8 21.01c1.71,0.92 2.6,2.2 1.64,4s-2.52,1.65 -4.14,0.55c-4,-2.71 -8.59,-3.1 -13.28,-3 -1.82,0 -4.67,0.8 -4.61,-2.12 0.05,-2.24 2.69,-2.54 4.66,-2.8A22.62,22.62 0,0 1,40.04 17.62Z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_launcher_foreground.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:tint="#FFFFFF"
android:viewportWidth="108"
android:viewportHeight="108">
<group
android:scaleX="1.566"
android:scaleY="1.566"
android:translateX="35.208"
android:translateY="35.208">
<path
android:fillColor="@android:color/white"
android:fillType="evenOdd"
android:pathData="M20,3H4C2.9,3 2,3.9 2,5v14c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V5C22,3.9 21.1,3 20,3zM9,17H6c-0.55,0 -1,-0.45 -1,-1c0,-0.55 0.45,-1 1,-1h3c0.55,0 1,0.45 1,1C10,16.55 9.55,17 9,17zM9,13H6c-0.55,0 -1,-0.45 -1,-1c0,-0.55 0.45,-1 1,-1h3c0.55,0 1,0.45 1,1C10,12.55 9.55,13 9,13zM9,9H6C5.45,9 5,8.55 5,8c0,-0.55 0.45,-1 1,-1h3c0.55,0 1,0.45 1,1C10,8.55 9.55,9 9,9zM18.7,11.12l-3.17,3.17c-0.39,0.39 -1.03,0.39 -1.42,0l-1.41,-1.42c-0.39,-0.39 -0.39,-1.02 0,-1.41c0.39,-0.39 1.02,-0.39 1.41,0l0.71,0.71l2.47,-2.47c0.39,-0.39 1.02,-0.39 1.41,0l0.01,0.01C19.09,10.1 19.09,10.74 18.7,11.12z" />
</group>
</vector>
================================================
FILE: app/src/main/res/drawable/ic_logo_github.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="M256,32C132.3,32 32,134.9 32,261.7c0,101.5 64.2,187.5 153.2,217.9a17.56,17.56 0,0 0,3.8 0.4c8.3,0 11.5,-6.1 11.5,-11.4 0,-5.5 -0.2,-19.9 -0.3,-39.1a102.4,102.4 0,0 1,-22.6 2.7c-43.1,0 -52.9,-33.5 -52.9,-33.5 -10.2,-26.5 -24.9,-33.6 -24.9,-33.6 -19.5,-13.7 -0.1,-14.1 1.4,-14.1h0.1c22.5,2 34.3,23.8 34.3,23.8 11.2,19.6 26.2,25.1 39.6,25.1a63,63 0,0 0,25.6 -6c2,-14.8 7.8,-24.9 14.2,-30.7 -49.7,-5.8 -102,-25.5 -102,-113.5 0,-25.1 8.7,-45.6 23,-61.6 -2.3,-5.8 -10,-29.2 2.2,-60.8a18.64,18.64 0,0 1,5 -0.5c8.1,0 26.4,3.1 56.6,24.1a208.21,208.21 0,0 1,112.2 0c30.2,-21 48.5,-24.1 56.6,-24.1a18.64,18.64 0,0 1,5 0.5c12.2,31.6 4.5,55 2.2,60.8 14.3,16.1 23,36.6 23,61.6 0,88.2 -52.4,107.6 -102.3,113.3 8,7.1 15.2,21.1 15.2,42.5 0,30.7 -0.3,55.5 -0.3,63 0,5.4 3.1,11.5 11.4,11.5a19.35,19.35 0,0 0,4 -0.4C415.9,449.2 480,363.1 480,261.7 480,134.9 379.7,32 256,32z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_developer_board.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M22,8c0,-0.55 -0.45,-1 -1,-1h-1L20,5c0,-1.1 -0.9,-2 -2,-2L4,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2v-2h1c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-1v-2h1c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-1L20,9h1c0.55,0 1,-0.45 1,-1zM17,19L5,19c-0.55,0 -1,-0.45 -1,-1L4,6c0,-0.55 0.45,-1 1,-1h12c0.55,0 1,0.45 1,1v12c0,0.55 -0.45,1 -1,1zM6.5,13h4c0.28,0 0.5,0.22 0.5,0.5v3c0,0.28 -0.22,0.5 -0.5,0.5h-4c-0.28,0 -0.5,-0.22 -0.5,-0.5v-3c0,-0.28 0.22,-0.5 0.5,-0.5zM12.5,7h3c0.28,0 0.5,0.22 0.5,0.5v2c0,0.28 -0.22,0.5 -0.5,0.5h-3c-0.28,0 -0.5,-0.22 -0.5,-0.5v-2c0,-0.28 0.22,-0.5 0.5,-0.5zM6.5,7h4c0.28,0 0.5,0.22 0.5,0.5v4c0,0.28 -0.22,0.5 -0.5,0.5h-4c-0.28,0 -0.5,-0.22 -0.5,-0.5v-4c0,-0.28 0.22,-0.5 0.5,-0.5zM12.5,11h3c0.28,0 0.5,0.22 0.5,0.5v5c0,0.28 -0.22,0.5 -0.5,0.5h-3c-0.28,0 -0.5,-0.22 -0.5,-0.5v-5c0,-0.28 0.22,-0.5 0.5,-0.5z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_exit_to_app.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M10.79,16.29c0.39,0.39 1.02,0.39 1.41,0l3.59,-3.59c0.39,-0.39 0.39,-1.02 0,-1.41L12.2,7.7c-0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41L12.67,11H4c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h8.67l-1.88,1.88c-0.39,0.39 -0.38,1.03 0,1.41zM19,3H5c-1.11,0 -2,0.9 -2,2v3c0,0.55 0.45,1 1,1s1,-0.45 1,-1V6c0,-0.55 0.45,-1 1,-1h12c0.55,0 1,0.45 1,1v12c0,0.55 -0.45,1 -1,1H6c-0.55,0 -1,-0.45 -1,-1v-2c0,-0.55 -0.45,-1 -1,-1s-1,0.45 -1,1v3c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_help.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92c-0.5,0.51 -0.86,0.97 -1.04,1.69 -0.08,0.32 -0.13,0.68 -0.13,1.14h-2v-0.5c0,-0.46 0.08,-0.9 0.22,-1.31 0.2,-0.58 0.53,-1.1 0.95,-1.52l1.24,-1.26c0.46,-0.44 0.68,-1.1 0.55,-1.8 -0.13,-0.72 -0.69,-1.33 -1.39,-1.53 -1.11,-0.31 -2.14,0.32 -2.47,1.27 -0.12,0.37 -0.43,0.65 -0.82,0.65h-0.3C8.4,9 8,8.44 8.16,7.88c0.43,-1.47 1.68,-2.59 3.23,-2.83 1.52,-0.24 2.97,0.55 3.87,1.8 1.18,1.63 0.83,3.38 -0.19,4.4z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_memory.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M14,9h-4c-0.55,0 -1,0.45 -1,1v4c0,0.55 0.45,1 1,1h4c0.55,0 1,-0.45 1,-1v-4c0,-0.55 -0.45,-1 -1,-1zM13,13h-2v-2h2v2zM21,10c0,-0.55 -0.45,-1 -1,-1h-1L19,7c0,-1.1 -0.9,-2 -2,-2h-2L15,4c0,-0.55 -0.45,-1 -1,-1s-1,0.45 -1,1v1h-2L11,4c0,-0.55 -0.45,-1 -1,-1s-1,0.45 -1,1v1L7,5c-1.1,0 -2,0.9 -2,2v2L4,9c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1v2L4,13c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1v2c0,1.1 0.9,2 2,2h2v1c0,0.55 0.45,1 1,1s1,-0.45 1,-1v-1h2v1c0,0.55 0.45,1 1,1s1,-0.45 1,-1v-1h2c1.1,0 2,-0.9 2,-2v-2h1c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-1v-2h1c0.55,0 1,-0.45 1,-1zM16,17L8,17c-0.55,0 -1,-0.45 -1,-1L7,8c0,-0.55 0.45,-1 1,-1h8c0.55,0 1,0.45 1,1v8c0,0.55 -0.45,1 -1,1z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_offline_bolt.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2.02c-5.51,0 -9.98,4.47 -9.98,9.98s4.47,9.98 9.98,9.98 9.98,-4.47 9.98,-9.98S17.51,2.02 12,2.02zM11.48,17.88v-4.14L8.82,13.74c-0.37,0 -0.62,-0.4 -0.44,-0.73l3.68,-7.17c0.23,-0.47 0.94,-0.3 0.94,0.23v4.19h2.54c0.37,0 0.61,0.39 0.45,0.72l-3.56,7.12c-0.24,0.48 -0.95,0.31 -0.95,-0.22z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_phone_android.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M16,1L8,1C6.34,1 5,2.34 5,4v16c0,1.66 1.34,3 3,3h8c1.66,0 3,-1.34 3,-3L19,4c0,-1.66 -1.34,-3 -3,-3zM13.5,21h-3c-0.28,0 -0.5,-0.22 -0.5,-0.5s0.22,-0.5 0.5,-0.5h3c0.28,0 0.5,0.22 0.5,0.5s-0.22,0.5 -0.5,0.5zM17,18L7,18L7,4h10v14z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_score.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,5.75c0,-0.41 0.34,-0.75 0.75,-0.75s0.75,0.34 0.75,0.75L13.5,8l1.79,-2.69c0.13,-0.19 0.35,-0.31 0.59,-0.31 0.56,0 0.9,0.63 0.59,1.1L15.2,8l1.27,1.9c0.31,0.47 -0.02,1.1 -0.59,1.1 -0.24,0 -0.46,-0.12 -0.59,-0.31L13.5,8v2.25c0,0.41 -0.34,0.75 -0.75,0.75s-0.75,-0.34 -0.75,-0.75v-4.5zM7,8.25c0,-0.55 0.45,-1 1,-1h1.5L9.5,6.5L7.75,6.5c-0.41,0 -0.75,-0.34 -0.75,-0.75S7.34,5 7.75,5L10,5c0.55,0 1,0.45 1,1v1.75c0,0.55 -0.45,1 -1,1L8.5,8.75v0.75h1.75c0.41,0 0.75,0.34 0.75,0.75s-0.34,0.75 -0.75,0.75L8,11c-0.55,0 -1,-0.45 -1,-1L7,8.25zM18.74,13.26l-5.03,5.03c-0.39,0.39 -1.02,0.39 -1.41,0L9,15l-2.49,2.49c-0.56,0.56 -1.51,0.16 -1.51,-0.62 0,-0.23 0.09,-0.46 0.26,-0.62l3.03,-3.03c0.39,-0.39 1.02,-0.39 1.41,0L13,16.5l4.49,-4.49c0.56,-0.56 1.51,-0.16 1.51,0.62 0,0.24 -0.09,0.46 -0.26,0.63z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_settings.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_smartphone.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19H7V5h10v14z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_storage.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M4,20h16c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2L4,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2zM4,17h2v2L4,19v-2zM2,6c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2zM6,7L4,7L4,5h2v2zM4,14h16c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2L4,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2zM4,11h2v2L4,13v-2z" />
</vector>
================================================
FILE: app/src/main/res/layout/activity_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stateListAnimator="@animator/appbar_elevation">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/app_name" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/status_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"
tools:ignore="SpUsage"
tools:src="@drawable/emoji_grinning_squinting_face" />
<TextView
android:id="@+id/status_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?android:textColorPrimary"
android:textSize="17sp"
android:textStyle="bold"
tools:text="@string/status_text_full" />
<TextView
android:id="@+id/status_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="?android:textColorSecondary"
android:textSize="15sp"
tools:text="@string/status_text_full" />
</LinearLayout>
<com.google.android.material.card.MaterialCardView
android:id="@+id/xposed_module_status_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardCornerRadius="8dp"
app:cardElevation="0dp"
app:contentPadding="16dp"
tools:cardBackgroundColor="@color/red_A400">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/xposed_module_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?android:textColorPrimaryInverse"
android:textSize="16sp"
android:textStyle="bold"
tools:text="@string/title_xposed_module_not_actived" />
<TextView
android:id="@+id/xposed_module_status_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/xposed_description"
android:textColor="?android:textColorSecondaryInverse"
android:textSize="14sp" />
</LinearLayout>
<ImageView
android:id="@+id/xposed_module_status_action_btn"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="8dp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_round_exit_to_app"
app:tint="?android:textColorPrimaryInverse" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardCornerRadius="8dp"
app:cardElevation="0dp"
app:contentPadding="16dp"
app:strokeColor="?colorControlHighlight"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/title_device_info"
android:textColor="?android:textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_round_phone_android"
app:tint="?android:textColorSecondary" />
<TextView
android:id="@+id/phone_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_round_developer_board"
app:tint="?android:textColorSecondary" />
<TextView
android:id="@+id/soc_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_round_storage"
app:tint="?android:textColorSecondary" />
<TextView
android:id="@+id/ram_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardCornerRadius="8dp"
app:cardElevation="0dp"
app:contentPadding="16dp"
app:strokeColor="?colorControlHighlight"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/title_miui_level_info"
android:textColor="?android:textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_round_offline_bolt"
app:tint="?android:textColorSecondary" />
<TextView
android:id="@+id/miui_lite_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="1" />
<ImageView
android:id="@+id/miui_lite_help_btn"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="8dp"
android:background="?selectableItemBackgroundBorderless"
android:padding="3dp"
android:src="@drawable/ic_round_help"
app:tint="?android:textColorSecondary" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_round_score"
app:tint="?android:textColorSecondary" />
<TextView
android:id="@+id/device_level_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
================================================
FILE: app/src/main/res/layout/dialog_about.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="56dp"
android:layout_height="56dp"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="?android:textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/dialog_about_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="?android:textColorSecondary"
android:textStyle="bold" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_github"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:insetTop="6dp"
android:insetBottom="0dp"
android:minHeight="0dp"
android:text="@string/btn_source"
android:textColor="?colorSecondary"
app:cornerRadius="100dp"
app:icon="@drawable/ic_logo_github"
app:iconSize="24sp"
app:iconTint="?colorSecondary"
app:rippleColor="?colorSecondary"
app:strokeColor="?colorSecondary" />
</LinearLayout>
</LinearLayout>
================================================
FILE: app/src/main/res/menu/menu_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_about"
android:title="@string/title_about" />
</menu>
================================================
FILE: app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
================================================
FILE: app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
================================================
FILE: app/src/main/res/values/arrays.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="xposedscope">
<item>com.miui.screenrecorder</item>
<item>com.xiaomi.vipaccount</item>
<item>com.miui.miwallpaper.miweatherwallpaper</item>
<item>com.miui.backup</item>
<item>com.miui.huanji</item>
<item>com.miui.hybrid</item>
<item>com.miui.securitycore</item>
<item>com.miui.compass</item>
<item>com.miui.aod</item>
<item>com.miui.voicetrigger</item>
<item>com.xiaomi.mirror</item>
<item>com.miui.audiomonitor</item>
<item>com.miui.calculator</item>
<item>com.miui.weather2</item>
<item>com.xiaomi.scanner</item>
<item>com.miui.home</item>
</string-array>
</resources>
================================================
FILE: app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="blue_A200">#448AFF</color>
<color name="blue_A700">#2962FF</color>
<color name="green_400">#66BB6A</color>
<color name="red_A400">#FF1744</color>
<color name="yellow_A700">#FFD600</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="ic_launcher_background">@color/blue_A200</color>
</resources>
================================================
FILE: app/src/main/res/values/dimens.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="radius">8dp</dimen>
<dimen name="card_elevation">0dp</dimen>
</resources>
================================================
FILE: app/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">MIUILevelChecker</string>
<string name="xposed_description">模块激活后,可以为您强行开启 MIUI 12.5 的完整动画</string>
<string name="title_device_info">设备信息</string>
<string name="status_title_full">完整支持</string>
<string name="status_title_basic">部分支持</string>
<string name="status_title_none">不支持</string>
<string name="status_title_unknown">未知</string>
<string name="status_text_full">您的设备支持 MIUI 12.5 完整动画</string>
<string name="status_text_basic">您的设备只支持 MIUI 12.5 部分动画</string>
<string name="status_text_none">您的设备不支持 MIUI 12.5 的动画</string>
<string name="status_text_unknown">无法获取您的设备等级</string>
<string name="level_text_high_end">高端</string>
<string name="level_text_middle">中端</string>
<string name="level_text_primary">低端</string>
<string name="level_text_unknown">未知</string>
<string name="miui_lite_yes">MIUI “精简版”</string>
<string name="miui_lite_no">非 MIUI “精简版”</string>
<string name="title_miui_level_info">MIUI 机型分级</string>
<string name="title_xposed_module_enabled">Xposed 模块已启用</string>
<string name="title_xposed_module_actived_not_enabled">Xposed 模块已激活,但未启用</string>
<string name="title_xposed_module_not_actived">Xposed 模块未激活</string>
<string name="title_dialog_whats_this">这是什么?</string>
<string name="text_xposed_module_enabled"><![CDATA[已为您强行开启 MIUI 12.5 的完整动画。<br /><strong>注意:由于设备性能限制,部分动画可能会导致卡顿。</strong>]]></string>
<string name="text_xposed_module_not_enabled"><![CDATA[模块启用后,可以为您强行开启 MIUI 12.5 的完整动画。<br />轻按此处可跳转至 Xposed 管理器以启用模块。<br /><strong>注意:由于设备性能限制,部分动画可能会导致卡顿。</strong>]]></string>
<string name="btn_ok">OK</string>
<string name="text_dialog_miui_lite_help">MIUI 可能会将部分机型标记为 \"Lite\" 版(此处译为“精简版”),被标记为精简版的设备无论性能如何都会被认为是“低端”设备,禁用绝大多数动画。</string>
<string name="text_ram_info">%dGB 运行内存</string>
<string name="title_dialog_not_miui">您似乎没有使用 MIUI 系统</string>
<string name="text_dialog_not_miui">本软件的检测结果仅适用于正在使用 MIUI 系统的手机。</string>
<string name="title_about">关于</string>
<string name="text_dialog_about">版本: %1$s(%2$d)\n帮助你查看自己的机型在 MIUI 12.5 上的分级。</string>
<string name="link_source" translatable="false">https://github.com/HuanCheng65/MIUILevelChecker</string>
<string name="btn_source">Github</string>
<string name="btn_coolapk">coolapk</string>
</resources>
================================================
FILE: app/src/main/res/values/themes.xml
================================================
<resources>
<!-- Base application theme. -->
<style name="Theme.FuckMIUI" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/white</item>
<item name="colorPrimaryVariant">@color/white</item>
<item name="colorOnPrimary">@color/black</item>
<item name="colorSecondary">@color/blue_A200</item>
<item name="colorSecondaryVariant">@color/blue_A700</item>
<item name="colorOnSecondary">@color/white</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<item name="dialogCornerRadius">8dp</item>
<item name="alertDialogTheme">@style/Theme.AlertDialog</item>
</style>
<style name="Theme.AlertDialog" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
<item name="dialogCornerRadius">8dp</item>
<item name="colorPrimary">@color/blue_A700</item>
</style>
</resources>
================================================
FILE: app/src/main/res/values-en/strings.xml
================================================
<resources>
<string name="app_name">MIUILevelChecker</string>
<string name="xposed_description">After the module is activated, you can forcibly activate the full animation of MIUI 12.5</string>
<string name="title_device_info">Device Info</string>
<string name="status_title_full">Full support</string>
<string name="status_title_basic">Partial support</string>
<string name="status_title_none">Without support</string>
<string name="status_title_unknown">Unknown</string>
<string name="status_text_full">Your device supports MIUI 12.5 full animation</string>
<string name="status_text_basic">Your device only supports MIUI 12.5 partial animations</string>
<string name="status_text_none">Your device does not support MIUI 12.5 animation</string>
<string name="status_text_unknown">Unable to get the level of your device</string>
<string name="level_text_high_end">High range</string>
<string name="level_text_middle">Mid-range</string>
<string name="level_text_primary">Low range</string>
<string name="level_text_unknown">Unknown</string>
<string name="miui_lite_yes">MIUI Lite Edition</string>
<string name="miui_lite_no">MIUI Normal Edition</string>
<string name="title_miui_level_info">MIUI model classification</string>
<string name="title_xposed_module_enabled">Xposed module is enabled</string>
<string name="title_xposed_module_actived_not_enabled">Xposed module is actived but not enabled</string>
<string name="title_xposed_module_not_actived">Xposed module is not activated</string>
<string name="title_dialog_whats_this">What is this?</string>
<string name="text_xposed_module_enabled"><![CDATA[MIUI 12.5 full animation has been forcibly opened for you.<br /><strong>Note: Due to device performance limitations, some animations may cause hangs.</strong>]]></string>
<string name="text_xposed_module_not_enabled"><![CDATA[Once the module is enabled, you can forcibly activate MIUI 12.5 full animation.<br />Tap here to go to Xposed manager and enable the module.<br /><strong>Note: Due to device performance limitations, some animations may cause hangs.</strong>]]></string>
<string name="btn_ok">OK</string>
<string name="text_dialog_miui_lite_help">MIUI may mark some models as \"Lite\" version. Devices marked as lite version will be considered "low-end" devices regardless of performance, and most of them have animation disabled.</string>
<string name="text_ram_info">%dGB RAM</string>
<string name="title_dialog_not_miui">It seems that you are not using MIUI</string>
<string name="text_dialog_not_miui">The detection results of this software only apply to mobile phones using the MIUI system.</string>
<string name="title_about">About</string>
<string name="text_dialog_about">Version: %1$s(%2$d)\nIt helps you to check the MIUI 12.5 rating of your model.</string>
<string name="link_source" translatable="false">https://github.com/HuanCheng65/MIUILevelChecker</string>
<string name="btn_source">Github</string>
<string name="btn_coolapk">coolapk</string>
</resources>
================================================
FILE: app/src/main/res/values-es/strings.xml
================================================
<resources>
<string name="app_name">MIUILevelChecker</string>
<string name="xposed_description">Una vez activado el módulo, puede activar a la fuerza la animación completa de MIUI 12.5</string>
<string name="title_device_info">Información del dispositivo</string>
<string name="status_title_full">Soporte total</string>
<string name="status_title_basic">Soporte parcial</string>
<string name="status_title_none">Sin soporte</string>
<string name="status_title_unknown">Desconocido</string>
<string name="status_text_full">Su dispositivo es compatible con la animación completa de MIUI 12.5</string>
<string name="status_text_basic">Su dispositivo solo admite animaciones parciales de MIUI 12.5</string>
<string name="status_text_none">Su dispositivo no es compatible con la animación de MIUI 12.5</string>
<string name="status_text_unknown">No se puede obtener el nivel de su dispositivo</string>
<string name="level_text_high_end">Gama Alta</string>
<string name="level_text_middle">Gama Media</string>
<string name="level_text_primary">Gama Baja</string>
<string name="level_text_unknown">Desconocido</string>
<string name="miui_lite_yes">MIUI Lite</string>
<string name="miui_lite_no">MIUI normal</string>
<string name="title_miui_level_info">Clasificación del modelo MIUI</string>
<string name="title_xposed_module_enabled">El módulo Xposed está habilitado</string>
<string name="title_xposed_module_actived_not_enabled">El módulo Xposed está activado, pero no funcionando</string>
<string name="title_xposed_module_not_actived">El módulo Xposed no está activado</string>
<string name="title_dialog_whats_this">¿Que es esto?</string>
<string name="text_xposed_module_enabled"><![CDATA[La animación completa de MIUI 12.5 se ha abierto a la fuerza para ti.<br /><strong>Nota: debido a las limitaciones de rendimiento del dispositivo, algunas animaciones pueden provocar bloqueos.</strong>]]></string>
<string name="text_xposed_module_not_enabled"><![CDATA[Una vez que el módulo está habilitado, puede activar a la fuerza la animación completa de MIUI 12.5.<br />Toque aquí para ir al administrador Xposed y habilitar el módulo.<br /><strong>Nota: debido a las limitaciones de rendimiento del dispositivo, algunas animaciones pueden provocar bloqueos.</strong>]]></string>
<string name="btn_ok">Vale</string>
<string name="text_dialog_miui_lite_help">MIUI puede marcar algunos modelos como versión \"Lite\" (aquí traducida como "versión reducida"). Los dispositivos marcados como versión lite se considerarán dispositivos de "gama baja" independientemente de su rendimiento, y la mayoría de ellos tienen animación desactivada.</string>
<string name="text_ram_info">%dGB Memoria RAM</string>
<string name="title_dialog_not_miui">Parece que no estás usando MIUI</string>
<string name="text_dialog_not_miui">Los resultados de detección de este software solo se aplican a teléfonos móviles que utilizan el sistema MIUI.</string>
<string name="title_about">Acerca de</string>
<string name="text_dialog_about">Versión: %1$s(%2$d)\nTe ayuda a verificar la calificación MIUI 12.5 de tu modelo.</string>
<string name="link_source" translatable="false">https://github.com/HuanCheng65/MIUILevelChecker</string>
<string name="btn_source">Github</string>
<string name="btn_coolapk">coolapk</string>
</resources>
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = "1.4.21"
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Sat Feb 13 14:46:21 CST 2021
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle
================================================
include ':app'
rootProject.name = "FuckMIUI"
gitextract_6b_kueyn/ ├── .github/ │ └── workflows/ │ └── android.yml ├── .gitignore ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── huanchengfly/ │ │ └── miui/ │ │ └── checker/ │ │ └── ExampleInstrumentedTest.kt │ └── main/ │ ├── AndroidManifest.xml │ ├── assets/ │ │ └── xposed_init │ ├── java/ │ │ └── com/ │ │ └── huanchengfly/ │ │ └── miui/ │ │ └── checker/ │ │ ├── Extensions.kt │ │ ├── MainActivity.kt │ │ ├── utils/ │ │ │ ├── DeviceUtil.kt │ │ │ ├── OSUtil.kt │ │ │ ├── VersionUtil.kt │ │ │ └── XposedUtil.kt │ │ └── xposed/ │ │ └── FullDeviceLevelModule.kt │ └── res/ │ ├── animator/ │ │ └── appbar_elevation.xml │ ├── drawable/ │ │ ├── emoji_confused_face.xml │ │ ├── emoji_expressionless_face.xml │ │ ├── emoji_grinning_squinting_face.xml │ │ ├── emoji_thinking_face.xml │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_logo_github.xml │ │ ├── ic_round_developer_board.xml │ │ ├── ic_round_exit_to_app.xml │ │ ├── ic_round_help.xml │ │ ├── ic_round_memory.xml │ │ ├── ic_round_offline_bolt.xml │ │ ├── ic_round_phone_android.xml │ │ ├── ic_round_score.xml │ │ ├── ic_round_settings.xml │ │ ├── ic_round_smartphone.xml │ │ └── ic_round_storage.xml │ ├── layout/ │ │ ├── activity_main.xml │ │ └── dialog_about.xml │ ├── menu/ │ │ └── menu_main.xml │ ├── mipmap-anydpi-v26/ │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ ├── values/ │ │ ├── arrays.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── themes.xml │ ├── values-en/ │ │ └── strings.xml │ └── values-es/ │ └── strings.xml ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle
Condensed preview — 52 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (91K chars).
[
{
"path": ".github/workflows/android.yml",
"chars": 572,
"preview": "name: Android CI\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n\njobs:\n build:\n\n run"
},
{
"path": ".gitignore",
"chars": 979,
"preview": ".DS_Store\n.cxx\n\n# Built application files\n*.apk\n*.ap_\napp/release/\n\n# Files for the ART/Dalvik VM\n*.dex\n\n# Java class fi"
},
{
"path": "README.md",
"chars": 46,
"preview": "# MIUILevelChecker\n帮助你查看自己的机型在 MIUI 12.5 上的分级\n"
},
{
"path": "app/.gitignore",
"chars": 6,
"preview": "/build"
},
{
"path": "app/build.gradle",
"chars": 1477,
"preview": "plugins {\n id 'com.android.application'\n id 'kotlin-android'\n}\n\nandroid {\n compileSdkVersion 29\n\n defaultCon"
},
{
"path": "app/proguard-rules.pro",
"chars": 750,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "app/src/androidTest/java/com/huanchengfly/miui/checker/ExampleInstrumentedTest.kt",
"chars": 678,
"preview": "package com.huanchengfly.miui.checker\n\nimport androidx.test.ext.junit.runners.AndroidJUnit4\nimport androidx.test.platfor"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 1185,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "app/src/main/assets/xposed_init",
"chars": 58,
"preview": "com.huanchengfly.miui.checker.xposed.FullDeviceLevelModule"
},
{
"path": "app/src/main/java/com/huanchengfly/miui/checker/Extensions.kt",
"chars": 1454,
"preview": "package com.huanchengfly.miui.checker\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content"
},
{
"path": "app/src/main/java/com/huanchengfly/miui/checker/MainActivity.kt",
"chars": 6004,
"preview": "package com.huanchengfly.miui.checker\n\nimport android.annotation.SuppressLint\nimport android.os.Build\nimport android.os."
},
{
"path": "app/src/main/java/com/huanchengfly/miui/checker/utils/DeviceUtil.kt",
"chars": 9806,
"preview": "package com.huanchengfly.miui.checker.utils\n\nimport android.text.TextUtils\nimport android.util.Log\nimport java.io.*\nimpo"
},
{
"path": "app/src/main/java/com/huanchengfly/miui/checker/utils/OSUtil.kt",
"chars": 326,
"preview": "package com.huanchengfly.miui.checker.utils\n\nimport java.io.File\n\nobject OSUtil {\n fun isMIUI(): Boolean {\n re"
},
{
"path": "app/src/main/java/com/huanchengfly/miui/checker/utils/VersionUtil.kt",
"chars": 799,
"preview": "package com.huanchengfly.miui.checker.utils\n\nimport android.content.Context\nimport android.content.pm.PackageManager\n\nob"
},
{
"path": "app/src/main/java/com/huanchengfly/miui/checker/utils/XposedUtil.kt",
"chars": 1098,
"preview": "package com.huanchengfly.miui.checker.utils\n\nimport android.content.Context\nimport android.content.pm.PackageInfo\nimport"
},
{
"path": "app/src/main/java/com/huanchengfly/miui/checker/xposed/FullDeviceLevelModule.kt",
"chars": 1496,
"preview": "package com.huanchengfly.miui.checker.xposed\n\nimport de.robv.android.xposed.IXposedHookLoadPackage\nimport de.robv.androi"
},
{
"path": "app/src/main/res/animator/appbar_elevation.xml",
"chars": 324,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item>\n"
},
{
"path": "app/src/main/res/drawable/emoji_confused_face.xml",
"chars": 1281,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"127.956375dp\"\n android:height=\""
},
{
"path": "app/src/main/res/drawable/emoji_expressionless_face.xml",
"chars": 1426,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"127.91275dp\"\n android:height=\"1"
},
{
"path": "app/src/main/res/drawable/emoji_grinning_squinting_face.xml",
"chars": 2077,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"127.96728dp\"\n android:height=\"1"
},
{
"path": "app/src/main/res/drawable/emoji_thinking_face.xml",
"chars": 3520,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"128.32776dp\"\n android:height=\"1"
},
{
"path": "app/src/main/res/drawable/ic_launcher_foreground.xml",
"chars": 1073,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"108dp\"\n android:height=\"108dp\"\n"
},
{
"path": "app/src/main/res/drawable/ic_logo_github.xml",
"chars": 1129,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"512dp\"\n android:height=\"512dp\"\n"
},
{
"path": "app/src/main/res/drawable/ic_round_developer_board.xml",
"chars": 1160,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_exit_to_app.xml",
"chars": 819,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_help.xml",
"chars": 833,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_memory.xml",
"chars": 980,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_offline_bolt.xml",
"chars": 611,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_phone_android.xml",
"chars": 552,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_score.xml",
"chars": 1205,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_settings.xml",
"chars": 1197,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_smartphone.xml",
"chars": 444,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/drawable/ic_round_storage.xml",
"chars": 608,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "app/src/main/res/layout/activity_main.xml",
"chars": 13401,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schema"
},
{
"path": "app/src/main/res/layout/dialog_about.xml",
"chars": 2159,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmln"
},
{
"path": "app/src/main/res/menu/menu_main.xml",
"chars": 206,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item\n "
},
{
"path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 269,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 269,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "app/src/main/res/values/arrays.xml",
"chars": 776,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string-array name=\"xposedscope\">\n <item>com.miui.screenre"
},
{
"path": "app/src/main/res/values/colors.xml",
"chars": 435,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"blue_A200\">#448AFF</color>\n <color name=\"blue_A70"
},
{
"path": "app/src/main/res/values/dimens.xml",
"chars": 145,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <dimen name=\"radius\">8dp</dimen>\n <dimen name=\"card_elevation\""
},
{
"path": "app/src/main/res/values/strings.xml",
"chars": 2350,
"preview": "<resources>\n <string name=\"app_name\">MIUILevelChecker</string>\n <string name=\"xposed_description\">模块激活后,可以为您强行开启 M"
},
{
"path": "app/src/main/res/values/themes.xml",
"chars": 993,
"preview": "<resources>\n <!-- Base application theme. -->\n <style name=\"Theme.FuckMIUI\" parent=\"Theme.MaterialComponents.DayNi"
},
{
"path": "app/src/main/res/values-en/strings.xml",
"chars": 3123,
"preview": "<resources>\n <string name=\"app_name\">MIUILevelChecker</string>\n <string name=\"xposed_description\">After the module"
},
{
"path": "app/src/main/res/values-es/strings.xml",
"chars": 3435,
"preview": "<resources>\n <string name=\"app_name\">MIUILevelChecker</string>\n <string name=\"xposed_description\">Una vez activado"
},
{
"path": "build.gradle",
"chars": 642,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n ex"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 230,
"preview": "#Sat Feb 13 14:46:21 CST 2021\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "gradle.properties",
"chars": 1184,
"preview": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will ov"
},
{
"path": "gradlew",
"chars": 5296,
"preview": "#!/usr/bin/env sh\n\n##############################################################################\n##\n## Gradle start up"
},
{
"path": "gradlew.bat",
"chars": 2176,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "settings.gradle",
"chars": 44,
"preview": "include ':app'\nrootProject.name = \"FuckMIUI\""
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the HuanCheng65/MIUILevelChecker GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 52 files (81.2 KB), approximately 27.7k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.