[
  {
    "path": ".github/workflows/android.yml",
    "content": "name: Android CI\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v2\n    - name: set up JDK 1.8\n      uses: actions/setup-java@v1\n      with:\n        java-version: 1.8\n    - name: Grant execute permission for gradlew\n      run: chmod +x gradlew\n    - name: Build with Gradle\n      run: ./gradlew assembleRelease\n    - name: Upload APK\n      uses: actions/upload-artifact@v2\n      with:\n        name: app-release\n        path: app/build/outputs/apk/release/\n"
  },
  {
    "path": ".gitignore",
    "content": ".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 files\n*.class\n\n# Generated files\nbin/\ngen/\nout/\noutput.json\n\n# Gradle files\n.gradle/\nbuild/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Proguard folder generated by Eclipse\nproguard/\napp/lint.xml\n# app/proguard-project.txt\n\n# Log Files\n*.log\n\n# Android Studio Navigation editor temp files\n.navigation/\n\n# Android Studio captures folder\ncaptures/\n\n# IntelliJ\n*.iml\n.idea/\n\n# Keystore files\n# Uncomment the following line if you do not want to check your keystore files in.\n*.jks\n\nkeystore.properties\n\n# External native build folder generated in Android Studio 2.2 and later\n.externalNativeBuild\n\n# Google Services (e.g. APIs or Firebase)\ngoogle-services.json\n\n# Freeline\nfreeline.py\nfreeline/\nfreeline_project_description.json\n\n# fastlane\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output\nfastlane/readme.md\n"
  },
  {
    "path": "README.md",
    "content": "# MIUILevelChecker\n帮助你查看自己的机型在 MIUI 12.5 上的分级\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build"
  },
  {
    "path": "app/build.gradle",
    "content": "plugins {\n    id 'com.android.application'\n    id 'kotlin-android'\n}\n\nandroid {\n    compileSdkVersion 29\n\n    defaultConfig {\n        applicationId \"com.huanchengfly.miui.checker\"\n        minSdkVersion 28\n        targetSdkVersion 29\n        versionCode 1001\n        versionName \"1.0.1\"\n\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n    buildFeatures {\n        viewBinding = true\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n\n    compileOnly 'de.robv.android.xposed:api:82'\n    implementation 'androidx.legacy:legacy-support-v4:1.0.0'\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version\"\n    implementation 'androidx.core:core-ktx:1.3.1'\n    implementation 'androidx.appcompat:appcompat:1.2.0'\n    implementation 'com.google.android.material:material:1.1.0'\n    implementation 'androidx.constraintlayout:constraintlayout:2.0.0'\n    testImplementation 'junit:junit:4.13.1'\n    androidTestImplementation 'androidx.test.ext:junit:1.1.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "app/src/androidTest/java/com/huanchengfly/miui/checker/ExampleInstrumentedTest.kt",
    "content": "package com.huanchengfly.miui.checker\n\nimport androidx.test.ext.junit.runners.AndroidJUnit4\nimport androidx.test.platform.app.InstrumentationRegistry\nimport org.junit.Assert.assertEquals\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getInstrumentation().targetContext\n        assertEquals(\"com.miui.fuck\", appContext.packageName)\n    }\n}"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huanchengfly.miui.checker\">\n\n    <application\n        android:allowBackup=\"false\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/Theme.FuckMIUI\">\n        <meta-data\n            android:name=\"xposedmodule\"\n            android:value=\"true\" />\n        <meta-data\n            android:name=\"xposeddescription\"\n            android:value=\"@string/xposed_description\" />\n        <meta-data\n            android:name=\"xposedminversion\"\n            android:value=\"82\" />\n        <meta-data\n            android:name=\"xposedscope\"\n            android:resource=\"@array/xposedscope\" />\n\n        <activity android:name=\"com.huanchengfly.miui.checker.MainActivity\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/assets/xposed_init",
    "content": "com.huanchengfly.miui.checker.xposed.FullDeviceLevelModule"
  },
  {
    "path": "app/src/main/java/com/huanchengfly/miui/checker/Extensions.kt",
    "content": "package com.huanchengfly.miui.checker\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.provider.Browser\nimport android.view.LayoutInflater\nimport android.widget.Toast\nimport androidx.viewbinding.ViewBinding\n\n\ninline fun <reified Binding : ViewBinding> Activity.bindView(): Binding {\n    val clazz = Binding::class.java\n    val inflateMethod = clazz.getDeclaredMethod(\"inflate\", LayoutInflater::class.java)\n    val binding: Binding = inflateMethod.invoke(null, layoutInflater) as Binding\n    setContentView(binding.root)\n    return binding\n}\n\nfun Context.toastShort(text: String) {\n    Toast.makeText(this, text, Toast.LENGTH_SHORT).show()\n}\n\nfun Context.toastShort(resId: Int, vararg args: Any) {\n    Toast.makeText(this, getString(resId, *args), Toast.LENGTH_SHORT).show()\n}\n\ninline fun <reified T : Activity> Context.goToActivity() {\n    startActivity(Intent(this, T::class.java))\n}\n\ninline fun <reified T : Activity> Context.goToActivity(pre: Intent.() -> Unit) {\n    startActivity(Intent(this, T::class.java).apply(pre))\n}\n\nfun Context.startApp(packageName: String) {\n    startActivity(packageManager.getLaunchIntentForPackage(packageName))\n}\n\nfun Context.startURL(uri: Uri) {\n    startActivity(Intent(Intent.ACTION_VIEW, uri).apply {\n        putExtra(Browser.EXTRA_APPLICATION_ID, packageName)\n    })\n}\n\nfun Context.startURL(url: String) {\n    startURL(Uri.parse(url))\n}"
  },
  {
    "path": "app/src/main/java/com/huanchengfly/miui/checker/MainActivity.kt",
    "content": "package com.huanchengfly.miui.checker\n\nimport android.annotation.SuppressLint\nimport android.os.Build\nimport android.os.Bundle\nimport android.text.Html\nimport android.view.Menu\nimport android.view.MenuItem\nimport android.view.View\nimport androidx.appcompat.app.AlertDialog\nimport androidx.appcompat.app.AppCompatActivity\nimport com.huanchengfly.miui.checker.databinding.ActivityMainBinding\nimport com.huanchengfly.miui.checker.databinding.DialogAboutBinding\nimport com.huanchengfly.miui.checker.utils.DeviceUtil\nimport com.huanchengfly.miui.checker.utils.OSUtil\nimport com.huanchengfly.miui.checker.utils.VersionUtil\nimport com.huanchengfly.miui.checker.utils.XposedUtil\n\nclass MainActivity : AppCompatActivity() {\n    private lateinit var binding: ActivityMainBinding\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = bindView()\n        setSupportActionBar(binding.toolbar)\n        if (OSUtil.isMIUI()) {\n            load()\n        } else {\n            AlertDialog.Builder(this)\n                    .setTitle(R.string.title_dialog_not_miui)\n                    .setMessage(R.string.text_dialog_not_miui)\n                    .setPositiveButton(R.string.btn_ok, null)\n                    .show()\n        }\n    }\n\n    private fun load() {\n        binding.contentContainer.visibility = View.VISIBLE\n        var manufacturer = Character.toUpperCase(Build.MANUFACTURER[0]).toString() + Build.MANUFACTURER.substring(1)\n        if (Build.BRAND != Build.MANUFACTURER) {\n            manufacturer += \" \" + Character.toUpperCase(Build.BRAND[0]) + Build.BRAND.substring(1)\n        }\n        manufacturer += \" \" + Build.MODEL\n        binding.phoneInfo.text = manufacturer\n        binding.socInfo.text = DeviceUtil.getHardwareInfo()\n        binding.ramInfo.text = getString(R.string.text_ram_info, DeviceUtil.getTotalRam())\n        when (DeviceUtil.getDeviceLevel()) {\n            DeviceUtil.DEVICE_HIGH_END -> {\n                binding.statusIcon.setImageResource(R.drawable.emoji_grinning_squinting_face)\n                binding.statusTitle.setText(R.string.status_title_full)\n                binding.statusText.setText(R.string.status_text_full)\n                binding.deviceLevelInfo.setText(R.string.level_text_high_end)\n            }\n            DeviceUtil.DEVICE_MIDDLE -> {\n                binding.statusIcon.setImageResource(R.drawable.emoji_expressionless_face)\n                binding.statusTitle.setText(R.string.status_title_basic)\n                binding.statusText.setText(R.string.status_text_basic)\n                binding.deviceLevelInfo.setText(R.string.level_text_middle)\n            }\n            DeviceUtil.DEVICE_PRIMARY -> {\n                binding.statusIcon.setImageResource(R.drawable.emoji_confused_face)\n                binding.statusTitle.setText(R.string.status_title_none)\n                binding.statusText.setText(R.string.status_text_none)\n                binding.deviceLevelInfo.setText(R.string.level_text_primary)\n            }\n            DeviceUtil.DEVICE_UNKNOWN -> {\n                binding.statusIcon.setImageResource(R.drawable.emoji_thinking_face)\n                binding.statusTitle.setText(R.string.status_title_unknown)\n                binding.statusText.setText(R.string.status_text_unknown)\n                binding.deviceLevelInfo.setText(R.string.level_text_unknown)\n            }\n        }\n        if (DeviceUtil.isMiuiLite()) {\n            binding.miuiLiteInfo.setText(R.string.miui_lite_yes)\n        } else {\n            binding.miuiLiteInfo.setText(R.string.miui_lite_no)\n        }\n        binding.miuiLiteHelpBtn.setOnClickListener {\n            AlertDialog.Builder(this)\n                    .setTitle(R.string.title_dialog_whats_this)\n                    .setMessage(R.string.text_dialog_miui_lite_help)\n                    .setPositiveButton(R.string.btn_ok, null)\n                    .show()\n        }\n        if (XposedUtil.isModuleEnabled) {\n            binding.xposedModuleStatusCard.setCardBackgroundColor(getColor(R.color.green_400))\n            binding.xposedModuleStatus.setText(R.string.title_xposed_module_enabled)\n            binding.xposedModuleStatusMessage.text = Html.fromHtml(getString(R.string.text_xposed_module_enabled), Html.FROM_HTML_MODE_COMPACT)\n            binding.xposedModuleStatusActionBtn.setImageResource(R.drawable.ic_round_settings)\n            binding.xposedModuleStatusActionBtn.visibility = View.GONE\n        } else if (!XposedUtil.isManagerInstalled(this)) {\n            binding.xposedModuleStatusCard.visibility = View.GONE\n        } else {\n            binding.xposedModuleStatusCard.setCardBackgroundColor(getColor(R.color.red_A400))\n            binding.xposedModuleStatus.setText(R.string.title_xposed_module_not_actived)\n            binding.xposedModuleStatusMessage.text = Html.fromHtml(getString(R.string.text_xposed_module_not_enabled), Html.FROM_HTML_MODE_COMPACT)\n            binding.xposedModuleStatusActionBtn.setImageResource(R.drawable.ic_round_exit_to_app)\n            binding.xposedModuleStatusCard.setOnClickListener {\n                startApp(XposedUtil.getInstalledManagerPackageName(this)!!)\n            }\n        }\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        menuInflater.inflate(R.menu.menu_main, menu)\n        return true\n    }\n\n    @SuppressLint(\"SetTextI18n\")\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        if (item.itemId == R.id.menu_about) {\n            val dialogViewBinding = DialogAboutBinding.inflate(layoutInflater)\n            dialogViewBinding.dialogAboutText.text = getString(R.string.text_dialog_about, VersionUtil.getVersionName(this), VersionUtil.getVersionCode(this))\n            dialogViewBinding.btnGithub.setOnClickListener {\n                startURL(getString(R.string.link_source))\n            }\n            AlertDialog.Builder(this)\n                    .setView(dialogViewBinding.root)\n                    .show()\n        }\n        return false\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/huanchengfly/miui/checker/utils/DeviceUtil.kt",
    "content": "package com.huanchengfly.miui.checker.utils\n\nimport android.text.TextUtils\nimport android.util.Log\nimport java.io.*\nimport java.util.*\nimport java.util.regex.Matcher\nimport java.util.regex.Pattern\n\n\nobject DeviceUtil {\n    private const val TAG = \"DeviceUtil\"\n\n    private val MT_PATTERN: Pattern = Pattern.compile(\"MT([\\\\d]{2})([\\\\d]+)\")\n    private val SM_PATTERN: Pattern = Pattern.compile(\"Inc ([A-Z]+)([\\\\d]+)\")\n\n    const val DEVICE_HIGH_END = 2\n    const val DEVICE_MIDDLE = 1\n    const val DEVICE_PRIMARY = 0\n    const val DEVICE_UNKNOWN = -1\n\n    private const val ARM_V8 = 8\n    private const val CORE_COUNT = 8\n    private const val BIG_CORE_FREQ = 2000000\n    private const val MIDDLE_FREQ = 2300000\n    private const val HIGH_FREQ = 2700000\n    private const val MTK_DIMENSITY = 68\n    private const val D800 = 73\n    private const val MIDDLE_EIGHT_SERIES = 45\n\n    private const val HEX = \"0x\"\n    private const val CPU_MAX_INFO_FORMAT = \"/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq\"\n    private const val IMPLEMENTOR = \"CPU implementer\"\n    private const val ARCHITECTURE = \"CPU architecture\"\n    private const val PART = \"CPU part\"\n    private const val PROCESSOR = \"processor\"\n    private const val QUALCOMM = \"Qualcomm\"\n    private const val SNAPDRAGON = \"sm\"\n    private const val SEPARATOR = \": \"\n\n    private var mLevel = DEVICE_UNKNOWN\n    private var mTotalRam = Int.MAX_VALUE\n\n    fun getDeviceLevel(): Int {\n        if (mLevel != DEVICE_UNKNOWN) {\n            return mLevel\n        }\n        if (isMiuiLite()) {\n            mLevel = DEVICE_PRIMARY\n        } else {\n            mLevel = getCpuLevel()\n            if (mLevel == DEVICE_MIDDLE && getTotalRam() <= 4) {\n                mLevel = DEVICE_PRIMARY\n            }\n        }\n        return mLevel\n    }\n\n    fun getTotalRam(): Int {\n        if (mTotalRam == Int.MAX_VALUE) {\n            mTotalRam = try {\n                ((Class.forName(\"miui.util.HardwareInfo\")\n                    .getMethod(\"getTotalPhysicalMemory\")\n                    .invoke(null) as Long).toLong() / 1024 / 1024 / 1024).toInt()\n            } catch (e: Exception) {\n                Log.e(TAG, \"${e.message}\")\n                0\n            }\n        }\n        return mTotalRam\n    }\n\n    fun isMiuiLite(): Boolean {\n        return try {\n            Class.forName(\"miui.os.Build\").getDeclaredField(\"IS_MIUI_LITE_VERSION\")\n                .get(null) as Boolean\n        } catch (e: Exception) {\n            e.printStackTrace()\n            false\n        }\n    }\n\n    private fun createCpuInfo(str: String): CpuInfo {\n        val cpuInfo = CpuInfo()\n        cpuInfo.id = str.toInt()\n        val contentFromFileInfo = getContentFromFileInfo(\n            String.format(\n                Locale.ENGLISH,\n                CPU_MAX_INFO_FORMAT,\n                cpuInfo.id!!\n            )\n        )\n        if (contentFromFileInfo != null) {\n            cpuInfo.maxFreq = contentFromFileInfo.toInt()\n        }\n        return cpuInfo\n    }\n\n    private fun getContentFromFileInfo(filePath: String): String? {\n        try {\n            val fileInputStream = FileInputStream(filePath)\n            val inputStreamReader = InputStreamReader(fileInputStream)\n            val bufferedReader = BufferedReader(inputStreamReader)\n            val str = bufferedReader.readLine()\n            bufferedReader.close()\n            fileInputStream.close()\n            inputStreamReader.close()\n            return str\n        } catch (e: IOException) {\n            e.printStackTrace()\n        }\n        return null\n    }\n\n    private fun getCpuInfoList(): List<CpuInfo> {\n        val arrayList = mutableListOf<CpuInfo>()\n        try {\n            val scanner = Scanner(File(\"/proc/cpuinfo\"))\n            var cpuInfo: CpuInfo? = null\n            while (scanner.hasNextLine()) {\n                val split: List<String> = scanner.nextLine().split(SEPARATOR)\n                if (split.size > 1) {\n                    cpuInfo = parseLine(split, arrayList, cpuInfo)\n                }\n            }\n        } catch (e: java.lang.Exception) {\n            Log.e(TAG, \"getChipSetFromCpuInfo failed\", e)\n        }\n        return arrayList\n    }\n\n    private fun getCpuStats(): CpuStats {\n        val cpuInfoList: List<CpuInfo> = getCpuInfoList()\n        val cpuStats = CpuStats()\n        if (cpuInfoList.size < CORE_COUNT) {\n            cpuStats.level = DEVICE_PRIMARY\n        }\n        doCpuStats(cpuStats, cpuInfoList)\n        return cpuStats\n    }\n\n    private fun doCpuStats(cpuStats: CpuStats, list: List<CpuInfo>) {\n        for (next in list) {\n            if (next.architecture!! < ARM_V8) {\n                cpuStats.level = DEVICE_PRIMARY\n            }\n            if (next.maxFreq > cpuStats.maxFreq) {\n                cpuStats.maxFreq = next.maxFreq\n            }\n            if (next.maxFreq >= BIG_CORE_FREQ) {\n                cpuStats.bigCoreCount++\n            } else {\n                cpuStats.smallCoreCount++\n            }\n        }\n        decideLevel(cpuStats)\n    }\n\n    private fun decideLevel(cpuStats: CpuStats) {\n        if (cpuStats.level == DEVICE_UNKNOWN) {\n            cpuStats.level = when {\n                cpuStats.bigCoreCount >= 4 ->\n                    when {\n                        cpuStats.maxFreq > HIGH_FREQ -> DEVICE_HIGH_END\n                        cpuStats.maxFreq > MIDDLE_FREQ -> DEVICE_MIDDLE\n                        else -> DEVICE_PRIMARY\n                    }\n                cpuStats.maxFreq > MIDDLE_FREQ -> DEVICE_MIDDLE\n                else -> DEVICE_PRIMARY\n            }\n        }\n    }\n\n    private fun parseLine(\n        strArr: List<String>,\n        list: MutableList<CpuInfo>,\n        cpuInfo: CpuInfo?\n    ): CpuInfo? {\n        val trim = strArr[1].trim { it <= ' ' }\n        return if (strArr[0].contains(PROCESSOR) && TextUtils.isDigitsOnly(trim)) {\n            createCpuInfo(trim).also { list.add(it) }\n        } else {\n            if (cpuInfo != null) {\n                getCpuInfo(strArr[0], trim, cpuInfo)\n            }\n            cpuInfo\n        }\n    }\n\n    private fun getCpuInfo(str: String, str2: String, cpuInfo: CpuInfo) {\n        when {\n            str.contains(IMPLEMENTOR) -> {\n                cpuInfo.implementor = toInt(str2)\n            }\n            str.contains(ARCHITECTURE) -> {\n                cpuInfo.architecture = toInt(str2)\n            }\n            str.contains(PART) -> {\n                cpuInfo.part = toInt(str2)\n            }\n        }\n    }\n\n    private fun toInt(str: String): Int {\n        return if (str.startsWith(HEX)) {\n            str.substring(2).toInt(16)\n        } else {\n            str.toInt()\n        }\n    }\n\n    fun getHardwareInfo(): String {\n        return try {\n            val scanner = Scanner(File(\"/proc/cpuinfo\"))\n            while (scanner.hasNextLine()) {\n                val nextLine = scanner.nextLine()\n                if (!scanner.hasNextLine()) {\n                    val split = nextLine.split(SEPARATOR).toTypedArray()\n                    if (split.size > 1) {\n                        return split[1]\n                    }\n                }\n            }\n            \"\"\n        } catch (e: java.lang.Exception) {\n            Log.e(TAG, \"getChipSetFromCpuInfo failed\", e)\n            \"\"\n        }\n    }\n\n    private fun getCpuLevel(): Int {\n        val hardwareInfo = getHardwareInfo()\n        val level = if (hardwareInfo.isNotEmpty()) {\n            if (hardwareInfo.contains(QUALCOMM)) {\n                getQualcommCpuLevel(hardwareInfo)\n            } else {\n                getMtkCpuLevel(hardwareInfo)\n            }\n        } else {\n            DEVICE_UNKNOWN\n        }\n        return if (level == DEVICE_UNKNOWN) {\n            getCpuStats().level\n        } else {\n            level\n        }\n    }\n\n    private fun getMtkCpuLevel(str: String): Int {\n        val matcher: Matcher = MT_PATTERN.matcher(str)\n        if (!matcher.find()) {\n            return DEVICE_UNKNOWN\n        }\n        val group: String? = matcher.group(1)\n        val group2: String? = matcher.group(2)\n        if (group == null || group2 == null) {\n            return DEVICE_UNKNOWN\n        }\n        val parseInt = group.toInt()\n        val parseInt2 = group2.toInt()\n        return if (parseInt != MTK_DIMENSITY || parseInt2 < D800) {\n            DEVICE_PRIMARY\n        } else {\n            DEVICE_MIDDLE\n        }\n    }\n\n    private fun getQualcommCpuLevel(str: String): Int {\n        val matcher: Matcher = SM_PATTERN.matcher(str)\n        if (!matcher.find()) {\n            return DEVICE_UNKNOWN\n        }\n        val group: String? = matcher.group(1)\n        val group2: String? = matcher.group(2)\n        if (group == null || group2 == null || group.toLowerCase(Locale.ENGLISH) != SNAPDRAGON) {\n            return DEVICE_UNKNOWN\n        }\n        val parseInt = group2.substring(0, 1).toInt()\n        val parseInt2 = group2.substring(1).toInt()\n        if (parseInt >= 8 && parseInt2 > MIDDLE_EIGHT_SERIES) {\n            return DEVICE_HIGH_END\n        }\n        return if (parseInt >= 7) {\n            DEVICE_MIDDLE\n        } else {\n            DEVICE_PRIMARY\n        }\n    }\n\n    class CpuInfo {\n        var id: Int? = null\n        var implementor: Int? = null\n        var architecture: Int? = null\n        var part: Int? = null\n        var maxFreq: Int = 0\n\n        override fun toString(): String {\n            return \"CpuInfo(id=$id, implementor=$implementor, architecture=$architecture, part=$part, maxFreq=$maxFreq)\"\n        }\n    }\n\n    class CpuStats {\n        var level: Int = DEVICE_UNKNOWN\n        var maxFreq: Int = 0\n        var bigCoreCount: Int = 0\n        var smallCoreCount: Int = 0\n\n        override fun toString(): String {\n            return \"CpuStats(level=$level, maxFreq=$maxFreq, bigCoreCount=$bigCoreCount, smallCoreCount=$smallCoreCount)\"\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/huanchengfly/miui/checker/utils/OSUtil.kt",
    "content": "package com.huanchengfly.miui.checker.utils\n\nimport java.io.File\n\nobject OSUtil {\n    fun isMIUI(): Boolean {\n        return File(\"/system/framework/framework-miui-res.apk\").exists() ||\n                File(\"/system/app/miui/miui.apk\").exists() ||\n                File(\"/system/app/miuisystem/miuisystem.apk\").exists()\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/huanchengfly/miui/checker/utils/VersionUtil.kt",
    "content": "package com.huanchengfly.miui.checker.utils\n\nimport android.content.Context\nimport android.content.pm.PackageManager\n\nobject VersionUtil {\n    fun getVersionCode(context: Context): Int {\n        var versionCode = 0\n        try {\n            versionCode =\n                context.packageManager.getPackageInfo(context.packageName, 0).versionCode\n        } catch (e: PackageManager.NameNotFoundException) {\n            e.printStackTrace()\n        }\n        return versionCode\n    }\n\n    fun getVersionName(context: Context): String {\n        var verName = \"\"\n        try {\n            verName = context.packageManager.getPackageInfo(context.packageName, 0).versionName\n        } catch (e: PackageManager.NameNotFoundException) {\n            e.printStackTrace()\n        }\n        return verName\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/huanchengfly/miui/checker/utils/XposedUtil.kt",
    "content": "package com.huanchengfly.miui.checker.utils\n\nimport android.content.Context\nimport android.content.pm.PackageInfo\nimport android.content.pm.PackageManager\n\n\nobject XposedUtil {\n    private val MANAGER_PACKAGE_NAME_LIST = listOf(\n        \"org.meowcat.edxposed.manager\"\n    )\n\n    @JvmStatic\n    val isModuleEnabled: Boolean\n        get() = false\n\n    fun isManagerInstalled(context: Context): Boolean {\n        return getInstalledManagerPackageName(context) != null\n    }\n\n    fun getInstalledManagerPackageName(context: Context): String? {\n        return MANAGER_PACKAGE_NAME_LIST.firstOrNull {\n            checkAppInstalled(context, it)\n        }\n    }\n\n    fun checkAppInstalled(context: Context, pkgName: String): Boolean {\n        if (pkgName.isEmpty()) {\n            return false\n        }\n        var packageInfo: PackageInfo?\n        try {\n            packageInfo = context.packageManager.getPackageInfo(pkgName, 0)\n        } catch (e: PackageManager.NameNotFoundException) {\n            packageInfo = null\n            e.printStackTrace()\n        }\n        return packageInfo != null\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/huanchengfly/miui/checker/xposed/FullDeviceLevelModule.kt",
    "content": "package com.huanchengfly.miui.checker.xposed\n\nimport de.robv.android.xposed.IXposedHookLoadPackage\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedHelpers\nimport de.robv.android.xposed.callbacks.XC_LoadPackage\n\n\nclass FullDeviceLevelModule : IXposedHookLoadPackage {\n    override fun handleLoadPackage(packageParam: XC_LoadPackage.LoadPackageParam) {\n        val pkgName = packageParam.packageName\n        if (SELF_PACKAGE_NAME == pkgName) {\n            val clazz =\n                XposedHelpers.findClassIfExists(\n                    \"$SELF_PACKAGE_NAME.utils.XposedUtil\",\n                    packageParam.classLoader\n                ) ?: return\n            XposedHelpers.findAndHookMethod(\n                clazz,\n                \"isModuleEnabled\",\n                XC_MethodReplacement.returnConstant(true)\n            )\n        } else if (\"miui\" in pkgName || \"xiaomi\" in pkgName) {\n            val clazz =\n                XposedHelpers.findClassIfExists(\n                    MIUIX_DEVICE_UTILS_CLASS_NAME,\n                    packageParam.classLoader\n                ) ?: return\n            XposedHelpers.findAndHookMethod(\n                clazz,\n                \"getDeviceLevel\",\n                XC_MethodReplacement.returnConstant(2)\n            )\n        }\n    }\n\n    companion object {\n        const val SELF_PACKAGE_NAME = \"com.huanchengfly.miui.checker\"\n        const val MIUIX_DEVICE_UTILS_CLASS_NAME = \"miuix.animation.utils.DeviceUtils\"\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/animator/appbar_elevation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item>\n        <objectAnimator\n            android:duration=\"1\"\n            android:propertyName=\"elevation\"\n            android:valueTo=\"0dp\"\n            android:valueType=\"floatType\" />\n    </item>\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/emoji_confused_face.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"127.956375dp\"\n    android:height=\"128dp\"\n    android:viewportWidth=\"117.32\"\n    android:viewportHeight=\"117.36\">\n    <path\n        android:fillColor=\"#1a1626\"\n        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\" />\n    <path\n        android:fillColor=\"#fed414\"\n        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\" />\n    <path\n        android:fillColor=\"#1b1726\"\n        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\" />\n    <path\n        android:fillColor=\"#1c1726\"\n        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\" />\n    <path\n        android:fillColor=\"#1b1726\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/emoji_expressionless_face.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"127.91275dp\"\n    android:height=\"128dp\"\n    android:viewportWidth=\"117.28\"\n    android:viewportHeight=\"117.36\">\n    <path\n        android:fillColor=\"#1a1626\"\n        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\" />\n    <path\n        android:fillColor=\"#fed414\"\n        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\" />\n    <path\n        android:fillColor=\"#1a1626\"\n        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\" />\n    <path\n        android:fillColor=\"#1f1a25\"\n        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\" />\n    <path\n        android:fillColor=\"#1f1a25\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/emoji_grinning_squinting_face.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"127.96728dp\"\n    android:height=\"128dp\"\n    android:viewportWidth=\"117.32\"\n    android:viewportHeight=\"117.35\">\n    <path\n        android:fillColor=\"#1a1626\"\n        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\" />\n    <path\n        android:fillColor=\"#fed414\"\n        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\" />\n    <path\n        android:fillColor=\"#1a1626\"\n        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\" />\n    <path\n        android:fillColor=\"#1b1726\"\n        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\" />\n    <path\n        android:fillColor=\"#1b1726\"\n        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\" />\n    <path\n        android:fillColor=\"#fbfbfb\"\n        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\" />\n    <path\n        android:fillColor=\"#f7779a\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/emoji_thinking_face.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"128.32776dp\"\n    android:height=\"128dp\"\n    android:viewportWidth=\"117.46\"\n    android:viewportHeight=\"117.16\">\n    <path\n        android:fillColor=\"#1b1626\"\n        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\" />\n    <path\n        android:fillColor=\"#9aa8ad\"\n        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\" />\n    <path\n        android:fillColor=\"#fed414\"\n        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\" />\n    <path\n        android:fillColor=\"#fefefe\"\n        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\" />\n    <path\n        android:fillColor=\"#1c1726\"\n        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\" />\n    <path\n        android:fillColor=\"#1b1726\"\n        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\" />\n    <path\n        android:fillColor=\"#1c1726\"\n        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\" />\n    <path\n        android:fillColor=\"#d69700\"\n        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\" />\n    <path\n        android:fillColor=\"#d69700\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:tint=\"#FFFFFF\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n  <group\n      android:scaleX=\"1.566\"\n      android:scaleY=\"1.566\"\n      android:translateX=\"35.208\"\n      android:translateY=\"35.208\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        android:fillType=\"evenOdd\"\n        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\" />\n  </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_logo_github.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"512dp\"\n    android:height=\"512dp\"\n    android:viewportWidth=\"512\"\n    android:viewportHeight=\"512\">\n    <path\n        android:fillColor=\"#FF000000\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_developer_board.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_exit_to_app.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_help.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_memory.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_offline_bolt.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_phone_android.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_score.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_settings.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_smartphone.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_round_storage.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:tint=\"?attr/colorControlNormal\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"@android:color/white\"\n        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\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".MainActivity\">\n\n    <com.google.android.material.appbar.AppBarLayout\n        android:id=\"@+id/appBarLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:stateListAnimator=\"@animator/appbar_elevation\">\n\n        <com.google.android.material.appbar.MaterialToolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            app:title=\"@string/app_name\" />\n    </com.google.android.material.appbar.AppBarLayout>\n\n    <androidx.core.widget.NestedScrollView\n        android:id=\"@+id/content_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:visibility=\"gone\"\n        app:layout_behavior=\"@string/appbar_scrolling_view_behavior\"\n        tools:visibility=\"visible\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\"\n            android:padding=\"16dp\">\n\n            <LinearLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:gravity=\"center_horizontal\"\n                android:orientation=\"vertical\">\n\n                <ImageView\n                    android:id=\"@+id/status_icon\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"24dp\"\n                    android:layout_marginBottom=\"24dp\"\n                    tools:ignore=\"SpUsage\"\n                    tools:src=\"@drawable/emoji_grinning_squinting_face\" />\n\n                <TextView\n                    android:id=\"@+id/status_title\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:textColor=\"?android:textColorPrimary\"\n                    android:textSize=\"17sp\"\n                    android:textStyle=\"bold\"\n                    tools:text=\"@string/status_text_full\" />\n\n                <TextView\n                    android:id=\"@+id/status_text\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginTop=\"4dp\"\n                    android:textColor=\"?android:textColorSecondary\"\n                    android:textSize=\"15sp\"\n                    tools:text=\"@string/status_text_full\" />\n            </LinearLayout>\n\n            <com.google.android.material.card.MaterialCardView\n                android:id=\"@+id/xposed_module_status_card\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                app:cardCornerRadius=\"8dp\"\n                app:cardElevation=\"0dp\"\n                app:contentPadding=\"16dp\"\n                tools:cardBackgroundColor=\"@color/red_A400\">\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:gravity=\"center_vertical\"\n                    android:orientation=\"horizontal\">\n\n                    <LinearLayout\n                        android:layout_width=\"0dp\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_weight=\"1\"\n                        android:orientation=\"vertical\">\n\n                        <TextView\n                            android:id=\"@+id/xposed_module_status\"\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:textColor=\"?android:textColorPrimaryInverse\"\n                            android:textSize=\"16sp\"\n                            android:textStyle=\"bold\"\n                            tools:text=\"@string/title_xposed_module_not_actived\" />\n\n                        <TextView\n                            android:id=\"@+id/xposed_module_status_message\"\n                            android:layout_width=\"match_parent\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginTop=\"8dp\"\n                            android:text=\"@string/xposed_description\"\n                            android:textColor=\"?android:textColorSecondaryInverse\"\n                            android:textSize=\"14sp\" />\n                    </LinearLayout>\n\n                    <ImageView\n                        android:id=\"@+id/xposed_module_status_action_btn\"\n                        android:layout_width=\"24dp\"\n                        android:layout_height=\"24dp\"\n                        android:layout_marginStart=\"8dp\"\n                        android:background=\"?selectableItemBackgroundBorderless\"\n                        android:src=\"@drawable/ic_round_exit_to_app\"\n                        app:tint=\"?android:textColorPrimaryInverse\" />\n                </LinearLayout>\n            </com.google.android.material.card.MaterialCardView>\n\n            <com.google.android.material.card.MaterialCardView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                app:cardCornerRadius=\"8dp\"\n                app:cardElevation=\"0dp\"\n                app:contentPadding=\"16dp\"\n                app:strokeColor=\"?colorControlHighlight\"\n                app:strokeWidth=\"1dp\">\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"vertical\">\n\n                    <TextView\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginBottom=\"8dp\"\n                        android:text=\"@string/title_device_info\"\n                        android:textColor=\"?android:textColorPrimary\"\n                        android:textSize=\"16sp\"\n                        android:textStyle=\"bold\" />\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:orientation=\"horizontal\">\n\n                        <ImageView\n                            android:layout_width=\"24dp\"\n                            android:layout_height=\"24dp\"\n                            android:src=\"@drawable/ic_round_phone_android\"\n                            app:tint=\"?android:textColorSecondary\" />\n\n                        <TextView\n                            android:id=\"@+id/phone_info\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_gravity=\"center_vertical\"\n                            android:layout_marginStart=\"8dp\"\n                            android:layout_weight=\"1\" />\n                    </LinearLayout>\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"8dp\"\n                        android:orientation=\"horizontal\">\n\n                        <ImageView\n                            android:layout_width=\"24dp\"\n                            android:layout_height=\"24dp\"\n                            android:src=\"@drawable/ic_round_developer_board\"\n                            app:tint=\"?android:textColorSecondary\" />\n\n                        <TextView\n                            android:id=\"@+id/soc_info\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_gravity=\"center_vertical\"\n                            android:layout_marginStart=\"8dp\"\n                            android:layout_weight=\"1\" />\n                    </LinearLayout>\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"8dp\"\n                        android:orientation=\"horizontal\">\n\n                        <ImageView\n                            android:layout_width=\"24dp\"\n                            android:layout_height=\"24dp\"\n                            android:src=\"@drawable/ic_round_storage\"\n                            app:tint=\"?android:textColorSecondary\" />\n\n                        <TextView\n                            android:id=\"@+id/ram_info\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_gravity=\"center_vertical\"\n                            android:layout_marginStart=\"8dp\"\n                            android:layout_weight=\"1\" />\n                    </LinearLayout>\n                </LinearLayout>\n            </com.google.android.material.card.MaterialCardView>\n\n            <com.google.android.material.card.MaterialCardView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"16dp\"\n                app:cardCornerRadius=\"8dp\"\n                app:cardElevation=\"0dp\"\n                app:contentPadding=\"16dp\"\n                app:strokeColor=\"?colorControlHighlight\"\n                app:strokeWidth=\"1dp\">\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"vertical\">\n\n                    <TextView\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginBottom=\"8dp\"\n                        android:text=\"@string/title_miui_level_info\"\n                        android:textColor=\"?android:textColorPrimary\"\n                        android:textSize=\"16sp\"\n                        android:textStyle=\"bold\" />\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:gravity=\"center_vertical\"\n                        android:orientation=\"horizontal\">\n\n                        <ImageView\n                            android:layout_width=\"24dp\"\n                            android:layout_height=\"24dp\"\n                            android:src=\"@drawable/ic_round_offline_bolt\"\n                            app:tint=\"?android:textColorSecondary\" />\n\n                        <TextView\n                            android:id=\"@+id/miui_lite_info\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginStart=\"8dp\"\n                            android:layout_weight=\"1\" />\n\n                        <ImageView\n                            android:id=\"@+id/miui_lite_help_btn\"\n                            android:layout_width=\"24dp\"\n                            android:layout_height=\"24dp\"\n                            android:layout_marginStart=\"8dp\"\n                            android:background=\"?selectableItemBackgroundBorderless\"\n                            android:padding=\"3dp\"\n                            android:src=\"@drawable/ic_round_help\"\n                            app:tint=\"?android:textColorSecondary\" />\n                    </LinearLayout>\n\n                    <LinearLayout\n                        android:layout_width=\"match_parent\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginTop=\"8dp\"\n                        android:gravity=\"center_vertical\"\n                        android:orientation=\"horizontal\">\n\n                        <ImageView\n                            android:layout_width=\"24dp\"\n                            android:layout_height=\"24dp\"\n                            android:src=\"@drawable/ic_round_score\"\n                            app:tint=\"?android:textColorSecondary\" />\n\n                        <TextView\n                            android:id=\"@+id/device_level_info\"\n                            android:layout_width=\"0dp\"\n                            android:layout_height=\"wrap_content\"\n                            android:layout_marginStart=\"8dp\"\n                            android:layout_weight=\"1\" />\n                    </LinearLayout>\n                </LinearLayout>\n            </com.google.android.material.card.MaterialCardView>\n        </LinearLayout>\n    </androidx.core.widget.NestedScrollView>\n</androidx.coordinatorlayout.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/dialog_about.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:gravity=\"center_vertical\"\n    android:orientation=\"horizontal\"\n    android:padding=\"16dp\"\n    tools:ignore=\"UseCompoundDrawables\">\n\n    <ImageView\n        android:layout_width=\"56dp\"\n        android:layout_height=\"56dp\"\n        android:src=\"@mipmap/ic_launcher\" />\n\n    <LinearLayout\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"16dp\"\n        android:layout_weight=\"1\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/app_name\"\n            android:textColor=\"?android:textColorPrimary\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:id=\"@+id/dialog_about_text\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"4dp\"\n            android:textColor=\"?android:textColorSecondary\"\n            android:textStyle=\"bold\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_github\"\n            style=\"@style/Widget.MaterialComponents.Button.OutlinedButton\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:insetTop=\"6dp\"\n            android:insetBottom=\"0dp\"\n            android:minHeight=\"0dp\"\n            android:text=\"@string/btn_source\"\n            android:textColor=\"?colorSecondary\"\n            app:cornerRadius=\"100dp\"\n            app:icon=\"@drawable/ic_logo_github\"\n            app:iconSize=\"24sp\"\n            app:iconTint=\"?colorSecondary\"\n            app:rippleColor=\"?colorSecondary\"\n            app:strokeColor=\"?colorSecondary\" />\n    </LinearLayout>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/menu/menu_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:id=\"@+id/menu_about\"\n        android:title=\"@string/title_about\" />\n</menu>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@color/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@color/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/values/arrays.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string-array name=\"xposedscope\">\n        <item>com.miui.screenrecorder</item>\n        <item>com.xiaomi.vipaccount</item>\n        <item>com.miui.miwallpaper.miweatherwallpaper</item>\n        <item>com.miui.backup</item>\n        <item>com.miui.huanji</item>\n        <item>com.miui.hybrid</item>\n        <item>com.miui.securitycore</item>\n        <item>com.miui.compass</item>\n        <item>com.miui.aod</item>\n        <item>com.miui.voicetrigger</item>\n        <item>com.xiaomi.mirror</item>\n        <item>com.miui.audiomonitor</item>\n        <item>com.miui.calculator</item>\n        <item>com.miui.weather2</item>\n        <item>com.xiaomi.scanner</item>\n        <item>com.miui.home</item>\n    </string-array>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"blue_A200\">#448AFF</color>\n    <color name=\"blue_A700\">#2962FF</color>\n    <color name=\"green_400\">#66BB6A</color>\n    <color name=\"red_A400\">#FF1744</color>\n    <color name=\"yellow_A700\">#FFD600</color>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n\n    <color name=\"ic_launcher_background\">@color/blue_A200</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <dimen name=\"radius\">8dp</dimen>\n    <dimen name=\"card_elevation\">0dp</dimen>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">MIUILevelChecker</string>\n    <string name=\"xposed_description\">模块激活后，可以为您强行开启 MIUI 12.5 的完整动画</string>\n    <string name=\"title_device_info\">设备信息</string>\n    <string name=\"status_title_full\">完整支持</string>\n    <string name=\"status_title_basic\">部分支持</string>\n    <string name=\"status_title_none\">不支持</string>\n    <string name=\"status_title_unknown\">未知</string>\n    <string name=\"status_text_full\">您的设备支持 MIUI 12.5 完整动画</string>\n    <string name=\"status_text_basic\">您的设备只支持 MIUI 12.5 部分动画</string>\n    <string name=\"status_text_none\">您的设备不支持 MIUI 12.5 的动画</string>\n    <string name=\"status_text_unknown\">无法获取您的设备等级</string>\n    <string name=\"level_text_high_end\">高端</string>\n    <string name=\"level_text_middle\">中端</string>\n    <string name=\"level_text_primary\">低端</string>\n    <string name=\"level_text_unknown\">未知</string>\n    <string name=\"miui_lite_yes\">MIUI “精简版”</string>\n    <string name=\"miui_lite_no\">非 MIUI “精简版”</string>\n    <string name=\"title_miui_level_info\">MIUI 机型分级</string>\n    <string name=\"title_xposed_module_enabled\">Xposed 模块已启用</string>\n    <string name=\"title_xposed_module_actived_not_enabled\">Xposed 模块已激活，但未启用</string>\n    <string name=\"title_xposed_module_not_actived\">Xposed 模块未激活</string>\n    <string name=\"title_dialog_whats_this\">这是什么？</string>\n    <string name=\"text_xposed_module_enabled\"><![CDATA[已为您强行开启 MIUI 12.5 的完整动画。<br /><strong>注意：由于设备性能限制，部分动画可能会导致卡顿。</strong>]]></string>\n    <string name=\"text_xposed_module_not_enabled\"><![CDATA[模块启用后，可以为您强行开启 MIUI 12.5 的完整动画。<br />轻按此处可跳转至 Xposed 管理器以启用模块。<br /><strong>注意：由于设备性能限制，部分动画可能会导致卡顿。</strong>]]></string>\n    <string name=\"btn_ok\">OK</string>\n    <string name=\"text_dialog_miui_lite_help\">MIUI 可能会将部分机型标记为 \\\"Lite\\\" 版（此处译为“精简版”），被标记为精简版的设备无论性能如何都会被认为是“低端”设备，禁用绝大多数动画。</string>\n    <string name=\"text_ram_info\">%dGB 运行内存</string>\n    <string name=\"title_dialog_not_miui\">您似乎没有使用 MIUI 系统</string>\n    <string name=\"text_dialog_not_miui\">本软件的检测结果仅适用于正在使用 MIUI 系统的手机。</string>\n    <string name=\"title_about\">关于</string>\n    <string name=\"text_dialog_about\">版本： %1$s(%2$d)\\n帮助你查看自己的机型在 MIUI 12.5 上的分级。</string>\n    <string name=\"link_source\" translatable=\"false\">https://github.com/HuanCheng65/MIUILevelChecker</string>\n    <string name=\"btn_source\">Github</string>\n    <string name=\"btn_coolapk\">coolapk</string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<resources>\n    <!-- Base application theme. -->\n    <style name=\"Theme.FuckMIUI\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n        <item name=\"colorPrimary\">@color/white</item>\n        <item name=\"colorPrimaryVariant\">@color/white</item>\n        <item name=\"colorOnPrimary\">@color/black</item>\n        <item name=\"colorSecondary\">@color/blue_A200</item>\n        <item name=\"colorSecondaryVariant\">@color/blue_A700</item>\n        <item name=\"colorOnSecondary\">@color/white</item>\n        <item name=\"android:windowLightStatusBar\">true</item>\n        <item name=\"android:statusBarColor\">?attr/colorPrimaryVariant</item>\n        <item name=\"dialogCornerRadius\">8dp</item>\n        <item name=\"alertDialogTheme\">@style/Theme.AlertDialog</item>\n    </style>\n\n    <style name=\"Theme.AlertDialog\" parent=\"ThemeOverlay.MaterialComponents.Dialog.Alert\">\n        <item name=\"dialogCornerRadius\">8dp</item>\n        <item name=\"colorPrimary\">@color/blue_A700</item>\n    </style>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-en/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">MIUILevelChecker</string>\n    <string name=\"xposed_description\">After the module is activated, you can forcibly activate the full animation of MIUI 12.5</string>\n    <string name=\"title_device_info\">Device Info</string>\n    <string name=\"status_title_full\">Full support</string>\n    <string name=\"status_title_basic\">Partial support</string>\n    <string name=\"status_title_none\">Without support</string>\n    <string name=\"status_title_unknown\">Unknown</string>\n    <string name=\"status_text_full\">Your device supports MIUI 12.5 full animation</string>\n    <string name=\"status_text_basic\">Your device only supports MIUI 12.5 partial animations</string>\n    <string name=\"status_text_none\">Your device does not support MIUI 12.5 animation</string>\n    <string name=\"status_text_unknown\">Unable to get the level of your device</string>\n    <string name=\"level_text_high_end\">High range</string>\n    <string name=\"level_text_middle\">Mid-range</string>\n    <string name=\"level_text_primary\">Low range</string>\n    <string name=\"level_text_unknown\">Unknown</string>\n    <string name=\"miui_lite_yes\">MIUI Lite Edition</string>\n    <string name=\"miui_lite_no\">MIUI Normal Edition</string>\n    <string name=\"title_miui_level_info\">MIUI model classification</string>\n    <string name=\"title_xposed_module_enabled\">Xposed module is enabled</string>\n    <string name=\"title_xposed_module_actived_not_enabled\">Xposed module is actived but not enabled</string>\n    <string name=\"title_xposed_module_not_actived\">Xposed module is not activated</string>\n    <string name=\"title_dialog_whats_this\">What is this?</string>\n    <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>\n    <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>\n    <string name=\"btn_ok\">OK</string>\n    <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>\n    <string name=\"text_ram_info\">%dGB RAM</string>\n    <string name=\"title_dialog_not_miui\">It seems that you are not using MIUI</string>\n    <string name=\"text_dialog_not_miui\">The detection results of this software only apply to mobile phones using the MIUI system.</string>\n    <string name=\"title_about\">About</string>\n    <string name=\"text_dialog_about\">Version: %1$s(%2$d)\\nIt helps you to check the MIUI 12.5 rating of your model.</string>\n    <string name=\"link_source\" translatable=\"false\">https://github.com/HuanCheng65/MIUILevelChecker</string>\n    <string name=\"btn_source\">Github</string>\n    <string name=\"btn_coolapk\">coolapk</string>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-es/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">MIUILevelChecker</string>\n    <string name=\"xposed_description\">Una vez activado el módulo, puede activar a la fuerza la animación completa de MIUI 12.5</string>\n    <string name=\"title_device_info\">Información del dispositivo</string>\n    <string name=\"status_title_full\">Soporte total</string>\n    <string name=\"status_title_basic\">Soporte parcial</string>\n    <string name=\"status_title_none\">Sin soporte</string>\n    <string name=\"status_title_unknown\">Desconocido</string>\n    <string name=\"status_text_full\">Su dispositivo es compatible con la animación completa de MIUI 12.5</string>\n    <string name=\"status_text_basic\">Su dispositivo solo admite animaciones parciales de MIUI 12.5</string>\n    <string name=\"status_text_none\">Su dispositivo no es compatible con la animación de MIUI 12.5</string>\n    <string name=\"status_text_unknown\">No se puede obtener el nivel de su dispositivo</string>\n    <string name=\"level_text_high_end\">Gama Alta</string>\n    <string name=\"level_text_middle\">Gama Media</string>\n    <string name=\"level_text_primary\">Gama Baja</string>\n    <string name=\"level_text_unknown\">Desconocido</string>\n    <string name=\"miui_lite_yes\">MIUI Lite</string>\n    <string name=\"miui_lite_no\">MIUI normal</string>\n    <string name=\"title_miui_level_info\">Clasificación del modelo MIUI</string>\n    <string name=\"title_xposed_module_enabled\">El módulo Xposed está habilitado</string>\n    <string name=\"title_xposed_module_actived_not_enabled\">El módulo Xposed está activado, pero no funcionando</string>\n    <string name=\"title_xposed_module_not_actived\">El módulo Xposed no está activado</string>\n    <string name=\"title_dialog_whats_this\">¿Que es esto?</string>\n    <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>\n    <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>\n    <string name=\"btn_ok\">Vale</string>\n    <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>\n    <string name=\"text_ram_info\">%dGB Memoria RAM</string>\n    <string name=\"title_dialog_not_miui\">Parece que no estás usando MIUI</string>\n    <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>\n    <string name=\"title_about\">Acerca de</string>\n    <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>\n    <string name=\"link_source\" translatable=\"false\">https://github.com/HuanCheng65/MIUILevelChecker</string>\n    <string name=\"btn_source\">Github</string>\n    <string name=\"btn_coolapk\">coolapk</string>\n</resources>"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n    ext.kotlin_version = \"1.4.21\"\n    repositories {\n        google()\n        jcenter()\n    }\n    dependencies {\n        classpath \"com.android.tools.build:gradle:4.1.1\"\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Sat Feb 13 14:46:21 CST 2021\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.5-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app\"s APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Kotlin code style for this project: \"official\" or \"obsolete\":\nkotlin.code.style=official"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\nrootProject.name = \"FuckMIUI\""
  }
]