[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.xml]\ninsert_final_newline = false\n\n[*.yml]\nindent_size = 2\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto eol=lf\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/BUG-REPORT.yml",
    "content": "name: \"🐛 Bug\"\ndescription: 问题报告.\ntitle: \"🐛 [BUG] <问题标题>\"\nlabels: [\n  \"bug\"\n]\nbody:\n  - type: textarea\n    id: description\n    attributes:\n      label: \"问题描述\"\n      description: 请输入简洁且明确的问题描述。\n      placeholder: ...的...功能出现...异常\n    validations:\n      required: true\n  - type: textarea\n    id: log\n    attributes:\n      label: \"模块日志\"\n      description: LSPosed管理器 - 日志 或 软件崩溃日志\n      placeholder: ...\n    validations:\n      required: true\n  - type: textarea\n    id: repord\n    attributes:\n      label: \"复现步骤\"\n      description: 输入简明的问题复现步骤。\n      value: |\n        1. 前往 '...'\n        2. 点击 '....'\n        \n        ....\n        出现问题  \n      render: bash\n    validations:\n      required: false\n  - type: textarea\n    id: screenshot\n    attributes:\n      label: \"问题截图\"\n      description: 添加问题截图以便我们快速定位.\n      value: |\n        ![图片注释](图片链接)\n    validations:\n      required: false\n  - type: input\n    id: device\n    attributes:\n      label: \"机型\"\n      description: 填写你的机型，可填型号.\n      placeholder: Xiaomi\n    validations:\n      required: true\n  - type: dropdown\n    id: miui_version\n    attributes:\n      label: \"MIUI 版本\"\n      description: 您当前正在使用的 MIUI 版本\n      multiple: true\n      options:\n        - MIUI12 / MIUI12.5\n        - MIUI13\n        - MIUI14\n        - MIUI15\n        - 其它\n    validations:\n      required: true\n  - type: dropdown\n    id: android_version\n    attributes:\n      label: \"Android 版本\"\n      description: 您当前正在使用的 Android 版本\n      multiple: true\n      options:\n        - Android 11\n        - Android 12\n        - Android 13\n        - Android 14\n    validations:\n      required: true\n  - type: input\n    id: cemiuiler_version\n    attributes:\n      label: \"Cemiuiler 版本\"\n      description: 填写您的 Cemiuiler 版本.\n      placeholder: x.y.z-YYYYMMDD\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml",
    "content": "name: \"💡 需求\"\ndescription: 新功能需求\ntitle: \"💡 [需求] <标题>\"\nlabels: [\n  \"enhancement\"\n]\nbody:\n  - type: textarea\n    id: requirement\n    attributes:\n      label: \"需求内容\"\n      description: \"简单说明你的需求\"\n      placeholder: 请添加...\n    validations:\n      required: true\n  - type: textarea\n    id: refs\n    attributes:\n      label: \"实现思路&截图\"\n      description: 如果可能，请提供实现思路或者相关图片\n      placeholder: \"![图片描述](图片链接)\"\n    validations:\n      required: false\n  - type: textarea\n    id: basic_example\n    attributes:\n      label: \"简单例子\"\n      description: 说明该功能的基本示例\n      placeholder: 为...添加...以便...\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/MIGRATION-REQUEST.yml",
    "content": "name: \"🔌 移植\"\ndescription: 新功能需求\ntitle: \"🔌 [移植] <标题>\"\nlabels: [\n  \"enhancement\"\n]\nbody:\n  - type: input\n    id: repo\n    attributes:\n      label: \"仓库地址\"\n      description: \"提供仓库地址以便我们更快地工作\"\n      placeholder: \"https://github.com/\"\n    validations:\n      required: false\n  - type: textarea\n    id: requirement\n    attributes:\n      label: \"移植内容\"\n      description: \"简单说明需要移植的内容\"\n      placeholder: 移植...软件的...功能\n    validations:\n      required: true\n  - type: textarea\n    id: feature_desc\n    attributes:\n      label: \"相关描述&截图\"\n      description: 如果可能，请提供相关功能描述及图片\n      placeholder: \"![图片描述](图片链接)\"\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where the package manifests are located.\n# Please see the documentation for all configuration options:\n# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n\nversion: 2\nupdates:\n  - package-ecosystem: \"gradle\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n"
  },
  {
    "path": ".github/workflows/android.yml",
    "content": "name: Android CI\n\non:\n  push:\n    branches: [ \"main\" ]\n  pull_request:\n    branches: [ \"main\" ]\n    paths-ignore:\n      - \".github/**\"\n      - \"!.github/workflows/**\"\n      - \".idea/\"\n      - \"doc/*\"\n      - \"*.md\"\n      - \".github/workflows/crowdin.yml\"\n      - \"crowdin.yml\"\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    name: Build App\n    steps:\n      - name: Checkout Git Repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n          submodules: true\n\n      - name: Set up JDK 20\n        uses: actions/setup-java@v3\n        with:\n          java-version: '20'\n          distribution: 'temurin'\n          cache: gradle\n\n      - name: Create Sign File\n        if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'\n        run: |\n          touch signing.properties\n          echo storePassword=${{ secrets.KEY_STORE_PASSWORD }} >> signing.properties\n          echo keyAlias=${{ secrets.ALIAS }} >> signing.properties\n          echo keyPassword='${{ secrets.KEY_STORE_PASSWORD }}' >> signing.properties\n          echo storeFile=key.jks >> signing.properties\n          echo ${{ secrets.SIGNING_KEY }} | base64 --decode > key.jks\n\n      - name: Build with Gradle\n        shell: bash\n        run: ./gradlew assembleCanary\n\n      - name: Find APKs\n        run: |\n          echo \"APK_FILE_CANARY=$(find app/build/outputs/apk/canary -name '*.apk')\" >> $GITHUB_ENV\n\n      - name: Show APKs SHA256\n        if: success()\n        run: |\n          echo \"### Build Success\" >> $GITHUB_STEP_SUMMARY\n          echo \"|Artifact|SHA256|\" >> $GITHUB_STEP_SUMMARY\n          echo \"|:--------:|:----------|\" >> $GITHUB_STEP_SUMMARY\n          canary=($(sha256sum '${{ env.APK_FILE_CANARY }}'))\n          echo \"|Canary|$canary\" >> $GITHUB_STEP_SUMMARY\n\n      - name: Upload Canary APK\n        if: contains(github.event.head_commit.message, '[upload]') == true\n        uses: actions/upload-artifact@v3\n        with:\n          name: Cemiuiler Canary\n          path: ${{ env.APK_FILE_CANARY }}\n\n      - name: Post to Beta Channel & Canary Group\n        if: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' && github.ref_type != 'tag' && contains(github.event.head_commit.message, '[skip post]') == false && contains(github.event.head_commit.message, 's#') == false }}\n        shell: bash\n        env:\n          GROUP_ID: ${{ secrets.CANARY_GROUP_ID }}\n          GROUP_ID_TEMPORARY: ${{ secrets.GROUP_TEMPORARY_ID }}\n          CHANNEL_ID: ${{ secrets.CHANNEL_ID }}\n          MESSAGE_THREAD_ID: ${{ secrets.MESSAGE_THREAD_ID }}\n          BOT_TOKEN: ${{ secrets.BOT_TOKEN }}\n          CANARY: ${{ env.APK_FILE_CANARY }}\n        run: |\n          mkdir -p ${{ github.workspace }}/git_clone\n          git clone ${{ github.event.repository.url }} ${{ github.workspace }}/git_clone -b ${{ github.ref_name }}\n          cd ${{ github.workspace }}/git_clone\n          { echo -e 'Github CI\\n'; git log ${{ github.event.before }}..${{ github.event.after }} --pretty=format:\"%h %s\"; } > ${{ github.workspace }}/git_log\n          ESCAPED=\"$(cat ${{ github.workspace }}/git_log | gawk '{gsub(/[_*[\\]()~`>#+=\\|{}.!-]/,\"\\\\\\\\\\\\\\\\&\")}1' | sed -e 's|\"|\\\\\"|g' -e 's|^[0-9a-z]\\+|__&__|' | hexdump -v -e '/1 \"%02X\"' | sed 's/\\(..\\)/%\\1/g')\"\n          cd ${{ github.workspace }}\n          curl -v \"https://api.telegram.org/bot${BOT_TOKEN}/sendMediaGroup?chat_id=${GROUP_ID}&message_thread_id=${MESSAGE_THREAD_ID}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fcanary%22%2C%22parse_mode%22%3A%22MarkdownV2%22%2C%22caption%22%3A%22${ESCAPED}%22%7D%5D\" -F canary=\"@${CANARY}\"\n          curl -v \"https://api.telegram.org/bot${BOT_TOKEN}/sendMediaGroup?chat_id=${CHANNEL_ID}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fcanary%22%2C%22parse_mode%22%3A%22MarkdownV2%22%2C%22caption%22%3A%22${ESCAPED}%22%7D%5D\" -F canary=\"@${CANARY}\"\n"
  },
  {
    "path": ".github/workflows/androidu.yml",
    "content": "name: Android U Action\n\non:\n  push:\n    branches: [ \"Android-U\" ]\n  pull_request:\n    branches: [ \"Android-U\" ]\n    paths-ignore:\n      - \".github/**\"\n      - \"!.github/workflows/**\"\n      - \".idea/\"\n      - \"doc/*\"\n      - \"*.md\"\n      - \".github/workflows/crowdin.yml\"\n      - \"crowdin.yml\"\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    name: Build App\n    steps:\n      - name: Checkout Git Repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n          submodules: true\n\n      - name: Set up JDK 20\n        uses: actions/setup-java@v3\n        with:\n          java-version: '20'\n          distribution: 'temurin'\n          cache: gradle\n\n      - name: Create Sign File\n        run: |\n          touch signing.properties\n          echo storePassword=${{ secrets.KEY_STORE_PASSWORD }} >> signing.properties\n          echo keyAlias=${{ secrets.ALIAS }} >> signing.properties\n          echo keyPassword='${{ secrets.KEY_STORE_PASSWORD }}' >> signing.properties\n          echo storeFile=key.jks >> signing.properties\n          echo ${{ secrets.SIGNING_KEY }} | base64 --decode > key.jks\n\n      - name: Build with Gradle\n        if: contains(github.event.head_commit.message, '[skip]') == false\n        shell: bash\n        run: ./gradlew assembleCanary\n\n      - name: Find APKs\n        if: contains(github.event.head_commit.message, '[skip]') == false\n        run: |\n          echo \"APK_FILE_CANARY=$(find app/build/outputs/apk/canary -name '*.apk')\" >> $GITHUB_ENV\n\n      - name: Show APKs SHA256\n        if: success() && contains(github.event.head_commit.message, '[skip]') == false\n        run: |\n          echo \"### Build Success\" >> $GITHUB_STEP_SUMMARY\n          echo \"|Artifact|SHA256|\" >> $GITHUB_STEP_SUMMARY\n          echo \"|:--------:|:----------|\" >> $GITHUB_STEP_SUMMARY\n          canary=($(sha256sum '${{ env.APK_FILE_CANARY }}'))\n          echo \"|Canary|$canary\" >> $GITHUB_STEP_SUMMARY\n\n      - name: Upload Canary APK\n        if: contains(github.event.head_commit.message, '[upload]') == true\n        uses: actions/upload-artifact@v3\n        with:\n          name: Cemiuiler Canary\n          path: ${{ env.APK_FILE_CANARY }}\n\n      - name: Post to Android 14 Debug Group\n        if: contains(github.event.head_commit.message, '[skip]') == false\n        shell: bash\n        env:\n          GROUP_ID: ${{ secrets.DEBUG_GROUP_ID }}\n          GROUP_ID_TEMPORARY: ${{ secrets.GROUP_TEMPORARY_ID }}\n          BOT_TOKEN: ${{ secrets.BOT_TOKEN }}\n          CANARY: ${{ env.APK_FILE_CANARY }}\n        run: |\n          mkdir -p ${{ github.workspace }}/git_clone\n          git clone ${{ github.event.repository.url }} ${{ github.workspace }}/git_clone -b ${{ github.ref_name }}\n          cd ${{ github.workspace }}/git_clone\n          { echo -e 'Github CI\\n'; git log ${{ github.event.before }}..${{ github.event.after }} --pretty=format:\"%h %s\"; } > ${{ github.workspace }}/git_log\n          ESCAPED=\"$(cat ${{ github.workspace }}/git_log | gawk '{gsub(/[_*[\\]()~`>#+=\\|{}.!-]/,\"\\\\\\\\\\\\\\\\&\")}1' | sed -e 's|\"|\\\\\"|g' -e 's|^[0-9a-z]\\+|__&__|' | hexdump -v -e '/1 \"%02X\"' | sed 's/\\(..\\)/%\\1/g')\"\n          cd ${{ github.workspace }}\n          curl -v \"https://api.telegram.org/bot${BOT_TOKEN}/sendMediaGroup?chat_id=${GROUP_ID}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2Fcanary%22%2C%22parse_mode%22%3A%22MarkdownV2%22%2C%22caption%22%3A%22${ESCAPED}%22%7D%5D\" -F canary=\"@${CANARY}\"\n"
  },
  {
    "path": ".github/workflows/crowdin.yml",
    "content": "name: Crowdin Action\n\non:\n   workflow_dispatch:\n   push:\n     branches: [ main ]\n     paths:\n       - app/src/main/res/values/strings.xml\n   schedule:\n     - cron: '0 0 * * *'\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n   synchronize-with-crowdin:\n     runs-on: ubuntu-latest\n     steps:\n     - name: Checkout\n       uses: actions/checkout@v4\n\n     - name: Crowdin Action\n       uses: crowdin/github-action@master\n       with:\n         # Upload and download translation settings\n         upload_sources: true\n         upload_translations: true\n         download_translations: true\n\n         # Pull request settings\n         create_pull_request: true\n         localization_branch_name: crowdin_branch\n         pull_request_labels: 'enhancement, documentation'\n\n         # Global settings\n         config: 'crowdin.yml'\n         crowdin_branch_name: main\n       env:\n         GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}\n         CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}\n         CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n.idea\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n.cxx\nlocal.properties\n/app/release\n/app/beta\n/app/canary\n/app/debug\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n\n<img width=\"\" src=\"/imgs/icon.png\" width=160 height=160 align=\"center\">\n\n# Cemiuiler\n### Make MIUI Great Again!\n\n简体中文&nbsp;&nbsp;|&nbsp;&nbsp;[English](/README_en-US.md) |&nbsp;&nbsp;[Português (Brasil)](/README_pt-BR.md)\n\n</div>\n\n## 支持的版本\nAndroid 11 ~ 13 的 MIUI 12.5 ~ 14\n\n> 不支持 修改较多的第三方 MIUI Rom、修改较多的系统软件，以及部分国外 MIUI Rom，\n>\n> 目前 Cemiuiler 是基于 Android 13 的 MIUI 14 的手机端设备进行适配，覆盖不是很完整，需要不断测试和改进，\n>\n> 本项目已迁移，请前往[新项目](https://github.com/saraSakuHj/HyperCeiler)\n\n\n## 作用域包含的应用\n\n<details>\n    <summary>点击展开折叠的内容</summary>\n\n| 应用名 | 包名 |\n| :---- | :---- |\n| 系统框架 | system |\n| 系统界面 | com.android.systemui |\n| 系统桌面 | com.miui.home |\n| 系统更新 | com.android.updater |\n| Joyose | com.xiaomi.joyose |\n| 小米设置 | com.xiaomi.misettings |\n| 手机管家 | com.miui.securitycenter |\n| 笔记 | com.miui.notes |\n| 壁纸 | com.miui.miwallpaper |\n| 传送门 | com.miui.contentextension |\n| 弹幕通知 | com.xiaomi.barrage |\n| 百度输入法小米版 | com.baidu.input_mi |\n| 电话 | com.android.incallui |\n| 电话服务 | com.android.phone |\n| 电量与性能 | com.miui.powerkeeper |\n| 短信 | com.android.mms |\n| 截屏 | com.miui.screenshot |\n| 垃圾清理 | com.miui.cleanmaster |\n| 浏览器 | com.android.browser |\n| 鲁班（MTB） | com.xiaomi.mtb |\n| 屏幕录制 | com.miui.screenrecorder |\n| 权限管理服务 | com.lbe.security.miui |\n| 设置 | com.android.settings\n| 搜狗输入法小米版 | com.sohu.inputmethod.sogou.xiaomi |\n| 天气 | com.miui.weather2 |\n| 投屏 | com.milink.service |\n| 外部存储设备 | com.android.externalstorage |\n| 万象息屏 | com.miui.aod |\n| 文件管理 | com.android.fileexplorer |\n| 系统服务组件 | com.miui.securityadd |\n| 下载管理 | com.android.providers.downloads.ui |\n| 下载管理程序 | com.android.providers.downloads |\n| 相册 | com.miui.gallery |\n| 小米创作 | com.miui.creation |\n| 小米互传 | com.miui.mishare.connectivity |\n| 小米相册 - 编辑 | com.miui.mediaeditor |\n| 小米云服务 | com.miui.cloudservice |\n| 小米智能卡 | com.miui.tsmclient |\n| 讯飞输入法小米版 | com.iflytek.inputmethod.miui |\n| 应用包管理组件 | com.miui.packageinstaller |\n| 应用商店 | com.xiaomi.market |\n| 智能助理 | com.miui.personalassistant |\n| 主题壁纸 | com.android.thememanager |\n| com.miui.rom | com.miui.rom |\n| MIUI 安全组件 | com.miui.guardprovider |\n| 时钟 | com.android.deskclock |\n| 相机 | com.android.camera |\n| 小爱翻译 | com.xiaomi.aiasst.vision |\n| 小爱建议 | com.xiaomi.aireco |\n| 小爱视觉 | com.xiaomi.scanner |\n| 小爱同学 | com.miui.voiceassist |\n| 音乐 | com.miui.player |\n| MIUI+ Beta 版 | com.xiaomi.mirror |\n| com.xiaomi.NetworkBoost | com.xiaomi.NetworkBoost |\n| NFC 服务 | com.android.nfc |\n\n</details>\n\n> 与 LSPosed 中推荐的作用域相同\n\n## 交流 & 反馈群组\n\n加入我们所创建的群组以反馈问题或是了解最新情况。\n\n[![badge_qgroup]][qgroup_url]\n[![badge_qguild]][qguild_url]\n[![badge_telegram]][telegram_url]\n\n## 为 Cemiuiler 贡献翻译\n\n[![Crowdin](https://badges.crowdin.net/cemiuiler/localized.svg)](https://crowdin.com/project/cemiuiler)\n\n您可以在[这里](https://crwd.in/cemiuiler)为 Cemiuiler 项目贡献翻译。\n\n## 感谢\n\n> Cemiuiler 使用了以下开源项目的部分或全部内容，感谢这些项目的开发者提供的大力支持（排名顺序不分先后）。\n\n- [「Accompanist」 by Android Open Source Project, Google Inc.](https://google.github.io/accompanist)\n- [「Android」 by Android Open Source Project, Google Inc.](https://source.android.google.cn/license)\n- [「AndroidHiddenApiBypass」 by LSPosed](https://github.com/LSPosed/AndroidHiddenApiBypass)\n- [「AndroidX」 by Android Open Source Project, Google Inc.](https://github.com/androidx/androidx)\n- [「AntiAntiDefraud」 by MinaMichita](https://github.com/MinaMichita/AntiAntiDefraud)\n- [「Auto NFC」 by GSWXXN](https://github.com/GSWXXN/AutoNFC)\n- [「BypassSignCheck」 by Weverses](https://github.com/Weverses/BypassSignCheck)\n- [「CorePatch」 by LSPosed](https://github.com/LSPosed/CorePatch)\n- [「CustoMIUIzer」 by MonwF](https://github.com/MonwF/customiuizer)\n- [「CustoMIUIzerMod」 by liyafe1997](https://github.com/liyafe1997/CustoMIUIzerMod)\n- [「DexKit」 by LuckyPray](https://github.com/LuckyPray/DexKit)\n- [「Disable app link verify」 by tehcneko](https://github.com/Xposed-Modules-Repo/io.github.tehcneko.applinkverify)\n- [「DisableFlagSecure」 by LSPosed](https://github.com/LSPosed/DisableFlagSecure)\n- [「DisableLogRequest」 by QueallyTech](https://github.com/QueallyTech/DisableLogRequest)\n- [「EzXHelper」 by KyuubiRan](https://github.com/KyuubiRan/EzXHelper)\n- [「FixMiuiMediaControlPanel」 by qqlittleice](https://github.com/qqlittleice/FixMiuiMediaControlPanel)\n- [「FuckNFC」 by xiaowine](https://github.com/xiaowine/FuckNFC)\n- [「Gson」 by Android Open Source Project, Google Inc.](https://github.com/google/gson)\n- [「HideMiuiClipboardDialog」 by zerorooot](https://github.com/zerorooot/HideMiuiClipboardDialog)\n- [「Kotlin」 by JetBrains](https://github.com/JetBrains/kotlin)\n- [「MaxFreeForm」 by YifePlayte](https://github.com/YifePlayte/MaxFreeForm)\n- [「Miui Feature」 by MoralNorm](https://github.com/moralnorm/miui_feature)\n- [「MiuiHomeR」 by qqlittleice](https://github.com/qqlittleice/MiuiHome_R)\n- [「MIUI IME Unlock」 by RC1844](https://github.com/RC1844/MIUI_IME_Unlock)\n- [「MIUI QOL」 by chsbuffer](https://github.com/chsbuffer/MIUIQOL)\n- [「Miui XXL」 by Wine-Network](https://github.com/Wine-Network/Miui_XXL)\n- [「Miui XXL」 by YuKongA](https://github.com/YuKongA/Miui_XXL)\n- [「MIUI 通知修复」 by tehcneko](https://github.com/Xposed-Modules-Repo/io.github.tehcneko.miuinotificationfix)\n- [「ModemPro」 by Weverse](https://github.com/Weverses/ModemPro)\n- [「NoStorageRestrict」 by DanGLES3](https://github.com/Xposed-Modules-Repo/com.github.dan.nostoragerestrict)\n- [「Portal Hook」 by Haocen2004](https://github.com/Haocen2004/PortalHook)\n- [「RemoveMiuiSystemSelfProtection」 by gfbjngjibn](https://github.com/gfbjngjibn/RemoveMiuiSystemSelfProtection)\n- [「SettingsDontThroughTheList」 by weixiansen574](https://github.com/weixiansen574/settingsdontthroughthelist)\n- [「StarVoyager」 by hosizoraru](https://github.com/hosizoraru/StarVoyager)\n- [「WINI」 by ouhoukyo](https://github.com/ouhoukyo/WINI)\n- [「WOMMO」 by YifePlayte](https://github.com/YifePlayte/WOMMO)\n- [「Woobox For MIUI」 by hosizoraru](https://github.com/hosizoraru/WooBoxForMIUI)\n- [「Woobox For MIUI」 by Simplicity-Team](https://github.com/Simplicity-Team/WooBoxForMIUI)\n- [「Xposed」 by rovo89, Tungstwenty](https://github.com/rovo89/XposedBridge)\n- [「XposedBridge」 by rovo89](https://github.com/rovo89/XposedBridge)\n- [「.xlDownload」 by Kr328](https://github.com/Kr328/.xlDownload)\n\n[qgroup_url]: https://jq.qq.com/?_wv=1027&k=TedCJq8V\n[badge_qgroup]: https://img.shields.io/badge/QQ-群组-4DB8FF?style=for-the-badge&logo=tencentqq\n[qguild_url]: https://pd.qq.com/s/35ooe0ssj\n[badge_qguild]: https://img.shields.io/badge/QQ-频道-4991D3?style=for-the-badge&logo=tencentqq\n[telegram_url]: https://t.me/cemiuiler\n[badge_telegram]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=2CA5E0&label=Telegram&logo=telegram&query=%24.data.totalSubs&url=https%3A%2F%2Fapi.spencerwoo.com%2Fsubstats%2F%3Fsource%3Dtelegram%26queryKey%3Dcemiuiler\n\n"
  },
  {
    "path": "README_en-US.md",
    "content": "<div align=\"center\">\n\n<img width=\"\" src=\"/imgs/icon.png\" width=160 height=160 align=\"center\">\n\n# Cemiuiler\n### Make MIUI Great Again!\n\nEnglish&nbsp;&nbsp;|&nbsp;&nbsp;[简体中文](/README.md) |&nbsp;&nbsp;[Português (Brasil)](/README_pt-BR.md)\n\n</div>\n\n## Supported versions\nMIUI 12.5 ~ 14 for Android 11 ~ 13\n\n> Does not support third-party MIUI ROMs with many modifications, system software with many modifications, and some foreign MIUI ROMs\n>\n> At present, Cemiuiler is based on Android 13 MIUI 14 mobile phone devices for adaptation, the coverage is not very complete, it needs continuous testing and improvement\n>\n> We have tried our best to support Android 11 devices. After the release of version 1.3.130, the mainline branch will no longer support Android 11, but it will still provide maintenance and porting of old version functions.\n\n## Supported Applications\n\n<details>\n    <summary>Click to expand collapsed content</summary>\n\n| App Name | Package Name |\n| :---- | :---- |\n| System Framework | system |\n| System UI | com.android.systemui |\n| System Launcher | com.miui.home |\n| Updater | com.android.updater |\n| Joyose | com.xiaomi.joyose |\n| Settings | com.xiaomi.misettings |\n| Security | com.miui.securitycenter |\n| Notes | com.miui.notes |\n| Mi Wallpaper | com.miui.miwallpaper |\n| Taplus | com.miui.contentextension |\n| Bullet screen notification | com.xiaomi.barrage |\n| Baidu IME for MIUI | com.baidu.input_mi |\n| Phone | com.android.incallui |\n| Phone Services | com.android.phone |\n| Battery and performance | com.miui.powerkeeper |\n| Messaging | com.android.mms |\n| Screenshot | com.miui.screenshot |\n| Cleaner | com.miui.cleanmaster |\n| Browser | com.android.browser |\n| Rueban (MTB) | com.xiaomi.mtb |\n| Screen Recorder | com.miui.screenrecorder |\n| Permissions | com.lbe.security.miui |\n| Settings | com.android.settings\n| Sogou Keyboard for MIUI | com.sohu.inputmethod.sogou.xiaomi |\n| Weather | com.miui.weather2 |\n| Cast | com.milink.service |\n| External Storage | com.android.externalstorage |\n| Always-on display | com.miui.aod |\n| File Manager | com.android.fileexplorer |\n| System Service Plugin | com.miui.securityadd |\n| Downloads | com.android.providers.downloads.ui |\n| Downloads | com.android.providers.downloads |\n| Gallery | com.miui.gallery |\n| Mi Canvas | com.miui.creation |\n| Mi Share | com.miui.mishare.connectivity |\n| Gallery Editor | com.miui.mediaeditor |\n| Xiaomi Cloud | com.miui.cloudservice |\n| Smart Cards | com.miui.tsmclient |\n| iFlytek IME for MIUI | com.iflytek.inputmethod.miui |\n| Package Installer | com.miui.packageinstaller |\n| GetApps | com.xiaomi.market |\n| App Vault | com.miui.personalassistant |\n| Themes | com.android.thememanager |\n| com.miui.rom | com.miui.rom |\n| MIUI Security Components | com.miui.guardprovider |\n| Clock | com.android.deskclock |\n| Camera | com.android.camera |\n| Mi AI Translate | com.xiaomi.aiasst.vision |\n| Mi AI Suggestions | com.xiaomi.aireco |\n| Scanner | com.xiaomi.scanner |\n| Mi AI | com.miui.voiceassist |\n| Music | com.miui.player |\n| MIUI+ Beta | com.xiaomi.mirror |\n| com.xiaomi.NetworkBoost | com.xiaomi.NetworkBoost |\n\n</details>\n\n> Same scope as recommended in LSPosed\n\n## Chat & Feedback Group\n\nJoin our group to report issues or get the latest updates.\n\n[![badge_qgroup]][qgroup_url]\n[![badge_qguild]][qguild_url]\n[![badge_telegram]][telegram_url]\n\n## Provide translations for the Cemiuiler project\n\n[![Crowdin](https://badges.crowdin.net/cemiuiler/localized.svg)](https://crowdin.com/project/cemiuiler)\n\nYou can provide translations for the Cemiuiler project [here](https://crwd.in/cemiuiler).\n\n## Thank!\n\n> Cemiuiler I have used some or all of the content of the following open source projects. Thank you for the strong support provided by the developers of these projects (in no particular order).\n\n- [「Accompanist」 by Android Open Source Project, Google Inc.](https://google.github.io/accompanist)\n- [「Android」 by Android Open Source Project, Google Inc.](https://source.android.google.cn/license)\n- [「AndroidHiddenApiBypass」 by LSPosed](https://github.com/LSPosed/AndroidHiddenApiBypass)\n- [「AndroidX」 by Android Open Source Project, Google Inc.](https://github.com/androidx/androidx)\n- [「AntiAntiDefraud」 by MinaMichita](https://github.com/MinaMichita/AntiAntiDefraud)\n- [「Auto NFC」 by GSWXXN](https://github.com/GSWXXN/AutoNFC)\n- [「BypassSignCheck」 by Weverses](https://github.com/Weverses/BypassSignCheck)\n- [「CorePatch」 by LSPosed](https://github.com/LSPosed/CorePatch)\n- [「CustoMIUIzer」 by MonwF](https://github.com/MonwF/customiuizer)\n- [「CustoMIUIzerMod」 by liyafe1997](https://github.com/liyafe1997/CustoMIUIzerMod)\n- [「DexKit」 by LuckyPray](https://github.com/LuckyPray/DexKit)\n- [「Disable app link verify」 by tehcneko](https://github.com/Xposed-Modules-Repo/io.github.tehcneko.applinkverify)\n- [「DisableFlagSecure」 by LSPosed](https://github.com/LSPosed/DisableFlagSecure)\n- [「DisableLogRequest」 by QueallyTech](https://github.com/QueallyTech/DisableLogRequest)\n- [「EzXHelper」 by KyuubiRan](https://github.com/KyuubiRan/EzXHelper)\n- [「FixMiuiMediaControlPanel」 by qqlittleice](https://github.com/qqlittleice/FixMiuiMediaControlPanel)\n- [「FuckNFC」 by xiaowine](https://github.com/xiaowine/FuckNFC)\n- [「Gson」 by Android Open Source Project, Google Inc.](https://github.com/google/gson)\n- [「HideMiuiClipboardDialog」 by zerorooot](https://github.com/zerorooot/HideMiuiClipboardDialog)\n- [「Kotlin」 by JetBrains](https://github.com/JetBrains/kotlin)\n- [「MaxFreeForm」 by YifePlayte](https://github.com/YifePlayte/MaxFreeForm)\n- [「Miui Feature」 by MoralNorm](https://github.com/moralnorm/miui_feature)\n- [「MiuiHomeR」 by qqlittleice](https://github.com/qqlittleice/MiuiHome_R)\n- [「MIUI IME Unlock」 by RC1844](https://github.com/RC1844/MIUI_IME_Unlock)\n- [「MIUI QOL」 by chsbuffer](https://github.com/chsbuffer/MIUIQOL)\n- [「Miui XXL」 by Wine-Network](https://github.com/Wine-Network/Miui_XXL)\n- [「Miui XXL」 by YuKongA](https://github.com/YuKongA/Miui_XXL)\n- [「MIUI 通知修复」 by tehcneko](https://github.com/Xposed-Modules-Repo/io.github.tehcneko.miuinotificationfix)\n- [「ModemPro」 by Weverse](https://github.com/Weverses/ModemPro)\n- [「NoStorageRestrict」 by DanGLES3](https://github.com/Xposed-Modules-Repo/com.github.dan.nostoragerestrict)\n- [「Portal Hook」 by Haocen2004](https://github.com/Haocen2004/PortalHook)\n- [「RemoveMiuiSystemSelfProtection」 by gfbjngjibn](https://github.com/gfbjngjibn/RemoveMiuiSystemSelfProtection)\n- [「SettingsDontThroughTheList」 by weixiansen574](https://github.com/weixiansen574/settingsdontthroughthelist)\n- [「StarVoyager」 by hosizoraru](https://github.com/hosizoraru/StarVoyager)\n- [「WINI」 by ouhoukyo](https://github.com/ouhoukyo/WINI)\n- [「WOMMO」 by YifePlayte](https://github.com/YifePlayte/WOMMO)\n- [「Woobox For MIUI」 by hosizoraru](https://github.com/hosizoraru/WooBoxForMIUI)\n- [「Woobox For MIUI」 by Simplicity-Team](https://github.com/Simplicity-Team/WooBoxForMIUI)\n- [「Xposed」 by rovo89, Tungstwenty](https://github.com/rovo89/XposedBridge)\n- [「XposedBridge」 by rovo89](https://github.com/rovo89/XposedBridge)\n- [「.xlDownload」 by Kr328](https://github.com/Kr328/.xlDownload)\n\n\n[qgroup_url]: https://jq.qq.com/?_wv=1027&k=TedCJq8V\n[badge_qgroup]: https://img.shields.io/badge/QQ-group-4DB8FF?style=for-the-badge&logo=tencentqq\n[qguild_url]: https://pd.qq.com/s/35ooe0ssj\n[badge_qguild]: https://img.shields.io/badge/QQ-Channel-4991D3?style=for-the-badge&logo=tencentqq\n[telegram_url]: https://t.me/cemiuiler\n[badge_telegram]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=2CA5E0&label=Telegram&logo=telegram&query=%24.data.totalSubs&url=https%3A%2F%2Fapi.spencerwoo.com%2Fsubstats%2F%3Fsource%3Dtelegram%26queryKey%3Dcemiuiler\n"
  },
  {
    "path": "README_pt-BR.md",
    "content": "<div align=\"center\">\n\n<img width=\"\" src=\"/imgs/icon.png\" width=160 height=160 align=\"center\">\n\n# Cemiuiler\n### Torne a MIUI ótima novamente!\n\n[English](/README_en-US.md)&nbsp;&nbsp;|&nbsp;&nbsp;[简体中文](/README.md) |&nbsp;&nbsp;Português (Brasil)\n\n</div>\n\n## Versões suportadas\nMIUI 12.5 ~ 14 para Android 11 ~ 13\n\n> Não suporta ROM MIUI de terceiros com muitas modificações, software de sistema com muitas modificações e algumas ROM MIUI estrangeiras.\n>\n> Atualmente, o Cemiuiler é baseado em dispositivos Android 13 MIUI 14 para adaptação, a cobertura não é muito completa, precisa de testes e melhorias contínuas.\n>\n> Tentamos o nosso melhor para oferecer suporte a dispositivos Android 11. Após o lançamento da versão 1.3.130, o branch principal não suportará mais o Android 11, mas ainda fornecerá manutenção e portabilidade de funções de versões antigas.\n>\n## Apps suportados\n\n<details>\n    <summary>Clique para ver os apps suportados</summary>\n\n| Nome do app | Nome do pacote |\n| :---- | :---- |\n| Framework do Sistema | system |\n| Ui do Sistema | com.android.systemui |\n| Launcher do sistema | com.miui.home |\n| Atualizações | com.android.updater |\n| Joyose | com.xiaomi.joyose |\n| Configurações | com.xiaomi.misettings |\n| Segurança | com.miui.securitycenter |\n| Notas | com.miui.notes |\n| Papéis de Parede Mi | com.miui.miwallpaper |\n| Taplus | com.miui.contentextension |\n| Notificação de mensagem em tela | com.xiaomi.barrage |\n| Baidu IME para MIUI | com.baidu.input_mi |\n| Ui de chamadas | com.android.incallui |\n| Serviços do smartphone | com.android.phone |\n| Bateria e desempenho | com.miui.powerkeeper |\n| Mensagens | com.android.mms |\n| Captura de tela | com.miui.screenshot |\n| Limpeza | com.miui.cleanmaster |\n| Navegador | com.android.browser |\n| Rueban (MTB) | com.xiaomi.mtb |\n| Gravador de tela | com.miui.screenrecorder |\n| Permissões | com.lbe.security.miui |\n| Configurações | com.android.settings\n| Teclado Sogou para MIUI | com.sohu.inputmethod.sogou.xiaomi |\n| Clima | com.miui.weather2 |\n| Transmitir | com.milink.service |\n| Armazenamento externo | com.android.externalstorage |\n| Tela ambiente | com.miui.aod |\n| Arquivos | com.android.fileexplorer |\n| Plugin de serviço de sistema | com.miui.securityadd |\n| Downloads | com.android.providers.downloads.ui |\n| Downloads | com.android.providers.downloads |\n| Galeria | com.miui.gallery |\n| Mi Canvas | com.miui.creation |\n| Compartilhamento Mi | com.miui.mishare.connectivity |\n| Editor da Galeria | com.miui.mediaeditor |\n| MiCloud | com.miui.cloudservice |\n| Cartões inteligentes | com.miui.tsmclient |\n| iFlytek IME para MIUI | com.iflytek.inputmethod.miui |\n| Instalador de Pacotes | com.miui.packageinstaller |\n| GetApps | com.xiaomi.market |\n| Assistente | com.miui.personalassistant |\n| Temas | com.android.thememanager |\n| com.miui.rom | com.miui.rom |\n| Componentes de segurança da MIUI | com.miui.guardprovider |\n| Relógio | com.android.deskclock |\n| Câmera | com.android.camera |\n| Tradutor IA | com.xiaomi.aiasst.vision |\n| AI Reco | com.xiaomi.aireco |\n| Scanner | com.xiaomi.scanner |\n| Mi IA | com.miui.voiceassist |\n| Músicas | com.miui.player |\n| MIUI+ | com.xiaomi.mirror |\n| com.xiaomi.NetworkBoost | com.xiaomi.NetworkBoost |\n| Serviço NFC | com.android.nfc |\n\n</details>\n\n> Todos os escopos acima estão ativos no LSPosed\n\n## Chat e Feedback\n\nJunte-se ao nosso grupo para relatar problemas ou obter as atualizações mais recentes.\n\n[![badge_qgroup]][qgroup_url]\n[![badge_qguild]][qguild_url]\n[![badge_telegram]][telegram_url]\n\n## Tradução\n\n[![Crowdin](https://badges.crowdin.net/cemiuiler/localized.svg)](https://crowdin.com/project/cemiuiler)\n\nVocê pode fornecer traduções para o projeto [aqui](https://crwd.in/cemiuiler).\n\n## Obrigado!\n\n> Usei parte ou todo o conteúdo dos seguintes projetos de código aberto. Obrigado pelo forte apoio fornecido pelos desenvolvedores desses projetos (em nenhuma ordem em particular).\n\n- [「Accompanist」 por Android Open Source Project, Google Inc.](https://google.github.io/accompanist)\n- [「Android」 por Android Open Source Project, Google Inc.](https://source.android.google.cn/license)\n- [「AndroidHiddenApiBypass」 por LSPosed](https://github.com/LSPosed/AndroidHiddenApiBypass)\n- [「AndroidX」 por Android Open Source Project, Google Inc.](https://github.com/androidx/androidx)\n- [「AntiAntiDefraud」 por MinaMichita](https://github.com/MinaMichita/AntiAntiDefraud)\n- [「Auto NFC」 por GSWXXN](https://github.com/GSWXXN/AutoNFC)\n- [「BypassSignCheck」 por Weverses](https://github.com/Weverses/BypassSignCheck)\n- [「CorePatch」 por LSPosed](https://github.com/LSPosed/CorePatch)\n- [「CustoMIUIzer」 por MonwF](https://github.com/MonwF/customiuizer)\n- [「CustoMIUIzerMod」 por liyafe1997](https://github.com/liyafe1997/CustoMIUIzerMod)\n- [「DexKit」 por LuckyPray](https://github.com/LuckyPray/DexKit)\n- [「Disable app link verify」 por tehcneko](https://github.com/Xposed-Modules-Repo/io.github.tehcneko.applinkverify)\n- [「DisableFlagSecure」 por LSPosed](https://github.com/LSPosed/DisableFlagSecure)\n- [「DisableLogRequest」 por QueallyTech](https://github.com/QueallyTech/DisableLogRequest)\n- [「EzXHelper」 por KyuubiRan](https://github.com/KyuubiRan/EzXHelper)\n- [「FixMiuiMediaControlPanel」 por qqlittleice](https://github.com/qqlittleice/FixMiuiMediaControlPanel)\n- [「FuckNFC」 por xiaowine](https://github.com/xiaowine/FuckNFC)\n- [「Gson」 por Android Open Source Project, Google Inc.](https://github.com/google/gson)\n- [「HideMiuiClipboardDialog」 por zerorooot](https://github.com/zerorooot/HideMiuiClipboardDialog)\n- [「Kotlin」 por JetBrains](https://github.com/JetBrains/kotlin)\n- [「MaxFreeForm」 por YifePlayte](https://github.com/YifePlayte/MaxFreeForm)\n- [「Miui Feature」 por MoralNorm](https://github.com/moralnorm/miui_feature)\n- [「MiuiHomeR」 por qqlittleice](https://github.com/qqlittleice/MiuiHome_R)\n- [「MIUI IME Unlock」 por RC1844](https://github.com/RC1844/MIUI_IME_Unlock)\n- [「MIUI QOL」 por chsbuffer](https://github.com/chsbuffer/MIUIQOL)\n- [「Miui XXL」 por Wine-Network](https://github.com/Wine-Network/Miui_XXL)\n- [「Miui XXL」 por YuKongA](https://github.com/YuKongA/Miui_XXL)\n- [「MIUI 通知修复」 por tehcneko](https://github.com/Xposed-Modules-Repo/io.github.tehcneko.miuinotificationfix)\n- [「ModemPro」 por Weverse](https://github.com/Weverses/ModemPro)\n- [「NoStorageRestrict」 por DanGLES3](https://github.com/Xposed-Modules-Repo/com.github.dan.nostoragerestrict)\n- [「Portal Hook」 por Haocen2004](https://github.com/Haocen2004/PortalHook)\n- [「RemoveMiuiSystemSelfProtection」 por gfbjngjibn](https://github.com/gfbjngjibn/RemoveMiuiSystemSelfProtection)\n- [「SettingsDontThroughTheList」 por weixiansen574](https://github.com/weixiansen574/settingsdontthroughthelist)\n- [「StarVoyager」 por hosizoraru](https://github.com/hosizoraru/StarVoyager)\n- [「WINI」 por ouhoukyo](https://github.com/ouhoukyo/WINI)\n- [「WOMMO」 por YifePlayte](https://github.com/YifePlayte/WOMMO)\n- [「Woobox For MIUI」 por hosizoraru](https://github.com/hosizoraru/WooBoxForMIUI)\n- [「Woobox For MIUI」 por Simplicity-Team](https://github.com/Simplicity-Team/WooBoxForMIUI)\n- [「Xposed」 por rovo89, Tungstwenty](https://github.com/rovo89/XposedBridge)\n- [「XposedBridge」 por rovo89](https://github.com/rovo89/XposedBridge)\n- [「.xlDownload」 por Kr328](https://github.com/Kr328/.xlDownload)\n\n\n[qgroup_url]: https://jq.qq.com/?_wv=1027&k=TedCJq8V\n[badge_qgroup]: https://img.shields.io/badge/QQ-Grupo-4DB8FF?style=for-the-badge&logo=tencentqq\n[qguild_url]: https://pd.qq.com/s/35ooe0ssj\n[badge_qguild]: https://img.shields.io/badge/QQ-Canal-4991D3?style=for-the-badge&logo=tencentqq\n[telegram_url]: https://t.me/cemiuiler\n[badge_telegram]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=2CA5E0&label=Telegram&logo=telegram&query=%24.data.totalSubs&url=https%3A%2F%2Fapi.spencerwoo.com%2Fsubstats%2F%3Fsource%3Dtelegram%26queryKey%3Dcemiuiler\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build"
  },
  {
    "path": "app/build.gradle",
    "content": "import java.time.LocalDateTime\nimport java.time.format.DateTimeFormatter\n\nplugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n}\n\nstatic def getGitRevision() {\n    return \"git rev-parse --short HEAD\".execute().text.trim()\n}\n\nandroid {\n    compileSdk 34\n\n    defaultConfig {\n        namespace 'com.sevtinge.cemiuiler'\n        applicationId namespace\n        minSdk 30\n        targetSdk 34\n        versionCode 130\n        versionName \"1.3.130\"\n        project.archivesBaseName = \"Cemiuiler\"\n        ndk {\n            // noinspection ChromeOsAbiSupport\n            abiFilters 'arm64-v8a', 'armeabi-v7a'\n        }\n        applicationVariants.configureEach { variant ->\n            variant.outputs.configureEach {\n                outputFileName = project.archivesBaseName + \"_\" + versionName + \"(\" + versionCode + \")_\" + variant.buildType.name + \".apk\"\n            }\n        }\n    }\n\n    buildFeatures {\n        buildConfig = true\n    }\n\n    androidResources {\n        generateLocaleConfig = true\n    }\n\n    packagingOptions {\n        resources {\n            excludes += \"/META-INF/**\"\n            excludes += \"/kotlin/**\"\n            excludes += \"/*.txt\"\n            excludes += \"/*.bin\"\n            excludes += \"/*.json\"\n        }\n        dex {\n            useLegacyPackaging = true\n        }\n    }\n\n    def properties\n    def propertiesFile = rootProject.file('signing.properties')\n    if (propertiesFile.exists()) {\n        properties = new Properties()\n        properties.load(propertiesFile.newDataInputStream())\n    }\n    def getString = { String propertyName, String environmentName, String prompt ->\n        return properties?.get(propertyName) ?: System.getenv(environmentName) ?:\n            System.console()?.readLine('\\n' + prompt + ': ')\n    }\n    def keyStoreFile = getString('storeFile', 'STORE_FILE', 'Store file')?.with(rootProject.&file)\n\n    signingConfigs {\n        cemiuiler {\n            if (keyStoreFile != null) {\n                storeFile keyStoreFile\n                storePassword getString('storePassword', 'STORE_PASSWORD', 'Store password')\n                keyAlias getString('keyAlias', 'KEY_ALIAS', 'Key alias')\n                keyPassword getString('keyPassword', 'KEY_PASSWORD', 'Key password')\n            }\n        }\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled true\n            shrinkResources true\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-log.pro'\n            versionNameSuffix \"_\" + DateTimeFormatter.ofPattern(\"yyyyMMdd\").format(LocalDateTime.now())\n            if (keyStoreFile != null) {\n                signingConfig signingConfigs.cemiuiler\n            }\n        }\n        beta {\n            minifyEnabled true\n            shrinkResources true\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n            versionNameSuffix \"_\" + DateTimeFormatter.ofPattern(\"yyyyMMdd\").format(LocalDateTime.now())\n            if (keyStoreFile != null) {\n                signingConfig signingConfigs.cemiuiler\n            }\n        }\n        canary {\n            minifyEnabled true\n            shrinkResources true\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n            versionNameSuffix \"_\" + DateTimeFormatter.ofPattern(\"yyyyMMdd\").format(LocalDateTime.now()) + \"_\" + getGitRevision()\n            if (keyStoreFile != null) {\n                signingConfig signingConfigs.cemiuiler\n            }\n        }\n        debug {\n            versionNameSuffix \"_\" + DateTimeFormatter.ofPattern(\"yyyyMMdd\").format(LocalDateTime.now()) + \"_\" + getGitRevision()\n            if (keyStoreFile != null) {\n                signingConfig signingConfigs.cemiuiler\n            }\n        }\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_19\n        targetCompatibility JavaVersion.VERSION_19\n    }\n\n    kotlinOptions {\n        jvmTarget = JavaVersion.VERSION_19.toString()\n    }\n\n}\n\ndependencies {\n    compileOnly(project(\":hidden-api\"))\n\n    compileOnly files('libs/miui.jar')\n    compileOnly files(\"libs/miui-framework.jar\")\n\n    compileOnly(roots.XposedApi)\n\n    implementation 'org.luckypray:dexkit:2.0.0-rc7'\n    // implementation 'org.luckypray:DexKit:1.1.8'\n    implementation 'io.github.biezhi:TinyPinyin:2.0.3.RELEASE'\n    implementation 'com.github.kyuubiran:EzXHelper:2.0.8'\n    implementation \"com.google.accompanist:accompanist-systemuicontroller:0.32.0\"\n    implementation \"org.lsposed.hiddenapibypass:hiddenapibypass:4.3\"\n    implementation \"com.google.code.gson:gson:2.10.1\"\n    implementation 'commons-codec:commons-codec:1.16.0'\n\n    implementation roots.AndroidXCore\n    implementation roots.AndroidXCollection\n    implementation roots.AndroidXRecyclerview\n    implementation roots.AndroidXFragment\n    implementation roots.AndroidXLifecycle\n    implementation roots.AndroidXVectorDrawable\n    implementation roots.AndroidXVectorDrawableAnimated\n    implementation roots.AndroidXCustomView\n    implementation roots.AndroidXCustomViewPoolingContainer\n    implementation roots.AndroidXConstraintLayout\n\n    implementation files(roots.animation)\n    implementation files(roots.appcompat)\n    implementation files(roots.core)\n    implementation files(roots.haptic)\n    implementation files(roots.preference)\n    implementation files(roots.smooth)\n    implementation files(roots.springback)\n\n    implementation files(\"libs/hyperceiler_expansion_packs-debug.aar\")\n}\n"
  },
  {
    "path": "app/dict.txt",
    "content": "0000O000000o\n000O00000Oo\n000O00000o0\n000O00000o\n000O00000oO\n000O00000oo\n000O0000O0o\n000O0000OOo\n000O0000Oo0\n000O0000Oo\n000O0000OoO\n00O0000Ooo\n00O0000o00\n00O0000o0\n00O0000o0O\n00O0000o0o\n00O0000o\n00O0000oO0\n00O0000oO\n00O0000oOO\n000O0000oOo\n00O0000oo0\n00O0000oo\n00O0000ooO\n00O0000ooo\n00O00oOooO\n00O00oOooo\n00O000O00o\n00O000O0OO\n00O000O0Oo\n000O00oOoOo\n00O000O0o0\n00O000O0o\n00O000O0oO\n00O000O0oo\n00O000OO00\n00O000OO0o\n00O000OO\n00O000OOOo\n00O000OOo0\n000O000OOo\n00O000OOoO\n00O000OOoo\n00O000Oo00\n00O000Oo0\n00O000Oo0O\n00O000Oo0o\n00O000OoO0\n00O00O0Oo\n00O000OoO\n000O000OoOO\n00O000OoOo\n00O000Ooo0\n00O000Ooo\n00O000OooO\n00O000Oooo\n00O000o000\n00O000o00\n00O000o00O\n00O000o00o\n000O000o0\n00O000o0O0\n00O000o0O\n00O000o0OO\n00O000o0Oo\n00O000o0o0\n00O000o0o\n00O000o0oo\n00O000o\n00O000oO00\n000O000oO0\n00O000oO0O\n00O000oO0o\n00O000oO\n00O000oOO0\n00O000oOO\n00O000oOOO\n00O000oOOo\n00O000oOo0\n00O000oOo\n000O000oOoO\n00O000oOoo\n00O000oo0\n00O000oo0O\n00O000oo0o\n00O000oo\n00O000ooO0\n00O000ooO\n00O000ooOO\n00O000ooOo\n000O000ooo0\n00O000ooo\n00O000oooO\n00O000oooo\n00oooOoO\n00O00oOOoo\n00O00O000o\n00O00O00Oo\n00O00O00o0\n00O00O00o\n000O00O00oO\n00O00O00oo\n00O00O0O0o\n00O00O0OO\n00O00O0OOo\n00O00O0Oo0\n00O00O0OoO\n00O00O0Ooo\n00O00O0o00\n00O00O0o0\n00O00O0o0O\n0O00O0o0o\n0O00O0o\n0O00O0oO0\n0O00O0oOO\n0O00O0oOo\n0O00O0oo0\n0O00O0oo\n0O00O0ooO\n0O00O0ooo\n00O00OO0O\n0O00OO0o\n0O00OOOo\n0O00OOo0\n0O00OOo\n0O00OOoO\n0O00OOoo\n0O00Oo00\n0O00Oo00o\n0O00Oo0\n00O00Oo0OO\n0O00Oo0Oo\n0O00Oo0o0\n0O00Oo0o\n0O00Oo0oO\n0O00OooOO\n0O00Oo0oo\n0O00Oo\n0O00OoO0\n0O00OoO0o\n00O00OoO0O\n0O00Ooo\n0O00OoO\n0O00OoOO0\n0O00OoOO\n0O00OoOo0\n0O00OoOo\n0O00OoOoO\n0O00OoOoo\n0O00Ooo00\n00O00Ooo0\n0O00Ooo0O\n0O00Ooo0o\n0O00OooO0\n0O00OooO\n0O00OooOo\n0O00Oooo0\n0O00Oooo\n0O00Ooooo\n0O00OoooO\n00O00o0000\n0O00o000\n0O00o000O\n0O00o000o\n0O00o00\n0O00o00O0\n0O00o00O\n0O00o00OO\n0O00o00Oo\n0O00o00o0\n00O00o00o\n0O00o00oO\n0O00o00oo\n0O00o0\n0O00o0O00\n0O00o0O0\n0O00oo000\n0O00o0O0O\n0O00o0O0o\n0O00o0O\n00O00o0OO0\n0O00o0OO\n0O00o0OOO\n0O00o0OOo\n0O00o0Oo0\n0O00o0Oo\n0O00o0OoO\n0O00o0Ooo\n0O00o0o00\n0O00o0o0\n00O00o0o0O\n0O00o0o0o\n0O00o0o\n0O00o0oO0\n0O00o0oO\n0O00o0oOO\n0O00o0oOo\n0O00o0oo0\n0O00o0oo\n0O00o0ooO\n000O00o0ooo\n00O00o\n00O00oO0O0\n00O00oO000\n00O00oO00\n00O00oO00O\n00O00oO0OO\n00O00oO00o\n00O00oO0\n00O00oO0O\n00O00ooO00\n0O00oO0Oo\n0O00oO0o0\n0O00oO0o\n0O00oO0oO\n0O00oO0oo\n0O00oO\n0O00oOO0o\n0O00oOO00\n0O00oOO0\n00O00oOO0O\n0O00oOo\n0O00oOO\n0O00oOOO0\n0O00oOOO\n0O00oOOOO\n0O00oOOOo\n0O00oOOo0\n0O00oOOo\n0O00oOOoO\n00O00oOo00\n0O00oOo0\n0O00oOo0O\n0O00oOo0o\n0O00oOoO\n0O00oOoOO\n0O00oOoo0\n0O00oOoo\n0O00oo00\n0O00oo00O\n00O00oo00o\n0O00oo0\n0O00oo0O0\n0O00oo0O\n0O00oo0OO\n0O00oo0Oo\n0O00oo0o0\n0O00oo0o\n0O00oo0oo\n0O00oo\n00O00ooO0\n0O00ooO0O\n0O00ooO0o\n0O00ooO\n0O00ooOo0\n0O00ooOO0\n0O00ooOO\n0O00ooOOO\n0O00ooOOo\n0O00ooOo\n00O00ooOoO\n0O00ooOoo\n0O00ooo00\n0O00ooo0\n0O00ooo0o\n0O00ooo\n0O00oooO0\n0O00oooO\n0O00oooOO\n0O00oooOo\n00O00oooo0\n0O00oooo\n0O00ooooo\n0ooooooo\n0O0O00oO\n0O0O000o\n0O0O00OO\n0O0O00Oo\n0O0O00o0\n0O0O00o\n00O0O0O0o\n0O0O0O\n0O0O0OO0\n0O0O0OO\n0O0O0OOO\n0O0O0OOo\n0O0O0Oo0\n0O0O0OoO\n0O0O0Ooo\n0O0O0o00\n00O0O0o0\n0O0O0o0O\n0O0O0o0o\n0O0O0o\n0O0O0oO0\n0O0O0oO\n0O0O0oOO\n0O0O0oOo\n0O0O0oo0\n0O0O0oo\n000O0O0ooO\n00O0O0ooo\n00O0OoOo\n00O0OoOO\n00O0OO00O\n00O0OO00o\n00O0OO0O\n00O0Oo0o0\n00O0OO0Oo\n00O0OO0o0\n00O0OO0oO\n0O0OO0oo\n0O0OOO00\n0O0OOoo\n0O0OOoO\n0O0OOO0\n0O0OOO0O\n0O0OOO0o\n0OO0oO\n0O0OOOO\n00O0OOOOO\n0O0OOOOo\n0O0OOOo0\n0O0OOOo\n0O0OOOoO\n0O0OOOoo\n0O0OOo00\n0O0OOo0O\n0O0OOo0o\n0O0OOo\n00O0OOoO0\n0O0OOoOO\n0O0OOoOo\n0O0OOoo0\n0O0OOooO\n0O0OOooo\n0O0Oo000\n0O0Oo00\n0O0Oo00O\n0O0Oo00o\n00O0Oo0\n0O0Oo0O0\n0O0Oooo\n0O0Oo0O\n0O0Oo0OO\n0O0Oo0Oo\n0O0Oo0o\n0O0Oo0oO\n0O0Oo0oo\n0o00o00O\n00O0Oo\n0O0OoO00\n0O0OoO0\n0O0OoO0O\n0OooOO\n0OoO0o\n0O0OoO\n0O0OoOO0\n0O0OoOOO\n0O0OoOOo\n00O0OoOo0\n0O0OoOoO\n0O0OoOoo\n0O0Ooo00\n0O0Ooo0\n0O0Ooo0O\n0O0Ooo0o\n0O0Ooo\n0O0OooO0\n0O0OooO\n00O0OooOO\n0O0OooOo\n0O0Oooo0\n0O0OoooO\n0O0Ooooo\n0O0o0000\n0O0o000\n0O0o000O\n0O0o000o\n0O0o00\n00O0o00O0\n0O0o00O\n0O0o00OO\n0O0o00Oo\n0O0o00o0\n0O0o00o\n0O0o00oO\n0O0o00oo\n0O0o0\n0O0o0O00\n00O0o0O0\n0O0o0O0O\n0O0o0O0o\n0O0o0O\n0O0o0OO0\n0O0oo0o\n0O0o0OO\n0O0o0OOO\n0O0o0OOo\n0O0o0Oo0\n000O0o0Oo\n00O0o0OoO\n00O0o0Ooo\n00O0o0o00\n00O0o0o0\n00O0o0o0O\n00O0o0o0o\n00O0o0oO0\n00O0o0oO\n00O0o0oOO\n00O0o0oOo\n0O0o0oo\n0O0o0ooO\n0oOOoOO\n0O0o\n0O0oO000\n0O0oO00\n0O0oO0oO\n0O0oO00O\n0O0oO00o\n00O0oO0\n0O0oO0O0\n0O0oO0O\n0O0oO0OO\n0O0oO0Oo\n0O0oO0o0\n0O0oO0o\n0O0oO0oo\n0o0Oo0o0\n0O0oO\n00O0oOO00\n0O0oOO0\n0o00O00O0\n0O0oOO0O\n0O0oOO0o\n0O0oOO\n0O0oOOO0\n0O0oOOOo\n0O0oOOo0\n0Oo0OOo\n00O0oOOo\n0O0oOOoO\n0O0oOOoo\n0O0oOo00\n0O0oOo0\n0ooO0Ooo\n0O0oOo0O\n0O0oOo0o\n0O0oOo\n0O0oOoO0\n00O0oOoO\n0O0oOoOO\n0O0oOoOo\n0OOoOoo\n0O0oOoo0\n0O0oOoo\n0O0oOooO\n0O0oOooo\n0O0oo000\n0O0oo00\n00O0oo00O\n0O0oo00o\n0O0oo0\n0O0oo0O0\n0O0oo0O\n0O0oo0OO\n0O0oo0Oo\n0O0oo0o0\n0O0oo0oO\n0O0oo0oo\n00O0oo\n0O0ooO00\n0O0ooOo\n0O0oooo\n0O0oooO\n0O0ooO0\n0O0oooOo\n0O0ooO0O\n0O0ooO0o\n0O0ooO\n00O0ooOO0\n0O0ooOO\n0O0ooOOO\n0O0ooOOo\n0O0ooOo0\n0O0ooOoO\n0O0ooOoo\n0O0ooo00\n0O0ooo0\n0O0ooo0O\n00O0ooo0o\n0O0ooo\n0O0oooO0\n0O0oooOO\n0O0oooo0\n0O0ooooO\n0O0ooooo\n0OO0000\n0OO0000o\n0OoOOO\n000OO000OO\n00OO000Oo\n00OO000o0\n00OO000o\n00OO000oO\n00OO000oo\n00OO00OO\n00OO00O0\n00OO00O0o\n00OO00O\n00OO00OOO\n0OO00OOo\n0OO00Oo0\n0OO0ooO\n0OO00Oo\n0OO00OoO\n0OO00Ooo\n0OO00o00\n0OO00o0O\n0OO00o0o\n00OO00oO0\n0OO00oO\n0OO00oOO\n0OO00oOo\n0OO00oo0\n0OO00oo\n0OO00ooO\n0OO00ooo\n0OO0O00o\n0OO0O0O\n00OO0O0OO\n0OO0O0Oo\n0OO0O0o0\n0OO0oOo\n0OO0oOO\n0OO0O0o\n0OO0O0oO\n0OO0O0oo\n0oOo00\n0OO0OO0o\n00OOo00\n0OO0OO\n0OO0OOO\n0OO0OOOO\n0OO0OOOo\n0OO0OOo0\n0OO0OOo\n0OO0OOoO\n0OO0OOoo\n0OO0Oo00\n00OO0Oo0\n0OO0Oo0O\n0OO0Oo0o\n0Oo0Oo0O\n0OO0OoO0\n0OO0OoO\n0OO0OoOO\n0Oo0Ooo0\n0OO0OoOo\n0OO0Ooo0\n00OO0Ooo\n0OO0OooO\n0OO0Oooo\n0OO0o000\n0OO0o00\n0OO0o00O\n0OO0o00o\n0OO0o0\n0OO0o0O0\n0OO0o0OO\n00OO0o0Oo\n0OO0o0o0\n0OO0o0o\n0OO0o0oO\n0OO0o0oo\n0OO0o\n0OO0oO00\n0OO0oO0\n0OO0oO0O\n0OO0oO0o\n00OO0oOO0\n0OoOOoOo\n0OO0oOOO\n0OO0oOOo\n0OO0oOo0\n0OO0oOoO\n0OO0oOoo\n0OO0oo00\n0OO0oo0\n0OO0oo0O\n00OO0oo0o\n0OO0oo\n0OO0ooO0\n0OO0ooOO\n0OO0ooOo\n0OO0ooo0\n0OO0ooo\n0OO0oooO\n0OO0oooo\n0OOO000o\n000OOO00\n00OOO00O0\n00OOO00Oo\n00OOO00o0\n00OOO00o\n00OOO00oO\n00OOO00oo\n00OOO0O0O\n00OOO0O0o\n00OOO0O\n00o00OOOOO\n0OOO0OO0\n0OOO0OOO\n0OOO0OOo\n0OOO0Oo0\n0OOO0oO\n0OOO0Oo\n0OOO0OoO\n0OOO0Ooo\n0OOO0o00\n00OOO0o0\n0OOO0o0O\n0OOO0o0o\n0OOO0o\n0OOO0oO0\n0OOO0oOO\n0OOO0oOo\n0OOO0oo0\n0OOO0oo\n0OOO0ooO\n00OOO0ooo\n0OOO\n0OOOO00O\n0OOOO00o\n0OOOO0\n0OOOOoO\n0OOOOo0\n0OOOOoo\n0OOOO0O\n0OOOO0OO\n00OOOO0Oo\n0OOOO0o0\n0OOOO0oO\n0OOOO0oo\n0OOOOO00\n0OOOOO0\n0OOOOO0o\n0OOOOO\n0OOOOOO\n0OOOOOOO\n00OOOOOOo\n0OOOOOo0\n0OOooOo\n0OOoooo\n0OOOOOo\n0OOOOOoO\n0OOOOOoo\n0OOOOo00\n0OOOOo0O\n0OOOOo0o\n00OOOOo\n0OOOOoO0\n0OOOOoOO\n0OOOOoOo\n0OOOOoo0\n0OOOOooO\n0OOOOooo\n0OOOo000\n0OOo000\n0OOOo00\n00OOOo00O\n0OOOo00o\n0OOOo0\n0ooOOo00\n0OOOo0O0\n0OOOo0O\n0OOOo0OO\n0OOOo0Oo\n0OOOo0o0\n0OOOo0o\n00OOOo0oO\n0OOOo0oo\n0OOOo\n0OOOoO00\n0OOOoO0\n0OOOoO0O\n0o0ooo0OO\n0OOOoO0o\n0OOOoO\n0OOOoOO0\n00OOOoOO\n0OOOoOOO\n0OOOoOOo\n0OOOoOo0\n0OOOoOo\n0OOOoOoO\n0OOOoOoo\n0ooO00O0\n0OOOoo00\n0OOOoo0\n000o00O0oO0\n00OOOoo0O\n00OOOoo0o\n00OOOoo\n00OOOooO0\n00OOOooO\n00o0OOoOoo\n00OOOooOO\n00OOOooOo\n00OOOooo0\n00OOOooo\n0OOOoooO\n0OOOoooo\n0OOo0000\n0OOo000O\n0OOo000o\n0OOo00O0\n0OOo00O\n0OOo00OO\n0OOo00Oo\n00OOo00o0\n0OOo00o\n0OOo00oO\n0OOo00oo\n0ooOo\n0OOo0\n0OOo0O00\n0OOo0OO\n0OOo0Oo\n0OOoo00\n00OOo0O0\n0OOo0O0O\n0OOo0O0o\n0OOoOOoO\n0OOo0OO0\n0OOo0OOO\n0OOo0OOo\n0OOo0Oo0\n0OOo0OoO\n0OOo0Ooo\n00OOo0o00\n0OOo0o0\n0OOo0o0O\n0OOo0o0o\n0OOo0o\n0OOo0oO0\n0OOo0oO\n0OOo0oOO\n0OOo0oOo\n0OOo0oo0\n00OOo0oo\n0OOo0ooO\n0OOo0ooo\n0OOoO000\n0OOoO00\n0OOoO00O\n0OOoO00o\n0OOoO0\n0OOoO0O0\n0OOoO0o\n00OOoO0O\n0OOoO0OO\n0OOoO0Oo\n0OOoO0o0\n0OOoO0oO\n0OOoO0oo\n0OOoO\n0OOoOO00\n0OOoOO0O\n0OOoOO0o\n00OOoOO\n0OOoOOO0\n0OOoOOO\n0OOoOOOO\n0OOoOOOo\n0OOoOOo0\n0OOoOOo\n0OOoOOoo\n0OOoOo00\n0OOoOo0\n00OOoOo0O\n0OOoOo0o\n0OOoOo\n0OOoOoO0\n0oO0OO0\n0OOoOoO\n0OOoOoOO\n0OOoOoOo\n0OOoOoo0\n0OOoOooO\n00OOoOooo\n0OOoo000\n0OOoo00O\n0OOoo00o\n0OOoo0\n0OOoo0O0\n0OOoo0O\n0OOoo0OO\n0OOoo0Oo\n0OOoo0o0\n000OOoo0o\n00OOoo0oO\n00OOoo0oo\n00OOoo\n00OOooO00\n00OOooO0\n00OOooO0O\n00OOooO0o\n00OOooO\n00OOooOO0\n00OOooOO\n0OOooOOO\n0OOooOOo\n0OOooOo0\n0OOooOoO\n0OOooOoo\n0OOooo00\n0OOooo0\n0OOooo0O\n0OOooo0o\n00OOooo\n0OOoooO0\n0OOoooO\n0OOoooOO\n0OOoooOo\n0OOoooo0\n0OOooooO\n0OOooooo\n0Oo00000\n0Oo0000O\n00Oo0000o\n0Oo000\n0Oo000O0\n0Oo000O\n0Oo000OO\n0Oo000Oo\n0Oo000o0\n0Oo000o\n0Oo000oO\n0Oo000oo\n00Oo00\n0Oo00O00\n0Oo00O0\n0Oo0o0Oo\n0Oo00O0O\n0Oo00O0o\n0Oo00O\n0Oo00OO0\n0Oo0o0o\n0Oo00Oo\n00Oo00OO\n0Oo00OOO\n0Oo00OOo\n0Oo00Oo0\n0Oo0o0O0\n0Oo00OoO\n0Oo00Ooo\n0Oo00o00\n0Oo00o0\n0Oo00o0O\n00Oo00o0o\n0Oo00o\n0Oo00oO0\n0Oo00oOO\n0Oo00oo0\n0Oo00oo\n0Oo00ooO\n0Oo00ooo\n0Oo0\n0Oo0O000\n00Oo0O00\n0Oo0O00O\n0Oo0O00o\n0Oo0O0\n0Oo0O0O0\n0Oo0O0O\n0Oo0O0OO\n0Oo0O0Oo\n0Oo0O0o0\n0Oo0O0o\n00Oo0O0oO\n0Oo0O0oo\n0o00oO00\n0o00OO00\n0Oo0O\n0Oo0OO00\n0Oo0OO0\n0Oo0OO0O\n0Oo0OO0o\n0Oo0OO\n00Oo0OOO0\n0Oo0OOOO\n0Oo0OOOo\n0Oo0OOo0\n0Oo0OOoO\n0Oo0OOoo\n0Oo0Oo00\n0Oo0Oo0\n0Oo0Oo0o\n0Oo0Oo\n000Oo0OoO0\n00Oo0OoO\n00Oo0OoOo\n00Oo0Ooo\n00Oo0OooO\n00Oo0Oooo\n00Oo0o000\n00Oo0o00\n00Oo0o00O\n00Oo0o00o\n00Oo0o0\n0Oo0o0O\n0Oo0o0o0\n0Oo0o0oO\n0Oo0o0oo\n0Oo0o\n0Oo0oO00\n0Oo0ooO\n0Oo0oOO\n0Oo0oo0\n00Oo0ooo\n0Oo0oO0\n0Oo0oO0O\n0Oo0oO0o\n0Oo0oO\n0Oo0oOO0\n0Oo0oOOO\n0Oo0oOOo\n0Oo0oOo0\n0Oo0oOo\n00Oo0oOoO\n0Oo0oOoo\n0Oo0oo00\n0Oo0oo0O\n0Oo0oo0o\n0Oo0oo\n0Oo0ooO0\n0Oo0ooOO\n0Oo0ooOo\n0Oo0ooo0\n00Oo0oooO\n0Oo0oooo\n0Oo\n0OoO0000\n0OoO000\n0OoO000O\n0OoO000o\n0OoO00O0\n0OoO00O\n0OoO00OO\n00OoO00Oo\n0OoO00o0\n0OoO00o\n0OoO00oO\n0OoO00oo\n0OoO0\n0OoO0O00\n0OoO0Oo\n0OoO0O0\n0OoO0O0O\n00OoO0O0o\n0OoO0O\n0OoO0OO0\n0OoO0OO\n0OoO0OOO\n0OoOo00O\n0OoO0OOo\n0OoO0Oo0\n0OoO0OoO\n0OoO0Ooo\n00OoO0o00\n0OoO0o0\n0OoO0o0O\n0OoO0o0o\n0OoO0oO0\n0OoO0oo\n0OoO0oO\n0OoO0oOO\n0OoO0oOo\n0OoO0oo0\n00OoO0ooO\n0OoO0ooo\n0OoO\n0OoOO000\n0OoOOo0\n0OoOOOO\n0OoOO0O\n0OoOOoo\n0OoOOoO\n0OoOOO0\n00OoOOOo\n0OoOoOo\n0OoOoOO\n0OoOO00\n0OoOO00O\n0OoOO00o\n0OoOO0\n0OoOO0O0\n0OoOO0OO\n0OoOO0Oo\n000OoOO0o0\n00OoOO0o\n00OoOO0oO\n00OoOO0oo\n00OoOo\n00OoOO\n00OoOOO0O\n00OoOOO0o\n00OoOOOO0\n00OoOOOOO\n00OoOOOOo\n0OoOOOo0\n0OoOOOoO\n0OoOOOoo\n0OoOOo00\n0OoOOo0O\n0OoOOo0o\n0OoOOo\n0OoOOoO0\n0OoOOoOO\n00OoOOoo0\n0OoOOooO\n0OoOOooo\n0OoOo000\n0OoOooo\n0OoOoo0\n0OoOo00\n0OoOo00o\n0OoOo0\n0OoOo0O0\n00OoOo0o\n0OoOo0O\n0OoOo0OO\n0OoOo0Oo\n0OoOo0o0\n0OoOo0oO\n0OoOo0oo\n0OoOoO00\n0OoOoO0\n0OoOoO0O\n00OoOoO0o\n0OoOoO\n0OoOoOO0\n0OoOoOOO\n0OoOoOOo\n0OoOoOo0\n0OoOoOoO\n0OoOoOoo\n0OoOoo00\n0OoOoo0O\n00OoOoo0o\n0OoOoo\n0OoOooO0\n0OoOooO\n0OoOooOO\n0OoOooOo\n0OoOooo0\n0OoOoooO\n0OoOoooo\n0Ooo0000\n00Ooo000\n0Ooo000O\n0Ooo000o\n0Ooo00\n0Ooo00O0\n0Ooo00O\n0Ooo00OO\n0Ooo00Oo\n0Ooo00o0\n0Ooo00o\n00Ooo00oO\n0o00oo00o\n0Ooo00oo\n0Ooo0\n0Ooo0O00\n0Ooo0O0\n0Ooo0O0O\n0Ooo0O0o\n0Ooo0O\n0Ooo0OO0\n00Oooo00\n0Ooo0oO\n0Ooo0Oo\n0Ooo0OO\n0o000O0OO\n0o000oO0O\n0Ooo0OOO\n0Ooo0OOo\n0Ooo0OoO\n0Ooo0Ooo\n00Ooo0o00\n0Ooo0o0\n0Ooo0o0o\n0Ooo0o\n0Ooo0oO0\n0Ooo0oOO\n0Ooo0oOo\n0Ooo0oo0\n0Ooo0oo\n0Ooo0ooO\n00Ooo0ooo\n0o0oo\n0Ooo\n0OooO000\n0OooO0O\n0Ooooo0\n0OooooO\n0OoooOO\n0OoooOo\n0OooO00\n0OooO00O\nOooO00o\nOooO0O0\nOooO0OO\nOooO0Oo\nOooO0o0\nOooO0o\nOooO0oO\nOooO0oo\nOooO\n0OooOO00\nOooOO0\nOooOO0O\nOooOO0o\nOooOOO0\nOooOOO\nOooOOOO\nOooOOOo\nOooOOo0\nOooOOo\n0OooOOoO\nOooOOoo\nOooOo00\nOooOo0\nOooOo0O\nOooOo0o\nOooOo\nOooOoO0\nOooOoO\nOooOoOO\n0OooOoOo\nOooOoo0\nOooOoo\nOooOooO\nOooOooo\nOooo000\nOooo00O\nOooo00o\nOooo0\nOooo0O0\n0Oooo0O\nOooo0OO\nOooo0o0\nOooo0o\nOooo0oO\nOooo0oo\nOooo\nOoooO00\nOoooO0\nOoooO0O\n0OoooO0o\nOoooO\nOoooOO0\no000oOoO\nOoooOOO\nOoooOOo\nOoooOo0\nOoooOoO\nOoooOoo\nOoooo00\n0Ooooo0O\nOoooo0o\nOooooO0\nOooooOO\nOooooOo\nOooooo0\nOooooo\nOoooooO\nOoooooo\no0OoOo0\n0o0OoO0O\nooOO\no00O0O\no00Oo0\no00Ooo\no00o0O\no00ooo\noo000o\no00oO0o\no00oO0O\n0o0oo000\no0ooOO0\no0ooOOo\no0ooOoO\no0OOO0o\no0Oo0oo\no0OO00O\noo0o0Oo\no0O0O00\no000OOo\n00oo0oOoO\n0ooo0Ooo\n0ooOo00O\n0o0OoOO0\n0o0O00oo\n0o0ooo00\n0o000OOoo\n0o000OOOo\n0o000OOOO\n0o000OOO0\n0o0000000\no000000\no000000O\no000000o\no00000\no00000O0\no00000O\no00000OO\no00000Oo\no00000o0\n0o00000o\no0000Ooo\no00000oO\no00000oo\no0000\no0000O00\no0000oo\no0000oO\no0000O0\no0000O0O\n0o0000O0o\no000OO\no0000O\no0000OO0\no0000OO\no0000OOO\no0000OOo\no0000Oo0\no0000Oo\no0000OoO\n0o0000o00\no0000o0\no0000o0O\no0000o0o\no0000o\no0000oO0\no0000oOO\no0000oOo\no0000oo0\no0000ooO\n0o0000ooo\no000\no000O000\no000OoO\no000O0o\no000Ooo\no000O0O\no000Oo0\no000O00\no000O00O\n0o000O00o\no000O0\no000O0Oo\no000OO0O\no000O0O0\no000O0o0\no000O0oO\no000O0oo\no000O\no000OO00\n0o000OO0\no0OoO0o\no000OO0o\no000OOO\no000OOo0\no000OOoO\no000Oo00\no000Oo0O\no000Oo0o\no000Oo\n0o000OoO0\no000OoOO\no000OoOo\no000Ooo0\no000OooO\no000Oooo\no000o000\no000o00\no000o00O\no000o00o\n0o000o0\noooo00o\no000o0O0\no000o0O\no000o0OO\no000o0Oo\no000o0o0\no000o0o\no000o0oO\no000o0oo\n00o000o\n0o000oO00\n0o000oO0\n0o000oO0o\n0o000oO\n0o000oOO0\n0o000oOO\n0o000oOOO\n0o000oOOo\n0o000oOo0\n0o000oOo\no000oOoo\no000oo00\no000oo0\no000oo0O\no000oo0o\no000oo\no000ooO0\no000ooO\no000ooOO\n0o000ooOo\no000ooo0\no000ooo\no000oooO\no000oooo\no00\no00O0000\no0O0ooO\no00oOoo\no00O000\n0o00O000O\no00O000o\no00O00\no00O00O\noOO00O\no00O00OO\no00O00Oo\no00O00o0\no00O00o\no00O00oO\n0o00O00oo\noo00o\no00O0\no00O0O00\no00O0O0\no00O0O0O\no00O0O0o\no00O0OO0\noo0o0O0\no00O0OO\n0o00Oo00O\no00O0OOO\no00O0OOo\no00O0Oo0\noo0oOO0\no00O0Oo\no00O0OoO\no00O0Ooo\no00O0o00\no00oOOo\n0o00oOOO\no00O0o0\no00O0o0O\no00O0o0o\no00O0o\no00O0oO\no00O0oOO\no00O0oOo\no00O0oo0\no00O0oo\n0o00O0ooO\no00O0ooo\no00O\no00OO000\no00OO00O\no00OO00o\no00OO0\no00OO0O0\no00OO0O\no00OO0OO\n0o00OO0Oo\no00OO0o0\no00OO0o\no00OO0oO\no00OO0oo\noo0O\no00OO\no00OOO00\no00OOO0\no00OOO0O\n0o00OOO0o\no0o0Oo\no00OOO\no00OOOO0\no00OOOO\no00OOOOo\noOooo0o\no00OOOo0\no00OOOo\no00OOOoO\n00o00OOOoo\n0o00OOo00\n0o00OOo0\n0o00OOo0O\n0o00OOo0o\n0o00OOo\n0o00OOoO0\n0o00OOoO\n0o00OOoOO\n0o00OOoOo\n0o00OOoo0\no00OOoo\no00OOooO\no00OOooo\no00OoOoO\no00Oo000\no00Oo00\no00Oo00o\no00Oo0O0\no00Oo0O\n0o00Oo0OO\no00Oo0Oo\no00Oo0o0\no00Oo0o\no00Oo0oO\no00Oo0oo\no0oOO\no00Oo\no00OoO00\no00OoO0\n0o00OoO0O\no00OoO0o\no00OoO\no00OoOO0\no00OoOO\no00OoOOO\no00OoOOo\no00OoOo0\no00OoOo\no00OoOoo\n0o00Oooo0\no00Ooo00\no00Ooo0\no00Ooo0O\no00Ooo0o\no00OooO0\no00OooO\no00OooOO\no00OooOo\no0O00o0\n0o00Oooo\no00OoooO\no00Ooooo\no00o0000\no00o000\no00o000O\no00o000o\noo00oO\no00o00\no00o00O0\n0o00o00OO\no00o00Oo\no00o00o0\no00o00o\no00o00oO\no00o00oo\no00o0\no00o0O00\no00o0O0\no00o0O0O\n0o00o0O0o\no00o0OO0\no00o0OO\no00o0OOO\no00o0OOo\no00o0Oo0\no00o0Oo\no00o0OoO\no00o0Ooo\no00o0o00\n0o00o0o0\no00o0o0O\no00o0o0o\no00o0o\no00o0oO0\no00o0oO\no00o0oOO\no00o0oOo\no00o0oo0\no00o0oo\n0o00o0ooO\no00o0ooo\no00o\no00oo000\no00oO000\no00oO00O\no00oO00o\no00oOo\no00oO0\no00oO0O0\n00o00oO0OO\n0o00oO0Oo\n0o00oO0o0\n0o00oO0oO\n0o00oO0oo\n0o00oO\n0o00oOOoo\n0o00oOO00\n0o00oOO0\n0o00oOO0O\n0o00oOO0o\no0oOOo\no0ooOO\no00oOO\no00oOOO0\no00oOOOO\no00oOOOo\no00oOOo0\no00oOOoO\no00oOo00\n0o00oOo0\no00oOooO\no00oOo0O\no00oOo0o\no00oOoO0\no00oOoO\no00oOoOO\no00oOoOo\no00oOoo0\no00oOooo\n0o00oo00\no00oo00O\no00oo0\no00oo0OO\no00oo0O0\no00oo0O\no00oo0Oo\no00oo0o0\no00oo0o\no00oo0oO\n0o00oo0oo\no0O0o\no00oo\no00ooO00\no00ooO0\no00ooO0O\no00ooO0o\no00ooO\no00ooOO0\no00ooOO\n0o00ooOOO\no00ooOOo\no00ooOo0\no00ooOo\no00ooOoO\no00ooOoo\no00ooo00\no00ooo0\no00ooo0O\no00ooo0o\n0o00oooO0\no00oooO\no00oooOO\no00oooOo\no00oooo0\no00oooo\no00ooooO\no00ooooo\no0\no0O00000\n0o0O0000\no0O0000O\no0O0000o\no0O000\no0O000O\no0OoOoOo\no0O000Oo\no0OoOoOO\no0O000o0\no0O000o\n0o0O000oO\no0ooOoOO\no0O000oo\no0O00\no0O00O0\no0OoO00O\no0O00O0o\no0O00O\no0O00OO\no0O00OOO\n0o0O00Oo0\no0O00Oo\no0oO0Ooo\no0O00OoO\no0O00Ooo\no0O00o00\no0O00o0O\no0O00o0o\no0O00o\no0O00oO0\n00o0O00oO\n0o0O00oOO\n0o0O00oOo\n0o0O00oo0\n0o0Oo0oOO\n0o0O00ooO\n0o0O00ooo\n0o0O0\n0o0ooOOOo\n0o0O0O00O\n0o0O0O0\no0O0O0O\no0oO0O0o\no0O0oo0o\no0O0O0Oo\no0O0O0o0\no0O0O0o\no0O0O0oO\no0O0O0oo\no0ooO\n0o0O0O\no0O0OO0\no0O0OO0O\no0O0OO\no0O0OOO0\no0O0OOO\no0O0OOOo\no0O0OOo\no0O0OOoO\no0O0OOoo\n0o0O0Oo00\no0OooO0\no0O0Oo0\no0O0Oo0O\no0O0Oo0o\no0O0Oo\no0O0Oooo\no0O0OoO0\noo0OOoo\no0O0OoO\n0o0O0OoOO\no0O0OoOo\no0O0Ooo0\no0O0Ooo\no0O0OooO\no0O0o000\no0O0o00\no0O0o00O\no0O0o00o\no0O0o0\n0o0O0o0O0\no0O0o0O\no0O0o0OO\no0O0o0Oo\no0O0o0o0\no0O0o0o\no0oOo0O0\no0O0o0oO\no0O0o0oo\no0O0oo0O\n0o0O0oO00\noooOO0\no0O0oO0\no0O0oO0O\no0O0oO0o\no0O0oO\no0O0oOO0\no0O0oOO\no0O0oo00\no0O0oOOO\n0o0O0oOOo\no0O0oOo0\noo0oOOo\no0O0oOo\no0O0oOoO\no0O0oOoo\no0O0oo0\no0O0oo\no0O0ooO0\no0O0ooOO\n0o0O0ooOo\no0O0ooo0\no0O0ooo\no0O0oooO\no0O0oooo\no0O\no0OO000\no0OO000o\noo0oO0\noo0ooO\n0o0OO00\no0OO00OO\no0OO00oo\no0OO00Oo\no0OO00o0\no0OoOoO\no0OO00o\no0OO0\no0OO0O0\no0OO0O0O\n00o0OO0O0o\n0o0OO0O\n0o0OOoOOo\n0o0OOoOoO\n0o0OO0OO0\n0o0OO0OO\n0o0OOoOO0\n0o0OO0OOO\n0o0OO0OOo\n0o0OO0Oo0\n0o0OO0Oo\no0OO0OoO\no0OOooO0\no0OO0Ooo\no0OO0o00\no0OO0o0\no0OO0o0O\no0OO0o0o\no0OO0o\no0OO0oO0\n0o0OO0oo\no0OO0oO\no0OO0oOO\no0OOoooO\no0OO0oOo\no0OO0oo0\no0OO0ooO\no0OO0ooo\no0OO\no0OOO00\n0o0OOO00O\no0OOO00o\no0OOO0\no0OOO0O0\no0OOO0O\no0OOO0OO\no0OOO0Oo\no0OOO0o0\no0OOO0oO\no0OOO0oo\n0o0OOO\no0OOOOoO\no0OOOO00\no0OOOO0\no0OOOO0o\no0OOOO\no0OOOOO0\no0OOOOO\no0OOOOOO\no0OOOOOo\n0o0OOOOo0\no0OOOOo\no0OOOOoo\no0OOOo00\no0OOOo0\no0OOOo0O\no0OOOo0o\no0OOOo\no0OOOoO0\no0OOOoO\n0o0OOOoOO\no0OOOoOo\no0OOOoo0\no0OOOoo\no0OOOooO\no0OOOooo\no0OOo000\no0OOo00\no0OOo00O\no0OOo00o\n0o0OOo0\no0OOo0O0\no0OooOo\no0OOo0O\no0OOo0OO\no0OOo0Oo\no0OOo0o0\no0OOo0o\no0OOo0oO\no0OOo0oo\n0o0OOo\no0OOoO00\no0OOoO0\no0OOoO0O\no0OOoO0o\no0OOoO\no0OOoOO\no0OOoOOO\no0OOoOo0\no0OOoOo\n0o0OOoo00\no0OOoo0\no0OOoo0O\no0OOoo0o\no0OOoo\no0OOooO\no0OOooOO\no0OOooOo\no0OOooo0\no0OOooo\n00o0OOoooo\n0o0Oo0000\n0o0Oo000\n0o0Oooo0O\n0o0Oo00O0\n0o0Oo000O\n0o0Oo000o\n0o0Oo00\n0o0Oo00OO\n0o0Oo00Oo\n0o0oooOoo\no0Oo00o0\no0Oo00o\no0Oo00oO\no0Oo00oo\no0Oo0\no0ooO0O0\no0Oo0O00\no0Oo0O0\no0Oo0O0O\n0o0Oo0O0o\no0Oo0O\no0Oo0OO0\no0Oo0OO\no0oOooO0\no0ooOOOO\no0oOo000\no0Oo0OOO\no0oOo0o0\no0oOoo00\n0o0oO0OOo\no0Oo0OOo\no0Oo0Oo0\no0Oo0Oo\no0Oo0OoO\no0Oo0oOo\no0Oo0Ooo\no0Oo0o00\no0Oo0o0O\no0Oo0o0o\n0o0Oo0o\no0Oo0oO0\no0Oo0oO\no0Oo0oo0\no0Oo0ooO\no0Oo0ooo\no0Oo\no0OooOoo\no0OoO000\no0OoO0\n0o0OoO0O0\no0oO0O00\no0OoO0OO\no0ooOOO0\no0OoO0Oo\no0OoO0o0\no0OoO0oO\no0OoO0oo\no0OoO\no0OoOO00\n0o0OoOO0O\no0OoOO0o\no0OoOO\no0OoOOoO\no0OoOOO0\no0OoOOO\no0OoOOOO\no0OoOOOo\no0OoOOo0\no0OoOOo\n0o0OoOOoo\no0OoOo00\no0OoOo0O\no0ooOOoo\no0OoOo0o\no0OoOo\no0OoOoO0\no0OoOoo0\no0OoOoo\no0OoOooO\n0o0OoOooo\no0Ooo000\no0Ooo00\no0Ooo00O\no0oOO0Oo\no0oOoOoo\no0Ooo00o\no0Ooo0\no0Ooo0O0\no0Ooo0O\n0o0Ooo0OO\no0oOOOoo\no0OoooO0\no0oOOO0o\no0Ooo0Oo\no0Ooo0o0\no0Ooo0o\no0Ooo0oO\no0Ooo0oo\no0Ooo\n00o0OooO00\n0o0OooO0O\n0o0OooO0o\n0o0OooO\n0o0OooOO0\n0o0OooOO\n0o0OooOOO\n0o0OooOOo\n0o0OooOo0\n0o0OooOoO\n0o0Oooo00\no0Oooo0\no0Oooo0o\no0Oooo\no0OoooO\no0OoooOO\no0OoooOo\no0Ooooo0\no0Ooooo\no0OooooO\n0o0Oooooo\no0o0000\no0o0o00O\no0o0000o\no0o000\no0o000O0\no0o000O\no0o000OO\no0o000Oo\no0o000o0\n0o0o000o\no0o000oO\no0o000oo\no0o00\no0o00O00\no0o00O0\no0o00O0O\no0o00O0o\no0o00O\no0o00OO0\n0o0o00OO\no0o00OOO\no0o00OOo\no0o00Oo0\no0o00Oo\no0o00OoO\no0o00Ooo\no0o00o00\no0o00o0\no0o00o0O\n0o0o00o0o\no0o00o\no0o00oO0\no0o00oO\no0o00oOO\no0o00oOo\no0o00oo0\no0o00oo\no0o00ooO\no0o00ooo\n0o0o0\no0o0O000\no0o0O00\no0o0O00O\no0o0O00o\no0o0O0\no0o0O0O0\no0o0O0O\no0o0Oo00\no0o0O0OO\n0o0o0O0Oo\no0o0O0o0\no0o0O0o\no0o0O0oO\no0o0O0oo\noO0Oo\noO0OO\no0ooo\no0o0O\no0o0OoO0\n0o0o0OO00\no0o0OO0\no0o0OO0O\no0o0OO0o\no0o0OO\no0o0OOO0\no0o0OOO\no0o0OOOO\no0o0OOOo\no0o0OOo0\n0o0o0OOo\no0o0OOoO\no0o0OOoo\no0o0Oo0\no0o0Oo0O\no0o0Oo0o\no0o0OoO\no0o0OoOO\no0o0OoOo\no0o0Ooo0\n000o0o0Ooo\n00o0o0OooO\n00o0o0Oooo\n00o0o0o000\n00o0o0o00\n00o0o0o00o\n00o0o0o0\n00o0o0o0O0\n00o0o0o0O\n00o0o0o0OO\n00o0o0o0Oo\n0o0o0o0o0\n0o0o0o0o\n0o0o0o0oO\n0o0o0o0oo\n0o0o0o\n0o0o0oO00\n0o0o0oO0\n0o0o0oO0O\n0o0o0oO0o\n00o0oo00\n0o0o0oO\n0o0o0oOO0\n0o0o0oOO\n0o0o0oOOO\n0o0o0oOOo\n0o0o0oOo0\n0o0o0oOo\n0o0o0oOoO\n0o0o0oOoo\n00o0o0oo00\n0o0o0oo0\n0o0o0oo0O\n0o0o0oo0o\n0o0o0oo\n0o0o0ooO0\n0o0o0ooO\n0o0o0ooOO\n0o0o0ooOo\n0o0o0ooo0\n00o0o0ooo\n0o0o0oooO\n0o0o0oooo\n0o0o\n0o0oO0000\n0ooooooO\n0o0oO000\n0o0oO000O\n0o0oO000o\n0o0oO00\n00o0oO00O0\n0o0oO00O\n0o0oO00Oo\n0o0oO00OO\n0o0oO00o0\n0o0oO00o\n0o0oO00oO\n0o0oO00oo\n0o0oO0\n0o0oO0O0\n00o0oO0O\n0o0oO0OO0\n0o0oO0OO\n0o0oO0OOO\n0o0oO0Oo\n0o0oO0OoO\n0o0oO0o00\n0o0oO0o0\n0o0oO0o0o\n0o0oO0o0O\n00o0oO0o\n0o0oO0oO0\n0o0oO0oO\n0o0oO0oOO\n0o0oO0oo0\n0o0oO0oo\n0o0oO0ooO\n0o0oO0ooo\n0o0oO\n0o0oOO000\n00o0oOO00\n0o0oOO00O\n0o0oOO00o\n0o0oOO0\n0o0oOO0O0\n0o0oOO0O\n0o0oOo0oO\n0o0oOo0oo\n0o0oOO0OO\n0o0oOO0o0\n00o0oOO0o\n0o0oOO0oO\n0o0oOO0oo\n0o0oOOO00\n0o0oOOO0\n0o0oOOO0O\n0o0oOOO\n0o0oOOOO0\n0o0oOOOO\n0o0oOOOOO\n00o0oOOOOo\n0o0oOOOo0\n0o0oOOOo\n0o0oOOOoO\n0o0oOOo00\n0o0oOOo0\n0o0oOOo0O\n0o0oOOo0o\n0o0oOOoO0\n0o0oOOoO\n0o0oOoO00\no0oOOoOO\no0oOooOO\no0oOOoOo\no0oOOoo0\no0oOOoo\no0oOOooO\no0oOOooo\no0oOo00\no0oOo00O\n0o0oOo00o\no0oOo0\no0oOo0O\no0oOo0OO\no0oOo0Oo\no0oOo0o\no0oOo\no0oOoO0\no0oOoO0o\no0oOoOo0\n0o0oOoO0O\no0oOoO\no0oOoOO0\no0oOoOO\no0oOoOOO\no0oOoOOo\no0oOoOo\no0oOoOoO\no0oOoo0\no0oOoo0O\n0o0oOoo0o\no0oOoo\no0oOooO\no0oOooOo\no0oOooo0\no0oOooo\no0oOoooO\no0oOoooo\no0oo0000\no0oo000O\n0o0oo000o\no0oo00O0\no0oo00O\no0oo00OO\no0oo00Oo\no0oo00o0\no0oo00o\no0oo00oO\no0oo00oo\no0oo0\n0o0oo0O00\no0oo0O0\no0oo0O0O\no0oo0O0o\no0oo0o\no0oo0O\no0oo0OO0\no0oo0OO\no0oo0OOO\no0oo0OOo\n0o0oo0Oo0\no0oo0Oo\no0oo0OoO\no0oo0Ooo\no0oo0o00\no0oo0o0\no0oo0o0O\no0oo0o0o\no0oo0oO0\no0oo0oO\n0o0oo0oOO\no0oo0oOo\no0oo0oo0\no0oo0oo\no0oo0ooO\no0oo0ooo\no0ooO000\no0ooO00\no0ooO00O\no0ooO00o\n0o0ooO0\no0ooO0O\no0ooO0OO\no0ooO0Oo\no0ooO0o0\no0ooO0o\no0ooO0oO\no0ooO0oo\no0ooOO0O\no0ooOO0o\n00o0ooOOO\n0o0ooOOoO\n0o0ooOo00\n0o0ooOo0\n0o0ooOo0o\n0o0ooOo0O\n0o0ooOo\n0o0ooOooO\n0o0ooOoO0\n0o0ooOoOo\n0o0ooOoo0\no0ooOoo\no0ooOooo\no0ooo000\no0ooo00O\no0ooo00o\no0ooo0\no0ooo0O\no0ooo0o0\no0ooo0o\n0o0ooo0oO\no0ooo0oo\no0oooO00\no0oooO0\no0oooO0o\no0oooO0O\no0oooO\no0oooOO0\no0oooOO\no0oooOOo\n0o0oooOOO\no0oooOo0\no0oooOo\no0oooOoO\no0oooo00\no0oooo0\no0oooo0O\no0oooo0o\no0oooo\no0ooooO0\n0o0ooooO\no0ooooOo\no0ooooo0\nooo0Oo0\no0ooooo\no0oooooO\no0oooooo\no\noO00000\noO00000o\n0oO0000\noO0000O\noO0000Oo\noO0000o0\noO0000o\noO0000oO\noO0000oo\noO000\noO000O0\noO000O0O\n0oO0Ooo00\noO0Ooooo\noO000O0o\noO0o0o\noO000O\noO0OoOO0\noO0OOooo\noO0OoOOO\noO0OOoO0\noO0Oo0oo\n0oO000OOO\noO0OO0oo\noO0OOooO\noO000OOo\noO0OoOoO\nooOOOOoo\noO0OOo0o\noO000Oo0\noO000Oo\noO0OO0OO\n0oO0OoOoo\noO0OOoo0\noO000OoO\noO0OOo0O\noO000Ooo\noO000o00\noO000o0\nooOOOOOo\noO000o0o\noO000o\n0oO0Oo0OO\noO000oO0\noO000oO\noO0Ooo0O\noO000oOO\noO0Ooo0o\noO000oOo\noO000oo0\noO000oo\noO0Oo0Oo\n00oO000ooO\n0oO0Oo0O0\n0oO000ooo\n0oO00\n0oO00O00\n0oO0O0o0o\n0ooOOoooO\n0oO00O00o\n0oO00O0\n0oO00O0O\n0oO00O0Oo\noO0O0OoO\nooOOooOo\noO00O0o0\noO00O0o\noOo00OO0\noO00O0oO\noO0O0OOo\noO00O0oo\noO00O\n0oO00OO0\nooOOoOoO\noO0O0OOO\noO00OO0O\noO00OO\noO00OOO\noO00OOOo\noOo00Oo0\nooOOoOOo\noO00OOo0\n0oO00OOo\noO0oOOO0\noO00OOoO\noOOoOoOO\noO00OOoo\noO00Oo00\noO00Oo0\noO00Oo0O\noO00Oo0o\noO00Oo\n0oO00oOOO\noO00OoO0\noO00OoO\noOOoOOO0\noO00OoOO\noO0oOOOo\noO00OoOo\noO00Ooo0\noO00Ooo\noO00OooO\n0oO00Oooo\noO0OOoOo\noO00o000\noO00o00\noO0OooOO\noO0OoOo0\noO0OOO00\noO00o00O\noO0OOoOO\noO00o00o\n0ooOO0O\nooOOo0\noO00o0\noO0OOOoo\noO00o0O0\noO00o0O\noO0OOOOo\noO00o0OO\noO0OOOoO\noO00o0Oo\n0oO0OoO0O\noO0OOO0o\noO00o0o0\noO00o0o\noO0OOOo0\noO00o0oO\noO0OOO0O\noO00o0oo\noO00o\noO0OO0oO\n0oO0OO000\noOo00o0o\noO00oO00\noO00oO0\noO0OoooO\noOo00ooO\noO00oO0O\noO0OooOo\noOo00ooo\noO00oO0o\n0oO00oO\noO00oOO0\noO00oOO\noO0OO00o\noO00oOOo\noOo00oO0\noO00oOo0\noO00oOo\noO0OO00O\nooOOOOoO\n00oOo00oOO\n0oO00oOoO\n0oOo00oOo\n0oO00oOoo\n0oO0OOOOO\n0oO00oo00\n0oO00oo0\n0oO0OO0o0\n0oO00oo0O\n0oO00oo0o\n0oO00oo\noO00ooO0\noO00ooO\noOo000Oo\noO00ooOO\noO00ooOo\noOo0000O\noO00ooo0\noO00ooo\noOo000oo\n0oO00oooO\noOo000o0\noO00oooo\noO0\noO0O000\noO0Oo00O\nooOOoOo0\noO0O000o\noO0O00\noO0O00O\n0oO0O00Oo\noO0O00o0\noO0O00o\noO0O00oO\noO0O00oo\noOoo0\noO0O0\noO0O0O00\noO0O0O0\nooOOOoO0\n0oO0O0O0O\nooOOOoo0\noO0O0O0o\noO0O0o\noO0O0O\noO0O0OO\noOo0oooO\nooOOOoOo\noO0O0Oo0\noO0O0Oo\n0oO0O0o0\noO0O0o0O\noO0O0oO0\noO0O0oO\noOo0o0oO\nooOOO0Oo\noO0O0oOO\noO0O0oOo\noOo00OOo\noO0O0oo0\n0oO0O0oo\noOo00OOO\nooOOO00O\noO0O0ooO\noO0O0ooo\nooo0o\noO0O\noO0OO00\noO0OO0O\noO0OO0Oo\n0oO0OO0o\noO0OOO0\noO0OOO\noO0OooO0\noO0OOOO0\noO0OOOO\noO0OOOo\noO0OOo0\noO0OOo\noO0OOoO\n0oO0OOoo\noO0Oo00\noO0Oo0\noO0Oo0O\noO0Oo0o0\noO0Oo0o\noO0OoO00\noO0OoO0\noO0OoO\noO0OoOO\n0oO0OoOo\noO0Ooo0\noO0Ooo\noO0OooO\noO0Oooo\noO0o0000\noO0o000\noO0o000O\nooOOoOoo\noO0o000o\n00oO0o00\n0oO0o0oo0\n0oO0o00O0\n0oO0o00O\n0oO0o00OO\n0oO0o00Oo\n0oO0o00o0\n0oO0o00o\n0oO0o00oO\n0oO0o00oo\n0oO0o0\noO0o0O00\noO0o0O0\noO0o0O0O\noO0o0O0o\noO0o0O\noO0o0OO0\noO0o0OO\noO0o0OOO\noO0o0OOo\n0oO0o0Oo0\noO0o0Oo\noO0o0OoO\noO0o0Ooo\noO0o0o00\noO0o0o0\noO0o0o0O\noO0o0o0o\noO0o0oO0\noO0o0oO\n0oO0o0oOO\noO0o0oOo\noO0o0oo\noO0o0ooO\noO0o0ooo\noO0o\noO0oO000\noO0oO00\noOo00O0O\nooOOoOO0\n0oO0oO00O\noO0oO00o\noO0oO0\noO0oO0O0\noO0oO0O\noO0oO0OO\noOo00OoO\nooOOoOOO\noO0oO0Oo\noO0oO0o0\n0oO0oO0o\noO0oO0oO\noO0oO0oo\noOooo\noO0oO\noO0oOoOO\noO0oOO00\noO0oOO0\noO0oOO0O\noO0oOO0o\n0oO0oOO\noO0oOOO\noO0oOOOO\noO0oOOo0\noO0oOOo\noO0oOOoO\noO0oOOoo\noO0oOo00\noO0oOo0\noO0oOo0O\n0oO0oOo0o\noO0oOo\noO0oOoO0\noO0oOoO\noO0oOooo\noO0oOoOo\noO0oOoo0\noO0oOoo\noO0oOooO\noO0oo000\n0oO0oo00\noO0oo00O\noO0oo00o\noO0oo0\noO0oo0O0\noO0oo0O\noO0oo0OO\noO0oo0Oo\noO0oo0o0\noO0oo0o\n0oO0oo0oO\noO0oo0oo\noO0oo\noO0ooO00\noO0ooO0\noO0ooO0O\noO0ooO0o\noO0ooO\noO0ooOO0\noO0ooOO\n00oO0ooOOO\n0oO0ooOOo\n0oO0ooOo0\n0oO0ooOo\n0oO0ooOoO\n0oO0ooOoo\n0oO0ooo00\n0oO0ooo0\n0oO0ooo0O\n0oO0ooo0o\n0oO0ooo\noOo00o0O\noO0oooO0\noO0oooO\noO0oooOO\noOo00oo0\noO0oooOo\noOo000OO\noO0oooo0\noO0oooo\n0oO0ooooO\noOo00o00\noO0ooooo\noO\noOO00000\noOO0000\noOO0000O\noOO0000o\noOO000\noOO000O0\n0oOO000O\noOO000OO\noOO000Oo\noOO000o0\noOO000o\noOO000oO\noOO000oo\noOO00\noOO00O00\noOO00O0\n0ooooOO00\noOO00O0O\noOO00O0o\noOO00OO0\noOO00OO\noOO00OOO\noOO00OOo\noOO00Oo0\noOO00Oo\nooooO000\n0oOO00OoO\nooooOoOo\noOO00Ooo\noOO00o00\noOO00o0\noOO00ooo\noOO00o0O\noOO00o0o\noOO00o\noOO00oO0\n0oOO00oO\nooooOOo0\nooooO0oo\noOO00oOO\noOO00oOo\noOO00oo\noOO00ooO\noOO0\nooooOoOO\noOO0O000\n0oOO0O00\noOO0O00O\noOO0O00o\noOO0O0\noOO0O0O0\noOO0O0O\noOO0O0OO\noOO0O0Oo\noOO0O0o0\noOO0O0o\n0oOO0O0oO\noOO0O0oo\noOO0O\noOO0OO0\noOO0OO0O\noOO0OO0o\noOO0OO\noOO0OOO\noOO0OOOO\noOO0OOOo\n0oOO0OOo0\noOO0OOo\noOO0OOoO\noOO0OOoo\noOO0Oo00\noOO0Oo0\noOO0Oo0O\noOO0Oo0o\noOO0Oo\noOO0OoO0\n00oOO0OoO\n0oOO0OoOO\n0oOO0OoOo\n0oOO0Ooo0\n0oOO0Ooo\n0oOO0OooO\n0oOO0Oooo\n0oOO0o00\n0ooooOOoo\n0oOO0o00o\n0oOO0o0\noOO0o0O0\noOO0o0O\noOO0o0OO\noOO0o0Oo\nooooO0O0\noOO0o0o0\noOO0o0o\noOO0o0oO\noOO0o0oo\n0oOO0o\noOO0oO00\noOO0oO0\noOO0oO0O\noOO0oO0o\noOO0oO\noOO0oOO0\noOO0oOO\noOO0oOOO\noOO0oOOo\n0oOO0oOo0\noOO0oOo\noOO0oOoO\noOO0oOoo\noOO0oo00\noOO0oo0\noOO0oo0O\noOO0oo0o\noOO0oo\noOO0ooO0\n0oOO0ooO\noOO0ooOO\noOO0ooOo\noOO0ooo0\noOO0ooo\noOO0oooO\noOO0oooo\noOO\noOOO000\noOOO000o\n0oOOO0O\noOOOoO\noOOO00\noOOO00O\noOOO00Oo\noOOO00o0\noOOO00o\noOOO00oO\noOOO00oo\noOOO0\n0oOOO0oOO\noOOO0O0\noOOO0O0o\noOOO0OO0\noOOO0OO\noOOO0OOO\noOOO0OOo\noOOO0Oo\noOOO0OoO\noOOO0Ooo\n0oOOO0o00\noOOO0o0\noOOO0o0O\noOOO0o0o\noOOOOO\noOOO0o\noOOO0oO0\noOOO0oO\noOOO0ooo\noOOO0ooO\n0oOOO0oOo\noOOO0oo0\noOOO0oo\noOOO\noOOOO0OO\noOOOO000\noOOOO00\noOOOoo00\noOOOO00O\noOOOO00o\n0oOOOO0\noOOOO0O0\noOOOO0O\noOOOO0Oo\noOOOO0o0\noOOOO0o\noOOOO0oO\noOOOO0oo\noOo0o\noOOOO\n00oOOOOO00\n0oOOOOO0\n0oOOOOO0O\n0oOOOOO0o\n0oOOOOOO0\n0oOOOOOO\n0oOOOOOOO\n0oOOOOOOo\n0oOOOOOo0\n0oOOOOOo\n0oOOOOOoO\noOOOOOoo\noOOOOo00\noOOOOo0\noOOOOo0O\noOOOOo0o\noOOOOo\noOOOOoO0\noOOOOoO\noOOOOoOO\n0oOOOOoOo\noOOOOoo0\noOOOOoo\noOOOOooO\noOOOOooo\noOOOo000\noOOOo00\noOOOo00O\noOOOo00o\noOOOo0\n0oOOOo0O0\noOOOo0O\noOOOo0OO\noOOOo0Oo\noOOOo0o0\noOOOo0o\noOOOo0oO\noOOOo0oo\noOOOo\noOOOoO00\n0oOOOoO0\noOOOoO0O\noOOOoO0o\noOOOoOO0\noOOOoOO\noOOOoOOO\noOOOoOOo\noOOOoOo0\noOOOoOo\noOOOoOoO\n0oOOOoOoo\noOOOoo0\noOOOoo0O\noOOOoo0o\noOOOoo\noOOOooO0\noOOOooO\noOOOooOO\noOOOooOo\noOOOooo0\n0oOOOooo\noOOOoooO\noOOOoooo\noOOo0000\noOOo000\noOOo000O\noOOo000o\noOOo00\noOOo00O0\noOOo00O\n0oOOo00OO\noOOo00Oo\noOOo00o0\noOOo00o\noOOo00oO\noOOo00oo\noOOo0\noOOo0O00\noOOo0O0\noOOo0O0O\n0oOOo0O0o\noOOo0O\noOOo0OO0\noOOo0OO\noOOo0OOO\noOOo0OOo\noOOo0Oo0\noOOo0Oo\noOOo0OoO\noOOo0Ooo\n0oOOo0o00\noOOo0o0\noOOo0o0O\noOOo0o0o\noOOo0o\noOOo0oO0\noOOo0oO\noOOo0oOO\noOOo0oOo\noOOo0oo0\n00oOOo0oo\n0oOOo0ooO\n0oOOo0ooo\n0oOOo\n0oOOoO000\n0oOOoO00\n0oOOoO00O\n0oOOoO00o\n0oOOoO0\n0oooO0oOO\n0oOOoO0O0\noOOoO0O\noOOoO0OO\noOOoO0Oo\noOOoO0o\noOOoO0oO\noOOoO0oo\noOOoO\noOOoOO0o\noOOoOO00\n0oOOoOO0\noOOoOO0O\noOOoOOO\noOOoOOOO\noOOoOOOo\noOOoOOo0\noOOoOOo\noOOoOOoO\noOOoOOoo\noOOoOo00\n0oOOoOo0\noOOoOo0O\noOOoOo0o\noOOoOo\noOOoOoO0\noOOoOoO\noOOoOoOo\noOOoOoo0\noOOoOoo\noOOoOooO\n0oOOoOooo\noOOoo000\noOOoo00\noOOoo00O\noOOoo00o\noOOoo0\noOOoo0O0\noOOoo0O\noOOoo0OO\noOOoo0Oo\n0oOOoo0o0\noOOoo0o\noOOoo0oO\noOOoo0oo\noOOoo\noOOooO00\noOOooO0\noOOooO0O\noOOooO0o\noOOooO\n0oOOooOO0\noOOooOO\noOOooOOO\noOOooOOo\noOOooOo0\noOOooOo\noOOooOoO\noOOooOoo\noOOooo00\noOOooo0\n0oOOooo0O\noOOooo0o\noOOooo\noOOoooO0\noOOoooO\noOOoooOO\noOOoooOo\noOOoooo0\noOOoooo\noOOooooO\n0oOOooooo\noOo0000\noOo000\noOo000O\noOo000o\noOo00O0\noOo00O\noOo00OO\noOo0o00\noOo00Oo\n0oOo00o0\noOo00o\noOo00oO\noOo00oo\noOo0\noOo0O000\noOo0O00\noOo0O00O\noOo0oO0o\noOo0O00o\n000oOo0oo\n00oOo0O0\n00oOo0O0O0\n00oOo0O0O\n00oOo0O0OO\n00oOo0O0Oo\n00oOo0O0o0\n00oOo0O0o\n00oOo0O0oO\n00oOo0O0oo\n00oOo0O\n0oOo0OO00\n0oOoo00o\n0oOo0OO0\n0oOo0OO0O\n0oOo0OO0o\n0oOo0OO\n0oOo0OOO0\n0oOo0OOO\n0oOo0OOOO\n00oOo0OOOo\n0oOo0OOo0\n0oOo0OOo\n0oOo0OOoO\n0oOo0OOoo\n0oOo0Oo00\n0oOo0Oo0\n0oOo0Oo0O\n0oOo0Oo0o\n0oOo0Oo\n00oOo0OoO0\n0oOo0OoO\n0oOo0OoOO\n0oOo0OoOo\n0oOo0Ooo0\n0oOo0Ooo\n0oOo0OooO\n0oOo0Oooo\n0oOo0o000\n0oOo0o00O\n00oOo0o00o\n0oOo0o0\n0oOo0o0O\n0oOo0o0OO\n0oOo0o0Oo\n0oOo0o0o0\n0oOo0o0o\n0oOo0oO00\n0oOo0oO0\n0oOo0oO0O\n00oOo0oO\n0oOo0oOO0\n0oOo0oOO\n0oOo0oOOO\n0oOo0oOOo\n0oOo0oOo0\n0oOo0oOo\n0oOo0oOoO\n0oOo0oOoo\n0oOo0oo00\n00oOo0oo0\n0oOo0oo0O\n0oOo0ooO0\n0oOo0ooO\n0oOo0ooOO\n0oOo0ooOo\n0oOo0ooo0\n0oOo0ooo\n0oOo\n0oOooOOoO\n00oOoO0000\n0oOoO000\n0oOoO000O\n0oOoO000o\n0oOoO00\n0oOoO00O0\n0oOoO00O\n0oOoO00OO\n0oOoO00Oo\n0oOoO00o0\n00oOoO00o\n0oOoO00oO\n0oOoO00oo\n0oOoO0\n0oOooOo0O\n0oOoO0O00\n0oOoO0O0\n0oOoO0O0O\n0oOoO0O0o\n0oOoO0o\n00oOoO0O\n0oOoO0OO0\n0oOoO0OO\n0oOoO0OOO\n0oOoO0OOo\n0oOoO0Oo0\n0oOoO0Oo\n0oOoO0OoO\n0oOoO0Ooo\n0oOooOo00\n00oOoO0o00\n0oOoO0o0\n0oOoO0o0O\n0oOoOoOOO\n0oOoO0o0o\n0oOoO0oO0\n0oOoO0oO\n0oOoO0oOO\n0oOoO0oOo\n0oOooOo0o\n0oOoO0oo0\noOoO0oo\noOoO0ooO\noOoO0ooo\noOoO\noOoOO000\noOoOO00\noOoOO00O\noOoOO00o\noOoOO0\n0oOoOO0O0\noOoOO0O\noOoOOo0O\noOoOO0OO\noOoOO0Oo\noOoOO0o0\noOoOO0o\noOoOO0oO\noOooOOOO\noOoOO0oo\n0oOoOO\noOoOOO00\noOoOOO0\noOoOOO0O\noOoOOO0o\noOoOOO\noOoOOOO0\noOoOOOO\noOoOOOOO\noOoOOOOo\n0oOoOOOo0\noOoOOOo\noOoOOOoO\noOooOooO\noOoOOOoo\noOoOOo00\noOoOOo0\noOoOOo0o\noOoOOo\noOoOOoO0\n0oOoOOoO\noOoOOoOO\noOoOOoOo\noOoOOoo0\noOoOOoo\noOoOOooO\noOoOOooo\noOoOo000\noOoOo00\noOoOo00O\n0oOoOo00o\noOoOo0\noOoOoo0O\noOoOo0O0\noOoOo0O\nooOOO0oo\noOooo0Oo\noOooo0oo\noOoOo0OO\nooOOO0o0\n0oOoOo0Oo\noOoOo0o0\noOoOo0o\noOoOo0oO\noOoOo0oo\noOoOo\nooOOOooo\noOoOoO00\noOoOoO0\noOoOoO0O\n0ooOOOooO\noOooooOO\noOoOoO0o\noOoOoO\noOoOoOO0\noOoOoOO\noOoOoOOo\noOoOoOo0\noOoOoOo\noOooOOoo\n0oOoOoOoO\noOoOoOoo\nooOOO0oO\noOooo0oO\noOoOoo00\noOoOoo0\nooOOO0O0\noOooo0O0\noOoOoo0o\noOoOoo\n00ooOOOo0o\n0oOoooooo\n0oOoOooO0\n0oOoOooO\n0oOoOooOO\n0ooOOOo0O\n0oOoooooO\n0oOoOooOo\n0oOoOooo0\n0oOoOooo\n0ooOOOo00\noOooooo0\noOoOoooO\noOoOoooo\noOoo0000\noOoo000\noOoo000O\noOoo000o\noOoo00\noOoo00O0\n0oOoo00O\noOoo00OO\noOoo00Oo\noOoo00o0\noOoo00oO\noOoo00oo\noOoo0Oo0\noOoo0O00\noOoo0O0\noOoo0O0O\n0oOoo0O0o\noOoo0O\noOoo0OO0\noOoo0oO\noOooo00\noOoo0OO\noOoo0OOO\noOoo0OOo\noOoo0Oo\noOoo0OoO\n0oOoo0Ooo\noOoo0o00\noOoo0o0\noOoo0o0O\noOoo0o0o\noOoo0o\noOoo0oO0\noOoo0oOO\noOoo0oOo\noOoo0oo0\n0oOoo0oo\noOoo0ooO\noOoo0ooo\noOoo\noOooO000\noOooO00\noOooO00O\noOooO00o\noOooO0\noOooO0O0\n0oOooO0O\noOooO0OO\noOooO0Oo\noOooO0o0\noOooO0o\noOooO0oO\noOooO0oo\noOooO\noOooOO00\noOooOO0\n0oOooOOo0\noOooOO0O\noOooOO0o\noOooOO\noOooOOO0\noOooOOO\noOooOOOo\noOooOOo\noOooOo0\noOooOo\n0oOooOoO0\noOooOoO\noOooOoOO\noOooOoOo\noOooOoo0\noOooOoo\noOooOooo\noOooo000\noOooo00O\noOooo00o\n0oOoooO\noOooo0\noOooo0O\noOooo0OO\noOooo0o0\noOoooO00\noOoooO0\noOoooO0O\noOoooO0o\noOoooOO0\n00oOoooOO\n0oOoooOOO\n0oOoooOOo\n0oOoooOo0\n0oOoooOo\n0oOoooOoO\n0oOoooOoo\n0oOoooo00\n0oOoooo0\n0oOoooo0O\n0oOoooo0o\noOoooo\noOooooO0\noOooooO\noOooooOo\noOooooo\noo000000\noo00000\noo00000O\noo00000o\n0oo0000\noo0000O0\noo0000O\noo0000OO\noo0000Oo\noo0000o0\noo0000o\noo0000oO\noo0000oo\noo000\n0oo000O00\noo000O0\noo000O0O\noo000O0o\noo000O\noo000OO0\noo0OOOO\noo000OO\noo000OOO\noo000OOo\n0oo000Oo0\noo000Oo\noo000OoO\noo000Ooo\noo000o00\noo000o0\noo000o0O\noo000o0o\noo000oO0\noo000oO\n0oo000oOO\noo000oOo\noo000oo0\noo000oo\noo000ooO\noo00\noo00O00o\noo00O000\noo00O00\noo00O00O\n0oo00O0\noo00O0O0\noo00O0O\noo00Oo0O\noo00O0OO\noo00O0Oo\noo00O0o0\noo00O0o\noo00O0oO\noo00O0oo\n0oo00O\noo00OO00\noo00OO0\noo00OO0O\noo00OO0o\noo00OO\noo00OOO0\noo00OOO\noo00OOOO\noo00OOOo\n0oo00OOo0\noo00OOo\noo00OOoO\noo00OOoo\noo00Oo00\noo00Oo0\noo00Oo0o\noo00Oo\noo00OoO0\noo00OoO\n0oo00OoOO\noo00OoOo\noo00Ooo0\noo00Ooo\noo00OooO\noo00Oooo\noo00o000\noo00o00\noo00o0o0\noo00o00O\n00oo00o00o\n0oo00o0\n0oo00o0oo\n0oo00ooOO\n0oo00o0O0\n0oo00o0O\n0oo00o0OO\n0oo00o0Oo\n0oo00o0o\n0oo00o0oO\n0oo00oO00\noo00oO0\noo00oO0O\noo00oO0o\noo00oOoO\noo00oOO0\noo00oOo\noo00oOO\noo00oOOO\noo00oOOo\n0oo00oOo0\noo00oOoo\noo00oo00\noo00oo0\noo00oo0O\noo00oo0o\noo00oo\noo00ooO0\noo00ooO\noo00ooOo\n0oo00ooo0\noo00ooo\noo00oooO\noo00oooo\noo0\noo0O0000\noo0O000\noo0O000O\noo0O000o\noo0O00\n0oo0oOOOO\noo0O00O0\noo0O00O\noo0O00OO\noo0O00Oo\noo0O00o0\noo0O00o\noo0O00oO\noo0O00oo\noo0O0\n0oo0O0O00\noo0O0O0\noo0O0O0O\noo0O0O0o\noo0O0O\noo0O0OO0\noo0O0OO\noo0O0OOO\noo0O0OOo\noo0O0Oo0\n0oo0O0Oo\noo0O0OoO\noo0O0Ooo\noo0O0o00\noo0O0o0\noo0O0o0O\noo0O0o0o\noo0O0o\noo0O0oO0\nooo0OoO\n0oo0O0oO\noo0oOOoO\noo0O0oOO\noo0O0oOo\noo0O0oo0\noo0O0oo\noo0O0ooO\noo0O0ooo\noo0OoOO0\noo0OO00o\n0oo0OO00O\noo0OO000\noo0OO00\noo0Oo0\noo0Ooo\noo0OoO\noo0OO0\noo0OOoOO\noo0OO0Oo\noo0OOo0O\n0oo0OOooO\noo0OO0O0\noo0OO0O\noo0OO0OO\noo0OO0o0\noo0OO0o\noo0OO0oO\noo0OO0oo\noo0OO\noo0OOO00\n00oo0oOoo\n0oo0OOO0\n0oo0OOO0O\n0ooo000O0\n0oo0OOO0o\n0oo0OOO\n0ooo000o0\n0oo0OOOO0\n0oo0OOOOO\n0oo0OOOOo\n0oo0OOOo0\noo0OOOo\noo0OOOoO\nooo0000O\nooo00000\noo0OOOoo\noo0OOo00\noo0OOo0\noo0OOo0o\noo0OOo\n0oo0OOoO0\noo0OOoO\noo0OOoOo\noo0OOoo0\noo0OOooo\noo0Oo000\noo0Oo00\noo0Oo00O\noo0Oo00o\noo0Oo0O0\n0oo0Oo0O\noo0Oo0OO\noo0Oo0Oo\noo0Oo0o0\noo0Oo0o\noo0Oo0oO\noo0Oo0oo\noo0Oo\noo0OoO00\noo0OoO0\n0oo0OoO0O\noo0OoO0o\noo0OoOO\noo0OoOOO\noo0OoOOo\noo0OoOo0\noo0OoOo\noo0OoOoO\noo0OoOoo\noo0Ooo00\n0oo0Ooo0\noo0Ooo0O\noo0Ooo0o\noo0OooO\noo0OooOO\noo0OooOo\noo0Oooo0\noo0Oooo\noo0OoooO\n0oo0Ooooo\noo0o0000\noo0o000\noo0o000O\noo0o000o\noo0o00\noo0o00O0\noo0o00o\noo0o00O\noo0o00Oo\n0oo0o00oO\noo0o00OO\noo0o00o0\noo0o00oo\noo0o0\noo0o0O00\noo0o0O0o\noo0o0o\noo0o0O\noo0o0OO0\n0oo0o0OO\noo0o0OOO\noo0o0OOo\noo0o0Oo0\noo0o0OoO\noo0o0Ooo\noo0o0o00\noo0o0o0\noo0o0o0O\noo0o0o0o\n0oo0o0oO0\noo0o0oO\noo0o0oOO\noo0o0oOo\noo0o0oo0\noo0o0oo\noo0o0ooO\noo0o0ooo\noo0o\noo0oO000\n00oo0oO00\n0oo0oO0oO\n0oo0oO00O\n0oo0oO00o\n0oo0oO0O0\n0oo0oO0O\n0oo0oO0OO\n0oo0oO0Oo\n0oo0oO0o0\n0oo0oO0o\n0oo0oO0oo\noo0oO\noo0oOO00\noo0oOO0O\noo0oOO0o\noo0oOO\noo0oOOO0\noo0oOOO\noo0oOOOo\noo0oOOo0\n0oo0oOOoo\noo0oOo00\noo0oOo0\noo0oOo0O\noo0oOo0o\noo0oOo\noo0oOoO0\noo0oOoOO\noo0oOoOo\noo0oOoo0\n0oo0oOooO\noo0oOooo\noo0oo000\nooo0oOO\noooOooO\noo0oo00\noo0oo00O\noo0oo00o\noo0oo0\noo0oo0O0\n0oo0oo0O\noo0oo0OO\noo0oo0Oo\noo0oo0o0\noo0oo0o\noo0oo0oO\noo0oo0oo\noo0oo\noo0ooO00\noo0ooO0\n0oo0ooO0O\noo0ooO0o\noo0ooOO0\noo0ooOO\nooo0O0oo\nooo0oooO\noo0ooOOO\noo0ooOOo\noo0ooOo0\noo0ooOo\n0oo0ooOoO\noo0ooOoo\noo0ooo00\noo0ooo0\noo0ooo0o\noo0ooo0O\noo0ooo\noo0oooOO\noo0oooO0\noo0oooO\n0oo0oooOo\noo0oooo0\noo0oooo\noo0ooooO\noo0ooooo\noo\nooO00000\noooooOo\nooO0000\nooO0000O\n0ooOooOOO\nooO0000o\nooO0oo\nooO000\nooO000O0\nooO000O\nooO000OO\nooO000Oo\nooO000o0\nooO000o\n0ooO000oO\nooO000oo\nooO00\nooO0OOoo\nooOo000o\nooOo00O0\nooO00O00\nooO00O0O\nooO0OOoO\nooO00O0o\n00ooO00O\n0ooOo00o0\n0ooO00OO0\n0ooO00OO\n0ooO0OOOO\n0ooO00OOO\n0ooO00OOo\n0ooO00Oo0\n0ooO00Oo\n0ooO00OoO\n0ooOo00OO\nooO00Ooo\nooO00o00\nooO00o0\nooO00o0O\nooO00o0o\nooO00o\nooO00oO0\nooO00oO\nooO00oOO\n0ooO00oOo\nooO00oo0\nooO00oo\nooO00ooO\nooO00ooo\nooO0\nooO0O000\noooo000\nooO0O00\nooO0O00O\n0ooO0O00o\nooO0O0\nooO0O0O0\nooO0O0O\nooO0O0OO\nooO0O0Oo\nooO0O0o0\nooO0OOO\nooO0O0o\nooO0O0oO\n0ooO0O0oo\nooO0O\nooOo000O\nooO0OO00\nooO0OO0\nooO0OO0O\nooO0OO0o\nooO0OO\nooO0OOO0\nooO0OOOo\n0ooO0OOo0\nooO0OOo\nooO0Oo00\nooo0oOo\nooO0Oo0\nooO0Oo0O\nooO0Oo0o\nooO0Oo\nooO0OoO0\nooO0OoO\n0ooO0OoOO\nooO0OoOo\nooO0Ooo0\nooO0OooO\nooO0Oooo\nooO0o000\nooO0o00\nooO0o00O\nooO0o00o\nooO0o0\n0ooO0o0O0\nooO0o0O\nooO0o0OO\nooO0o0Oo\nooO0o0o0\nooO0o0o\nooO0o0oO\nooO0o0oo\nooO0o\nooO0oO00\n0ooO0oO0\nooO0oO0O\nooOo00Oo\nooO0oO0o\nooO0oO\nooO0oOO0\nooO0oOO\nooO0oOOO\nooO0oOOo\nooO0oOo0\n0ooo0OOo\nooO0oOo\nooO0oOoO\nooO0oOoo\nooO0oo00\nooO0oo0\nooO0oo0O\nooO0oo0o\nooO0ooO0\nooO0ooO\n00ooO0ooOO\n0ooO0ooOo\n0ooO0ooo0\n0ooO0ooo\n0ooO0oooO\n0ooO0oooo\n0ooo\n0ooO\n0ooOO0000\n0ooOO000\n0ooOO000O\nooOO000o\nooOO00\nooOO00O0\nooOO00O\nooOO00OO\nooOO00Oo\nooOO00o0\nooOO00o\nooOO00oO\n0ooOO00oo\nooOO0\nooOO0O00\nooOO0O0\nooOO0O0O\nooOO0O0o\nooOO0OO0\nooOO0OO\nooOO0OOO\nooOOo0OO\n0ooOO0OOo\nooOO0Oo0\nooOO0Oo\nooOO0OoO\nooOO0Ooo\nooOO0o00\nooOO0o0\nooOO0o0O\nooOO0o0o\nooOO0o\n0ooOO0oO0\nooOO0oO\nooOO0oOO\nooOO0oOo\nooOO0oo0\nooOO0oo\nooOO0ooO\nooOO0ooo\nooOOO00\nooOOoO\n0ooOOO0\nooOOO0O\nooOOO0o\nooOOO\nooOOOO00\nooOOOO0\nooOOOO0O\nooOOOO0o\nooOOOO\nooOOOOO0\n0ooOOOOO\nooOOOOOO\nooOOOOo\nooOOOo0\nooOOOo\nooOOOoO\nooOOOoo\nooOOo000\nooOOo00O\nooOOo00o\n0ooOOo0O0\nooOOo0O\nooOOo0Oo\nooOOo0o0\nooOOo0o\nooOOo0oO\nooOOo0oo\nooOOo\nooOOoO0\nooOOoO0O\n0ooOOoO0o\nooOOoOo\nooOOoo00\nooOOoo0\nooOOoo0O\nooOOoo0o\nooOOoo\nooOOooO0\nooOOooO\nooOOooOO\n0ooOOooo0\nooOOooo\nooOOoooo\nooOo0000\nooOo000\nooOo00\nooOo00oO\nooOo00oo\nooOo0\nooOo0O00\n00ooOo0o0\n0ooOo0O0\n0ooOo0oOo\n0ooOo0O0O\n0ooOo0O0o\n0ooOo0O\n0ooOo0OO0\n0ooOo0OO\n0ooOoOo0o\n0ooOooOOo\n0ooOo0OOO\nooOo0OOo\nooOo0Oo0\nooOo0Oo\nooOo0OoO\nooOo0Ooo\nooOo0o00\nooOo0o0O\nooOo0o0o\nooOo0o\n0ooOo0oO0\nooOo0oO\nooOo0oOO\nooOo0oo0\nooOo0oo\nooOo0ooO\nooOo0ooo\nooOoO000\nooOoO00\nooOoO00O\n0ooOoO00o\nooOoO0\nooOoO0O0\nooOoO0O\nooOoO0OO\nooOoO0Oo\nooOoO0o0\nooOoO0o\nooOoO0oO\nooOoO0oo\n0ooOoO\nooOoOoOO\nooOoOO00\nooOoOO0\nooOoOOOo\nooOoOO0O\nooOoOO0o\nooOoOO\nooOoOOO0\nooOoOOO\n0ooOoOOOO\nooOoOOo0\nooOoOOo\nooOoOOoO\nooOoOOoo\nooOoOo00\nooOoOo0\nooOoOo0O\nooOoOo\nooOoOoO0\n0ooOoOoO\nooOoOoOo\nooOoOoo0\nooOoOoo\nooOoOooO\nooOoOooo\nooOoo000\nooOoo00\nooOooo0o\nooOoo00O\n0ooOoo00o\nooOoo0\nooOoo0O0\nooOoo0O\nooOoo0OO\nooOoo0Oo\nooOoo0o0\nooOoo0o\nooOoo0oo\nooOoo0oO\n0ooooO\nooOoo\nooOooO00\nooOooO0\nooOooO0O\nooOooO0o\nooOooo\nooOooO\nooOooOO0\nooOooOO\n0ooOooOo0\nooOooOo\nooOooOoO\nooOooOoo\nooOooo00\nooOooo0\nooOooo0O\nooOoooO0\nooOoooO\nooOoooOO\n000ooOoooOo\n00ooOoooo0\n00ooOoooo\n00ooOooooO\n00ooOooooo\n00ooo0000\n00ooo000oo\n00ooo0000o\n00ooo000\n00ooo000O\n00ooo000OO\n0ooo000Oo\n0ooo000o\n0ooo000oO\n0ooo00\n0ooo00O00\n0ooo00oO0\n0ooo00O0O\n0ooo00O0o\n0ooo00O\n00ooo00Oo0\n0ooo00OO0\n0ooo00OO\n0ooo00OOO\n0ooo00OOo\n0ooo00Oo\n0ooo00OoO\n0ooo00Ooo\n0ooo00o00\n0ooo00o0\n00ooo00o0O\n0ooo00o0o\n0ooo00o\n0ooo00oO\n0ooo00oOO\n0ooo00oOo\n0ooo00oo0\n0ooo00oo\n0ooo00ooO\n0ooo00ooo\n00ooo0\n0ooo0O000\n0ooo0O00\n0ooo0O00O\n0ooo0O00o\n0ooo0oo\n0ooo0o0\n0ooo0oO\n0ooo0O0\n0ooo0O0O0\n00ooo0O0O\n0ooo0O0OO\n0ooo0O0Oo\n0ooo0O0o0\n0ooo0O0o\n0ooo0O0oO\n0ooo0O\n0ooo0OO00\n0ooo0OO0\n0ooo0OO0O\n00ooo0OO0o\n0ooo0Oo\n0ooo0OO\n0ooo0OOO0\n0ooo0OOO\n0oooo00oo\n0ooo0OOoO\n0ooo0OOOO\n0ooo0OOOo\n0ooo0OOo0\n00ooo0OOoo\n0ooo0Oo00\n0ooo0Oo0O\n0ooo0Oo0o\n0ooo0OoO0\n0ooo0OoOO\n0ooo0OoOo\n0ooo0Ooo0\n0ooo0OooO\n0ooo0Oooo\n00ooo0o000\n0ooo0o00\n0ooo0o00O\n0ooo0o00o\n0ooo0o0OO\n0ooo0o0O0\n0ooo0o0O\n0ooo0o0Oo\n0ooo0o0o0\n0ooo0o0o\n00ooo0o0oO\n0ooo0o0oo\n0ooo0oO00\n0ooo0oO0\n0ooo0oO0O\n0ooo0oO0o\n0ooo0oOO0\n0ooo0oOOO\n0ooo0oOOo\n0ooo0oOo0\n00ooo0oOoO\n0ooo0oOoo\n0ooo0oo00\n0ooo0oo0\n0ooo0oo0O\n0ooo0oo0o\n0ooo0ooO0\n0ooo0ooO\n0ooo0ooOO\n0ooo0ooOo\n0ooo0ooo0\nooo0oooo\noooO0oo0\noooO0000\noooO000\noooO00o0\noooO000O\noooO0ooo\noooO000o\nooooo0\n0oooooo\nooooOo\noooO00\noooO00O0\noooO00O\noooO00Oo\noooO00OO\noooO00o\nooooOOOo\nooooOOOO\n0ooooOo00\noooO0oO0\noooO00oO\noooO00oo\noooO0\noooO0O00\noooO0O0\noooO0O0O\noooO0O0o\noooO0O\n0oooOOo0O\noooO0OO0\noooO0OO\noooO0OOO\noooO0OOo\noooO0Oo0\noooO0Oo\noooO0OoO\noooO0Ooo\noooO0o00\n0oooO0o0\noooO0o0O\noooO0o0o\noooooO\noooO0o\noooO0oO\noooO0oo\noooO0ooO\noooO\noooOooOO\n0oooOO000\noooOO00\noooOO0o0\noooOO00O\noooOO00o\noooOO0O0\noooOO0O\noooOO0OO\noooOO0Oo\noooOO0o\n0oooOO0oO\noooOO0oo\noooOO\noooOOO00\noooOOO0\noooOOO0O\noooOOO0o\noooOOO\noooOOOO0\noooOOOO\n0oooOOOOO\noooOOOOo\noooOOOo0\noooOOOo\noooOOOoO\noooOOOoo\noooOOo00\noooOOo0\noooOOo0o\noooOOo\n0oooOOoO0\noooOOoO\noooOOoOO\noooOOoOo\noooOOoo0\noooOOoo\noooOOooO\noooOOooo\noooOo000\noooOo00\n00oooOo00O\n0oooOo00o\n0oooOo0\n0oooOo0oo\n0oooOo0O0\n0oooOo0O\n0oooOo0OO\n0oooOo0Oo\n0oooOo0o0\n0oooOo0o\n0oooOo0oO\noooOo\noooOoO00\noooOoO0\noooOoO0O\noooOoO0o\noooOoOOO\noooOoOO0\noooOoOO\noooOoOOo\n0oooOoOo0\noooOoOo\noooOoOoO\noooOoOoo\noooOoo00\noooOoo0\noooOoo0O\noooOoo0o\noooOooO0\noooOooOo\n0oooOooo0\noooOooo\noooOoooO\noooOoooo\noooo0000\noooo000O\noooo000o\noooo00\noooo00o0\noooo00O0\n0oooo00O\noooo00OO\noooo00Oo\noooo00oO\noooo0\noooo0O00\noooo0O0\noooo0O0O\noooo0O0o\noooo0O\n0oooo0OO0\noooo0OO\noooo0OOO\noooo0OOo\noooo0Oo0\noooo0Oo\noooo0OoO\noooo0Ooo\noooo0o00\noooo0o0\n0oooo0o0O\noooo0o0o\noooo0o\noooo0oO0\noooo0oO\noooo0oOO\noooo0oOo\noooo0oo0\noooo0oo\noooo0ooO\n0oooo0ooo\noooo\nooooO00\nooooOOoO\nooooO00O\nooooO00o\nooooO0\nooooO0O\nooooO0OO\nooooO0Oo\n0ooooO0o0\nooooO0o\nooooO0oO\nooooOO0\nooooOO0o\nooooOO\nooooOoo0\nooooOOO0\nooooOOO\nooooOOo\n0ooooOo0\nooooOo0O\nooooOo0o\nooooOoO0\nooooOoO\nooooOoo\nooooOooO\nooooOooo\nooooo000\nooooo00\n00ooooo00O\n0ooooo00o\n0ooooo0O0\n0ooooo0O\n0ooooo0OO\n0ooooo0Oo\n0ooooo0o0\n0ooooo0o\n0ooooo0oO\n0ooooo0oo\n0ooooo\noooooO00\noooooO0\noooooOo0\noooooO0O\noooooO0o\noooooOO0\noooooOO\noooooOOO\noooooOOo\n0oooooOoO\noooooOoo\noooooo00\noooooo0\noooooo0O\noooooo0o\nooooooO0\nooooooOO\nooooooOo\nooooooo0\n0oooooooO\noooooooo\nO\nO0\nO00\nO000\nO0000\nO00000\nO000000\nO0000000\nO000000O\nO00000O\nO00000O0\nO00000OO\nO0000O\nO0000O0\nO0000O00\nO0000O0O\nO0000OO\nO0000OO0\nO0000OOO\nO000O\nO000O0\nO000O00\nO000O000\nO000O00O\nO000O0O\nO000O0O0\nO000o0oO\nO000Oo\nO000OO0\nO000oo00\nO000OO0O\nO000OOO\nO000OOO0\nO000OOOO\nO00O\nO00O0\nO00O00\nO00O000\nO00O0000\nO00O000O\nO00O00O\nO00O00O0\nO00O00OO\nO00O0O\nO00O0O0\nO00O0O00\nO00O0O0O\nO00O0oO\nO00O0OO0\nO00O0OOO\nO00OO\nO00OO0\nO00OO00\nO00Oo000\nO00Oo00O\nO00Oo0O\nO00Oo0O0\nO00oo0oO\nO00OOO\nO00OOO0\nO00OoO00\nO00ooo0O\nO00OOOO\nO00oOoO0\nO00ooooO\nO0O\nO0O0\nO0O00\nO0O000\nO0O0000\no0o00000\no0o0000O\nO0O000O\no0O000O0\no0O000OO\nO0O00O\nO0O00O0\no0O00O00\no0O00O0O\nO0O00oo\no0O00OO0\no0O00OOo\nO0o0o\nO0O0O0\nO0O0O00\no0O0O000\no0O0O00o\nO0O0O0O\no0O0O0O0\no0O0O0OO\nO0O0Oo\nO0o0oo0\no0O0OO00\no0O0OO0o\nO0o0ooo\no0O0OOo0\no0O0OOOO\nO0OO\nO0OO0\nO0OO00\nO0OO000\no0OO0000\no0OO000O\no0Oo00O\no0OO00O0\no0OO00oO\nO0OO0o\nO0OO0O0\no0OO0O00\no0oO0O0O\nO0OO0OO\no0oO0Oo0\no0oO0oOo\nO0OOO\nO0OOo0\no0OoO00\no0OOO000\no0OoO00o\nO0OoO0o\no0ooo0O0\no0ooo0Oo\nO0oOOO\nO0OOOO0\no0ooOO00\no0OOOO0O\nO0oOOOO\no0ooOOo0\no0ooooOO\nOO\nOO0\nOO00\nOO000\nOo0000\nOO00000\noO000000\noO00000O\nOO0000O\noO0000O0\noO0000OO\nOO000O\nOO000O0\noO000O00\noO000o0O\noO000OO\noO000OO0\noo000ooo\nOO00o\nOO00o0\nOO00O00\noO00O000\noO00O00O\nOO00O0O\noO00O0O0\noO00O0OO\nOo00oO\nOO00OO0\noO00OO00\noO00OO0o\nOo00oOo\noO00OOO0\noO00OOOO\nOO0O\nOO0O0\nOO0O00\nOO0O000\noO0O0000\noO0O000O\nOO0O00O\noO0O00O0\noO0O00OO\nOO0o0O\nOO0O0O0\noO0O0o00\noo0o0O0O\nOo0o0OO\noO0O0OO0\noO0O0Ooo\nOO0Oo\nOO0OO0\nOO0OO00\noO0Oo000\noO0Oo00o\nOO0OO0O\noO0OO0O0\noO0Oo0oO\nOo0OOO\nOO0OOO0\noO0OOo00\noO0OoO0o\nOo0OoOO\noO0Oooo0\noO0OoOOo\nOOo\nOOO0\nOoO00\nOOO000\nOOO0000\noOo00000\noOo0000o\nOOO000O\noOo000O0\noOo000oO\nOOO00O\nooo00O0\noOo00O00\noOo00O0o\nOOO00OO\noOO00oo0\noOo00Ooo\nOOo0O\nOOO0O0\nOOO0O00\noOO0o000\noOO0o00O\nOoo0o0O\noOo0o0O0\noOo0o0oo\nOOO0OO\nOoo0Oo0\noOO0OO00\noOo0oo0o\nooo0ooo\noOO0OOO0\noOo0oooo\nOOOO\nOooO0\nOOOO00\nOOOO000\noOOO0000\noOOO000O\nooOo00o\noOOO00O0\noOOO00OO\nOOOO0o\nOOOO0O0\noOOO0O00\noOOO0O0O\nOooo0Oo\noOOO0Oo0\noooO0oOo\nOoooo\nOOoOO0\nOoOOO00\nooOOO000\nooOOO00o\nOOOOO0O\noOOoO0o0\nooOOO0OO\noooOoo\nOOOOOO0\nooOOoO00\nooooOO0O\nooOOoOO\nooOOOOo0\nooOOOoOO\n"
  },
  {
    "path": "app/proguard-log.pro",
    "content": "##########################################################################################################\n# 作者：Sollyu\n# 日期：2020-11-02\n# 内容：发布版本移除日志，kotlin编译时带的而外信息，增强反调试难度\n# 使用：proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-log.pro'\n##########################################################################################################\n\n##########################################################################################################\n# 删除安卓日志\n-assumenosideeffects class android.util.Log {\n    public static *** d(...);\n    public static *** v(...);\n    public static *** w(...);\n    public static *** e(...);\n}\n\n##########################################################################################################\n# 删除Kotlin编译时可能生成显示变量的方法\n-assumenosideeffects class kotlin.jvm.internal.Intrinsics {\n    public static void checkExpressionValueIsNotNull(java.lang.Object, java.lang.String);\n    public static void checkFieldIsNotNull(java.lang.Object, java.lang.String);\n    public static void checkFieldIsNotNull(java.lang.Object, java.lang.String, java.lang.String);\n    public static void checkNotNull(java.lang.Object);\n    public static void checkNotNull(java.lang.Object, java.lang.String);\n    public static void checkNotNullExpressionValue(java.lang.Object, java.lang.String);\n    public static void checkNotNullParameter(java.lang.Object, java.lang.String);\n    public static void checkParameterIsNotNull(java.lang.Object, java.lang.String);\n    public static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String);\n    public static void throwUninitializedPropertyAccessException(java.lang.String);\n}\n\n##########################################################################################################\n# 会暴露变量名称\n-assumenosideeffects class java.util.Objects {\n    public static java.lang.Object requireNonNull(java.lang.Object, java.lang.String);\n}\n\n##########################################################################################################\n# 删除slf4j的日志输出\n-assumenosideeffects interface org.slf4j.Logger {\n    public void trace(...);\n    public void debug(...);\n    public void info(...);\n    public void warn(...);\n    public void error(...);\n\n    public boolean isTraceEnabled(...);\n    public boolean isDebugEnabled(...);\n    public boolean isWarnEnabled(...);\n}\n\n-assumenosideeffects class org.slf4j.LoggerFactory {\n    public static ** getLogger(...);\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "-keep class com.sevtinge.cemiuiler.XposedInit\n-keep class com.sevtinge.cemiuiler.module.app.SystemFrameworkForCorePatch\n-keep class moralnorm.**{*;}\n-keep class com.sevtinge.cemiuiler.utils.Helpers{boolean isModuleActive;}\n-keep class com.sevtinge.cemiuiler.utils.Helpers{int XposedVersion;}\n-keep class * extends com.sevtinge.cemiuiler.module.base.BaseHook\n-keep class com.sevtinge.cemiuiler.ui.HideAppActivity\n-keep class * extends com.sevtinge.cemiuiler.ui.fragment.base.*\n-keep class miui.drm.**{*;}\n-dontwarn android.app.ActivityTaskManager$RootTaskInfo\n-dontwarn miui.app.MiuiFreeFormManager$MiuiFreeFormStackInfo\n-dontwarn com.android.internal.view.menu.MenuBuilder\n-allowaccessmodification\n-overloadaggressively\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    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\" />\n    <uses-permission\n        android:name=\"android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS\"\n        tools:ignore=\"ProtectedPermissions\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission\n        android:name=\"android.permission.INTERACT_ACROSS_USERS\"\n        tools:ignore=\"ProtectedPermissions\" />\n    <uses-permission android:name=\"android.permission.VIBRATE\" />\n    <uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />\n    <uses-permission\n        android:name=\"android.permission.READ_EXTERNAL_STORAGE\"\n        android:maxSdkVersion=\"32\" />\n    <uses-permission\n        android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\n        android:maxSdkVersion=\"32\"\n        tools:ignore=\"ScopedStorage\" />\n    <uses-permission\n        android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"\n        tools:ignore=\"ProtectedPermissions\" />\n    <uses-permission\n        android:name=\"android.permission.QUERY_ALL_PACKAGES\"\n        tools:ignore=\"QueryAllPackagesPermission\" />\n    <uses-permission\n        android:name=\"android.permission.WRITE_SECURE_SETTINGS\"\n        tools:ignore=\"ProtectedPermissions\" />\n    <uses-permission\n        android:name=\"android.permission.CHANGE_COMPONENT_ENABLED_STATE\"\n        tools:ignore=\"ProtectedPermissions\" />\n    <uses-permission\n        android:name=\"android.permission.MANAGE_USB\"\n        tools:ignore=\"ProtectedPermissions\" />\n    <uses-permission\n        android:name=\"android.permission.SET_ANIMATION_SCALE\"\n        tools:ignore=\"ProtectedPermissions\" />\n    <uses-permission\n        android:name=\"android.permission.MODIFY_DAY_NIGHT_MODE\"\n        tools:ignore=\"ProtectedPermissions\" />\n\n    <uses-permission android:name=\"miui.permission.READ_LOGS\" />\n    <uses-permission android:name=\"miui.permission.DUMP_CACHED_LOG\" />\n    <uses-permission android:name=\"com.miui.securitycenter.permission.SYSTEM_PERMISSION_DECLARE\" />\n    <uses-permission android:name=\"com.miui.securitycenter.permission.ACCESS_SECURITY_CENTER_PROVIDER\" />\n\n    <uses-permission\n        android:name=\"${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION\"\n        tools:node=\"remove\" />\n\n    <permission\n        android:name=\"${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION\"\n        tools:node=\"remove\" />\n\n    <application\n        android:name=\".Application\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:requestLegacyExternalStorage=\"true\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n\n        <activity\n            android:name=\".ui.MainActivity\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"de.robv.android.xposed.category.MODULE_SETTINGS\" />\n            </intent-filter>\n        </activity>\n\n        <activity\n            android:name=\".ui.SubSettings\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n        </activity>\n\n        <activity\n            android:name=\".ui.ModuleSettingsActivity\"\n            android:label=\"@string/settings\" />\n\n        <activity-alias\n            android:name=\".ui.HideAppActivity\"\n            android:exported=\"true\"\n            android:label=\"@string/app_name\"\n            android:targetActivity=\".ui.MainActivity\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity-alias>\n\n        <activity android:name=\".ui.SubPickerActivity\" />\n\n        <provider\n            android:name=\".provider.SharedPrefsProvider\"\n            android:authorities=\"com.sevtinge.cemiuiler.provider.sharedprefs\"\n            android:defaultToDeviceProtectedStorage=\"true\"\n            android:directBootAware=\"true\"\n            android:exported=\"true\"\n            android:grantUriPermissions=\"true\" />\n\n        <meta-data\n            android:name=\"required_permissions\"\n            android:value=\";\" />\n\n        <meta-data\n            android:name=\"xposedmodule\"\n            android:value=\"true\" />\n        <meta-data\n            android:name=\"xposedminversion\"\n            android:value=\"93\" />\n        <meta-data\n            android:name=\"xposeddescription\"\n            android:value=\"@string/xposed_description\" />\n        <meta-data\n            android:name=\"xposedsharedprefs\"\n            android:value=\"true\" />\n        <meta-data\n            android:name=\"xposedscope\"\n            android:resource=\"@array/xposed_scope\" />\n\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/assets/xposed_init",
    "content": "com.sevtinge.cemiuiler.XposedInit"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/Application.java",
    "content": "package com.sevtinge.cemiuiler;\n\nimport android.content.Context;\nimport android.os.Build;\n\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\npublic class Application extends android.app.Application {\n\n    @Override\n    protected void attachBaseContext(Context base) {\n        PrefsUtils.mSharedPreferences = PrefsUtils.getSharedPrefs(base);\n        super.attachBaseContext(base);\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/CrashRecord.kt",
    "content": "package com.sevtinge.cemiuiler\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport com.sevtinge.cemiuiler.utils.PrefsUtils.mPrefsName\nimport de.robv.android.xposed.XposedBridge\n\n@SuppressLint(\"StaticFieldLeak\")\nobject CrashRecord : Thread.UncaughtExceptionHandler {\n\n    private var mDefaultHandler: Thread.UncaughtExceptionHandler? = null\n    private var mContext: Context? = null\n\n    fun init(context: Context) {\n        mContext = context\n        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler()\n        Thread.setDefaultUncaughtExceptionHandler(this)\n        if (BuildConfig.DEBUG) XposedBridge.log(\"[Cemiuiler][I]: CrashRecord Loaded\")\n    }\n\n    override fun uncaughtException(p0: Thread, p1: Throwable) {\n        XposedBridge.log(\"[Cemiuiler][W]: Crash happened\")\n        mContext?.let {\n            val pref = it.createDeviceProtectedStorageContext().getSharedPreferences(\"Crash_Handler\", Context.MODE_PRIVATE)\n            if (BuildConfig.DEBUG) {\n                XposedBridge.log(\"${System.currentTimeMillis()}\")\n                XposedBridge.log(\"${pref.getLong(\"last_time\", 0L)}\")\n                XposedBridge.log(\"${System.currentTimeMillis() - pref.getLong(\"last_time\", 0L)}\")\n            }\n            if (System.currentTimeMillis() - pref.getLong(\"last_time\", 0L) < 60 * 1000L) {\n                XposedBridge.log(\"[Cemiuiler][W]: Crash happened again in one minute\")\n                if (pref.getInt(\"times\", 0) >= 5) {\n                    it.createDeviceProtectedStorageContext().getSharedPreferences(mPrefsName, Context.MODE_PRIVATE).edit().apply {\n                        clear()\n                        apply()\n                    }\n                    XposedBridge.log(\"[Cemiuiler][W]: More than five times, clear MODULE_CONFIG\")\n                    pref.edit().putInt(\"times\", 0).apply()\n                }\n                pref.edit().putInt(\"times\", pref.getInt(\"times\", 0) + 1).apply()\n            }\n            pref.edit().putLong(\"last_time\", System.currentTimeMillis()).apply()\n            Thread.sleep(500)\n        }\n        mDefaultHandler?.uncaughtException(p0, p1)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/XposedInit.kt",
    "content": "package com.sevtinge.cemiuiler\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.sevtinge.cemiuiler.module.app.SystemFrameworkForCorePatch\nimport com.sevtinge.cemiuiler.module.base.BaseXposedInit\nimport com.sevtinge.cemiuiler.module.hook.home.title.EnableIconMonetColor\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.SidebarLineCustom\nimport com.sevtinge.cemiuiler.module.hook.settings.VolumeSeparateControlForSettings\nimport com.sevtinge.cemiuiler.module.hook.systemframework.*\nimport com.sevtinge.cemiuiler.module.hook.systemui.navigation.HandleLineCustom\nimport com.sevtinge.cemiuiler.module.hook.tsmclient.AutoNfc\nimport de.robv.android.xposed.IXposedHookInitPackageResources\nimport de.robv.android.xposed.IXposedHookZygoteInit\nimport de.robv.android.xposed.callbacks.XC_InitPackageResources\nimport de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam\n\nprivate const val TAG = \"Cemiuiler\"\n\nclass XposedInit : BaseXposedInit(), IXposedHookInitPackageResources {\n    @Throws(Throwable::class)\n    override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam?) {\n        super.initZygote(startupParam)\n        if (mPrefsMap.getBoolean(\"system_framework_allow_uninstall\")) AllowUninstall().initZygote(startupParam)\n        if (mPrefsMap.getBoolean(\"system_framework_screen_all_rotations\")) ScreenRotation.initRes()\n        if (mPrefsMap.getBoolean(\"system_framework_clean_share_menu\")) CleanShareMenu.initRes()\n        if (mPrefsMap.getBoolean(\"system_framework_clean_open_menu\")) CleanOpenMenu.initRes()\n        if (mPrefsMap.getBoolean(\"system_framework_volume_separate_control\")) VolumeSeparateControlForSettings.initRes()\n        // if (mPrefsMap.getBoolean(\"various_theme_crack\")) ThemeCrack.initRes()\n        if (startupParam != null) {\n            BackgroundBlurDrawable().initZygote(startupParam)\n            SystemFrameworkForCorePatch().initZygote(startupParam)\n        }\n    }\n\n    @Throws(Throwable::class)\n    override fun handleLoadPackage(lpparam: LoadPackageParam) {\n        // Init EzXHelper\n        EzXHelper.apply {\n            initHandleLoadPackage(lpparam)\n            setLogTag(TAG)\n            setToastTag(TAG)\n        }\n\n        init(lpparam)\n        SystemFrameworkForCorePatch().handleLoadPackage(lpparam)\n    }\n\n    override fun handleInitPackageResources(resparam: XC_InitPackageResources.InitPackageResourcesParam) {\n        when (resparam.packageName) {\n            \"com.miui.tsmclient\" ->\n                if (mPrefsMap.getBoolean(\"tsmclient_auto_nfc\")) {\n                    AutoNfc.initResource(resparam)\n                }\n\n            \"com.miui.home\" ->\n                if (mPrefsMap.getBoolean(\"home_other_icon_monet_color\")) {\n                    EnableIconMonetColor.initResource(resparam)\n                }\n\n            \"com.miui.securitycenter\" ->\n                if (mPrefsMap.getBoolean(\"security_center_sidebar_line_color\")) {\n                    SidebarLineCustom.initResource(resparam)\n                }\n\n            \"com.android.systemui\" ->\n                if (mPrefsMap.getBoolean(\"system_ui_navigation_handle_custom\")) {\n                    HandleLineCustom.initResource(resparam)\n                }\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/callback/IAppSelectCallback.java",
    "content": "package com.sevtinge.cemiuiler.callback;\n\npublic interface IAppSelectCallback {\n\n    void sendMsgToActivity(byte[] appIcon, String appName, String appPackageName, String appVersion, String appActivityName);\n\n    String getMsgFromActivity(String s);\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/data/AppData.java",
    "content": "package com.sevtinge.cemiuiler.data;\n\nimport android.graphics.Bitmap;\n\npublic class AppData {\n\n    public int user = 0;\n    public Bitmap icon;\n    public String label;\n    public String packageName;\n    public String activityName;\n    public String versionName;\n    public String versionCode;\n    public boolean isSystemApp;\n    public boolean enabled;\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/data/LocationData.java",
    "content": "package com.sevtinge.cemiuiler.data;\n\npublic class LocationData {\n\n    private String Title; // 备注\n    private Double Longitude; // 经度\n    private Double Latitude; // 纬度\n    private int Offset;\n    private int RegionCode; // 区域代码\n    private int BaseStationCode; // 基站代码\n    private int f;\n    private String Remarks; // 备注\n\n    public LocationData() {\n    }\n\n    // 标题,经度,纬度,偏移\n    public LocationData(String title, Double longitude, Double latitude, int offset, int regionCode, int baseStationCode, String remarks, int i4) {\n        Title = title;\n        Longitude = longitude;\n        Latitude = latitude;\n        Offset = offset;\n        RegionCode = regionCode;\n        BaseStationCode = baseStationCode;\n        Remarks = remarks;\n        f = i4;\n    }\n\n    public String getTitle() {\n        return Title;\n    }\n\n    public void setTitle(String title) {\n        Title = title;\n    }\n\n    public Double getLongitude() {\n        return Longitude;\n    }\n\n    public void setLongitude(Double longitude) {\n        Longitude = longitude;\n    }\n\n    public Double getLatitude() {\n        return Latitude;\n    }\n\n    public void setLatitude(Double latitude) {\n        Latitude = latitude;\n    }\n\n    public int getOffset() {\n        return Offset;\n    }\n\n    public void setOffset(int offset) {\n        Offset = offset;\n    }\n\n    public int getRegionCode() {\n        return RegionCode;\n    }\n\n    public void setRegionCode(int regionCode) {\n        RegionCode = regionCode;\n    }\n\n    public int getBaseStationCode() {\n        return BaseStationCode;\n    }\n\n    public void setBaseStationCode(int baseStationCode) {\n        BaseStationCode = baseStationCode;\n    }\n\n    public int getF() {\n        return f;\n    }\n\n    public void setF(int f) {\n        this.f = f;\n    }\n\n    public String getRemarks() {\n        return Remarks;\n    }\n\n    public void setRemarks(String remarks) {\n        Remarks = remarks;\n    }\n\n    public String toString() {\n        return String.valueOf(Latitude) + \",\" + String.valueOf(Longitude) + \",\" + String.valueOf(Offset) + \",\" + String.valueOf(RegionCode) + \",\" + String.valueOf(BaseStationCode) + \",\" + Remarks;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/data/ModData.java",
    "content": "package com.sevtinge.cemiuiler.data;\n\npublic class ModData {\n    public String title;\n    public String breadcrumbs;\n    public String key;\n    public ModCat cat;\n    public String sub;\n    public int order;\n    public String fragment;\n    public int catTitleResId;\n\n    public enum ModCat {\n        pref_key_system,\n        pref_key_launcher,\n        pref_key_controls,\n        pref_key_various\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/data/SQLiteHelper.java",
    "content": "package com.sevtinge.cemiuiler.data;\n\nimport android.content.ContentValues;\nimport android.content.Context;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.database.sqlite.SQLiteException;\nimport android.database.sqlite.SQLiteOpenHelper;\n\nimport androidx.annotation.Nullable;\n\nimport com.sevtinge.cemiuiler.utils.ToastHelper;\n\nimport java.io.File;\n\npublic class SQLiteHelper extends SQLiteOpenHelper {\n\n    public static SQLiteDatabase a = null;\n\n    public SQLiteHelper(@Nullable Context context) {\n        super(context, a(context), null, 1);\n        try {\n            a = getWritableDatabase();\n            a.execSQL(\"create table if not exists location(id integer primary key autoincrement,title text,lng real,lat real,offset integer,lac integer,cid integer,note text)\");\n        } catch (SQLiteException e) {\n            ToastHelper.makeText(context, e.getMessage());\n        }\n\n    }\n\n    private static String a(Context context) {\n        String str = context.getExternalFilesDir(null) + \"/location.db\";\n        return new File(str).exists() ? str : \"location.db\";\n    }\n\n    public int a(LocationData data) {\n        return a.delete(\"location\", \"id = ?\", new String[]{String.valueOf(data.getF())});\n    }\n\n\n    public long b(LocationData data) {\n        ContentValues contentValues = new ContentValues();\n        contentValues.put(\"title\", data.getTitle());\n        contentValues.put(\"lat\", data.getLatitude());\n        contentValues.put(\"lng\", data.getLongitude());\n        contentValues.put(\"offset\", data.getOffset());\n        contentValues.put(\"lac\", data.getBaseStationCode());\n        contentValues.put(\"cid\", data.getRegionCode());\n        contentValues.put(\"note\", data.getRemarks());\n        return a.insert(\"location\", null, contentValues);\n    }\n\n    @Override\n    public void onCreate(SQLiteDatabase db) {\n        db.execSQL(\"create table if not exists location(id integer primary key autoincrement,title text,lng real,lat real,offset integer,lac integer,cid integer,note text)\");\n    }\n\n    @Override\n    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/data/adapter/AppDataAdapter.java",
    "content": "package com.sevtinge.cemiuiler.data.adapter;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.CheckBox;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.data.AppData;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport java.util.ArrayList;\nimport java.util.LinkedHashSet;\nimport java.util.List;\nimport java.util.Set;\n\npublic class AppDataAdapter extends RecyclerView.Adapter<AppDataAdapter.ViewHolder> {\n\n    private static List<AppData> appInfoList;\n    private Set<String> selectedApps;\n    private onItemClickListener onItemClickListener;\n    private final Context mContext;\n    private final String mKey;\n    private final int mType;\n\n\n    @SuppressLint(\"NotifyDataSetChanged\")\n    public void setData(List<AppData> appInfoList) {\n        AppDataAdapter.appInfoList = appInfoList;\n        notifyDataSetChanged();\n    }\n\n    public AppDataAdapter(Context context, String key, int type) {\n        mContext = context;\n        mKey = key;\n        mType = type;\n    }\n\n    /**\n     * 在Adapter中设置一个过滤方法，目的是为了将过滤后的数据传入Adapter中并刷新数据\n     *\n     * @param locationListModels\n     */\n    @SuppressLint(\"NotifyDataSetChanged\")\n    public void setFilter(List<AppData> locationListModels) {\n        appInfoList = new ArrayList<>();\n        appInfoList.addAll(locationListModels);\n        notifyDataSetChanged();\n    }\n\n    @Override\n    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        View rowItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_app_list, parent, false);\n        return new ViewHolder(rowItem);\n    }\n\n    @Override\n    public void onBindViewHolder(ViewHolder holder, int position) {\n\n        AppData appInfo = appInfoList.get(position);\n        selectedApps = PrefsUtils.mSharedPreferences.getStringSet(mKey, new LinkedHashSet<>());\n\n        holder.mAppListIcon.setImageBitmap(appInfo.icon);\n        holder.mAppName.setText(appInfo.label);\n        holder.mAppPackageName.setText(appInfo.packageName);\n        holder.mSelecte.setChecked(shouldSelect(appInfo.packageName));\n\n        holder.mSelecte.setVisibility(mType != 0 ? View.GONE : View.VISIBLE);\n        holder.itemView.setOnClickListener(v -> onItemClickListener.onItemClick(v, position, appInfo, holder.mSelecte.isChecked()));\n    }\n\n\n    public boolean shouldSelect(String pkgName) {\n        return (selectedApps.contains(pkgName));\n    }\n\n    public void setOnItemClickListener(onItemClickListener onItemClick) {\n        this.onItemClickListener = onItemClick;\n    }\n\n    @Override\n    public int getItemCount() {\n        return appInfoList.size();\n    }\n\n    public static class ViewHolder extends RecyclerView.ViewHolder {\n\n        private final ImageView mAppListIcon;\n        private final TextView mAppName;\n        private final TextView mAppPackageName;\n        private final CheckBox mSelecte;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n            mAppListIcon = itemView.findViewById(android.R.id.icon);\n            mAppName = itemView.findViewById(android.R.id.title);\n            mAppPackageName = itemView.findViewById(android.R.id.summary);\n            mSelecte = itemView.findViewById(android.R.id.checkbox);\n        }\n    }\n\n    public interface onItemClickListener {\n        void onItemClick(View view, int position, AppData appData, boolean isCheck);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/data/adapter/ModSearchAdapter.java",
    "content": "package com.sevtinge.cemiuiler.data.adapter;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.text.Spannable;\nimport android.text.SpannableString;\nimport android.text.style.ForegroundColorSpan;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.Filter;\nimport android.widget.Filterable;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.data.ModData;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.SearchHelper;\n\nimport java.util.ArrayList;\nimport java.util.Comparator;\nimport java.util.concurrent.CopyOnWriteArrayList;\n\npublic class ModSearchAdapter extends RecyclerView.Adapter<ModSearchAdapter.ViewHolder> implements Filterable {\n\n    private Context mContext;\n    private String filterString = \"\";\n    private ItemFilter mFilter;\n    private onItemClickListener mItemClickListener;//item点击监听\n    private final CopyOnWriteArrayList<ModData> modsList = new CopyOnWriteArrayList<ModData>();\n\n    public void setOnItemClickListener(onItemClickListener onItemClick) {\n        mItemClickListener = onItemClick;\n    }\n\n    @Override\n    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {\n        mContext = viewGroup.getContext();\n        View view= LayoutInflater.from(mContext).inflate(R.layout.item_search_result, viewGroup,false);\n        //创建一个VIewHolder\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(ViewHolder viewHolder, int position) {\n        ModData ad = modsList.get(position);\n\n        int start = ad.title.toLowerCase().indexOf(filterString);\n        if (start >= 0) {\n            Spannable spannable = new SpannableString(ad.title);\n            spannable.setSpan(new ForegroundColorSpan(SearchHelper.MARK_COLOR_VIBRANT), start, start + filterString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);\n            viewHolder.mName.setText(spannable, TextView.BufferType.SPANNABLE);\n        } else {\n            viewHolder.mName.setText(ad.title);\n        }\n        viewHolder.mPackageName.setText(ad.breadcrumbs);\n        //设置item点击监听事件\n        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View view) {\n                mItemClickListener.onItemClick(view, ad);\n            }\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return modsList.size();\n    }\n\n    @Override\n    public Filter getFilter() {\n        // 如果ItemFilter对象为空，那么重写创建一个\n        if (mFilter == null) {\n            mFilter = new ItemFilter();\n        }\n        return mFilter;\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n\n        private ImageView mIcon;\n        private TextView mName;\n        private TextView mPackageName;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n            mIcon = itemView.findViewById(android.R.id.icon);\n            mName = itemView.findViewById(android.R.id.title);\n            mPackageName = itemView.findViewById(android.R.id.summary);\n        }\n    }\n\n\n    public interface onItemClickListener {\n        void onItemClick(View view, ModData ad);\n    }\n\n\n    private class ItemFilter extends Filter {\n        @Override\n        protected FilterResults performFiltering(CharSequence constraint) {\n            filterString = constraint.toString().toLowerCase();\n            final ArrayList<ModData> nlist = new ArrayList<ModData>();\n\n            for (ModData filterableData: SearchHelper.allModsList) {\n                if (constraint.toString().equals(SearchHelper.NEW_MODS_SEARCH_QUERY)) {\n                    if (SearchHelper.NEW_MODS.contains(filterableData.key)) {\n                        nlist.add(filterableData);\n                    }\n                } else if (filterableData.title.toLowerCase().contains(filterString)) {\n                    nlist.add(filterableData);\n                }\n            }\n\n            FilterResults results = new FilterResults();\n            results.values = nlist;\n            results.count = nlist.size();\n            return results;\n        }\n\n        @SuppressLint(\"NotifyDataSetChanged\")\n        @Override\n        protected void publishResults(CharSequence constraint, FilterResults results) {\n            modsList.clear();\n            if (results.count > 0 && results.values != null) {\n                modsList.addAll((ArrayList<ModData>)results.values);\n            }\n            sortList();\n            notifyDataSetChanged();\n        }\n    }\n\n    private void sortList() {\n        modsList.sort(new Comparator<ModData>() {\n            public int compare(ModData app1, ModData app2) {\n                int breadcrumbs = app1.breadcrumbs.compareToIgnoreCase(app2.breadcrumbs);\n                if (breadcrumbs == 0)\n                    return app1.title.compareToIgnoreCase(app2.title);\n                else\n                    return breadcrumbs;\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/data/adapter/MutipleChoiceAdapter.java",
    "content": "package com.sevtinge.cemiuiler.data.adapter;\n\nimport android.util.SparseBooleanArray;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.sevtinge.cemiuiler.R;\n\nimport java.util.List;\n\nimport moralnorm.appcompat.widget.CheckedTextView;\n\npublic class MutipleChoiceAdapter extends RecyclerView.Adapter<MutipleChoiceAdapter.ViewHolder> {\n\n    // 填充数据的list\n    private List<String> mList;\n    // 用来控制CheckBox的选中状况\n    private SparseBooleanArray mIsChecked;\n\n    private OnCurWillCheckAllChangedListener mListener;\n    private boolean curWillCheckAll = true;\n\n    public MutipleChoiceAdapter(List<String> list) {\n        mList = list;\n        mIsChecked = new SparseBooleanArray();\n        // 初始化数据\n        initData();\n    }\n\n    // 初始化isSelected的数据\n    private void initData() {\n        for (int i = 0; i < mList.size(); i++) {\n            getCheckedArray().put(i, false);\n        }\n    }\n\n    public interface OnCurWillCheckAllChangedListener {\n        void onCurWillCheckAllChanged(boolean curWillCheckAll);\n    }\n\n    public void setOnCurWillCheckAllChangedListener(OnCurWillCheckAllChangedListener listener) {\n        this.mListener = listener;\n    }\n\n    public SparseBooleanArray getCheckedArray() {\n        return mIsChecked;\n    }\n\n    public void setCheckedArray(SparseBooleanArray isChecked) {\n        mIsChecked = isChecked;\n    }\n\n    @Override\n    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_mutiplechoice, parent, false);\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(ViewHolder holder, int position) {\n        CheckedTextView mCheckBoxTitle = holder.mCheckBoxTitle;\n        // 设置list中TextView的显示\n        mCheckBoxTitle.setText(mList.get(position));\n        // 根据isSelected来设置checkbox的选中状况\n        mCheckBoxTitle.setChecked(getCheckedArray().get(position));\n        holder.itemView.setOnClickListener(v -> {\n            // 改变CheckBox的状态\n            mCheckBoxTitle.toggle();\n            // 将CheckBox的选中状况记录下来\n            getCheckedArray().put(position, mCheckBoxTitle.isChecked());\n            for (int i = 0; i < mIsChecked.size(); i++) {\n                if (mIsChecked.valueAt(i)) {\n                    curWillCheckAll = false;\n                    break;\n                } else {\n                    curWillCheckAll = true;\n                }\n            }\n            if (mListener != null) {\n                mListener.onCurWillCheckAllChanged(curWillCheckAll);\n            }\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return mList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        public CheckedTextView mCheckBoxTitle;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n            mCheckBoxTitle = itemView.findViewById(android.R.id.text1);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/AiAsst.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.aiasst.AiCaptions;\n\n\npublic class AiAsst extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new AiCaptions(), mPrefsMap.getBoolean(\"aiasst_ai_captions\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Aod.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.hook.aod.UnlockAlwaysOnDisplay;\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\n\npublic class Aod extends BaseModule {\n    @Override\n    public void handleLoadPackage() {\n        initHook(UnlockAlwaysOnDisplay.INSTANCE, mPrefsMap.getBoolean(\"aod_unlock_always_on_display\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Barrage.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.hook.barrage.*;\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\n\npublic class Barrage extends BaseModule {\n    @Override\n    public void handleLoadPackage() {\n        initHook(AnyBarrage.INSTANCE, mPrefsMap.getBoolean(\"barrage_any_barrage\"));\n        initHook(CustomBarrageLength.INSTANCE, mPrefsMap.getInt(\"barrage_custom_barrage_length\", 36) != 36);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Browser.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.browser.DebugMode;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockSuperClipboard;\n\npublic class Browser extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(DebugMode.INSTANCE, mPrefsMap.getBoolean(\"browser_debug_mode\"));\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(UnlockSuperClipboard.INSTANCE, mPrefsMap.getBoolean(\"various_super_clipboard_enable\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Camera.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.camera.EnableLabOptions;\nimport com.sevtinge.cemiuiler.module.hook.camera.Unlock120Fps;\nimport com.sevtinge.cemiuiler.module.hook.camera.Unlock60Fps;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockAiEnhance;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockAiShutter;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockAiWatermark;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockAmbilight;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockAudioZoom;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockClone;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockColorEnhance;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockCosmeticMirror;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockCvlens;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockCyberFocusVersion2;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockDoc;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockDualcam;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockDuration;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockFilm;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockFilmDelay;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockFilmDollyZoom;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockFilmDream;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockFilmSlowShutter;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockFilmTimeBackflow;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockFilmTimeFreeze;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockHandGesture;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockHdr;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockHeic;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockIdcard;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockLog;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockMakeup;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockMenMakeup;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockMilive;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockMoon;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockNevus;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockNewBeauty;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockPano;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockPixel;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockPortrait;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockRaw;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockSlow;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockTrackEyes;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockTrackFeature;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockTrackFocus;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockVideosky;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockVlog;\nimport com.sevtinge.cemiuiler.module.hook.camera.UnlockVlogPro;\n\npublic class Camera extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // 功能\n        initHook(new UnlockAiWatermark(), mPrefsMap.getBoolean(\"camera_features_unlock_aiwatermark\"));\n        initHook(new UnlockAmbilight(), mPrefsMap.getBoolean(\"camera_features_unlock_ambilight\"));\n        initHook(new UnlockClone(), mPrefsMap.getBoolean(\"camera_features_unlock_clone\"));\n        initHook(new UnlockCosmeticMirror(), mPrefsMap.getBoolean(\"camera_features_unlock_cosmetic_mirror\"));\n        initHook(new UnlockDoc(), mPrefsMap.getBoolean(\"camera_features_unlock_doc\"));\n        initHook(new UnlockDualcam(), mPrefsMap.getBoolean(\"camera_features_unlock_dualcam\"));\n        initHook(new UnlockDuration(), mPrefsMap.getBoolean(\"camera_features_unlock_duration\"));\n        initHook(new UnlockIdcard(), mPrefsMap.getBoolean(\"camera_features_unlock_idcard\"));\n        initHook(new UnlockMilive(), mPrefsMap.getBoolean(\"camera_features_unlock_milive\"));\n        initHook(new UnlockMoon(), mPrefsMap.getBoolean(\"camera_features_unlock_moon\"));\n        initHook(new UnlockPano(), mPrefsMap.getBoolean(\"camera_features_unlock_pano\"));\n        initHook(new UnlockPixel(), mPrefsMap.getBoolean(\"camera_features_unlock_pixel\"));\n        initHook(new UnlockPortrait(), mPrefsMap.getBoolean(\"camera_features_unlock_portrait\"));\n        initHook(new UnlockSlow(), mPrefsMap.getBoolean(\"camera_features_unlock_slow\"));\n        initHook(new UnlockVideosky(), mPrefsMap.getBoolean(\"camera_features_unlock_videosky\"));\n        initHook(new UnlockVlog(), mPrefsMap.getBoolean(\"camera_features_unlock_vlog\"));\n        initHook(new UnlockVlogPro(), mPrefsMap.getBoolean(\"camera_features_unlock_vlog_pro\"));\n        initHook(new UnlockFilm(), mPrefsMap.getBoolean(\"camera_features_unlock_film\"));\n        initHook(new UnlockFilmDelay(), mPrefsMap.getBoolean(\"camera_features_unlock_film_delay\"));\n        initHook(new UnlockFilmDollyZoom(), mPrefsMap.getBoolean(\"camera_features_unlock_film_dollyzoom\"));\n        initHook(new UnlockFilmDream(), mPrefsMap.getBoolean(\"camera_features_unlock_film_dream\"));\n        initHook(new UnlockFilmSlowShutter(), mPrefsMap.getBoolean(\"camera_features_unlock_film_slowshutter\"));\n        initHook(new UnlockFilmTimeBackflow(), mPrefsMap.getBoolean(\"camera_features_unlock_film_timebackflow\"));\n        initHook(new UnlockFilmTimeFreeze(), mPrefsMap.getBoolean(\"camera_features_unlock_film_timefreeze\"));\n\n        // 拍照\n        initHook(new UnlockMakeup(), mPrefsMap.getBoolean(\"camera_shot_makeup\"));\n        initHook(new UnlockColorEnhance(), mPrefsMap.getBoolean(\"camera_shot_color_enhance\"));\n        initHook(new UnlockHandGesture(), mPrefsMap.getBoolean(\"camera_shot_hand_gesture\"));\n\n        // 录像\n        initHook(new Unlock60Fps(), mPrefsMap.getBoolean(\"camera_record_60fps\"));\n        initHook(new Unlock120Fps(), mPrefsMap.getBoolean(\"camera_record_120fps\"));\n        initHook(new UnlockHdr(), mPrefsMap.getBoolean(\"camera_record_hdr\"));\n        initHook(new UnlockAiEnhance(), mPrefsMap.getBoolean(\"camera_record_ai\"));\n        initHook(new UnlockAudioZoom(), mPrefsMap.getBoolean(\"camera_record_audio_zoom\"));\n\n        // 人像\n        initHook(new UnlockCvlens(), mPrefsMap.getBoolean(\"camera_portrait_cvlens\"));\n        initHook(new UnlockNewBeauty(), mPrefsMap.getBoolean(\"camera_portrait_new_beauty\"));\n\n        // 专业\n        initHook(new UnlockRaw(), mPrefsMap.getBoolean(\"camera_pro_raw\"));\n        initHook(new UnlockLog(), mPrefsMap.getBoolean(\"camera_pro_log\"));\n\n        // 设置\n        initHook(new UnlockTrackFeature(), (mPrefsMap.getBoolean(\"camera_settings_track_eyes\") || mPrefsMap.getBoolean(\"camera_settings_track_focus\")));\n        initHook(new UnlockHeic(), mPrefsMap.getBoolean(\"camera_settings_heic\"));\n        initHook(new UnlockTrackFocus(), mPrefsMap.getBoolean(\"camera_settings_track_focus\"));\n        initHook(new UnlockAiShutter(), mPrefsMap.getBoolean(\"camera_settings_predictive\"));\n        initHook(new UnlockCyberFocusVersion2(), mPrefsMap.getBoolean(\"camera_settings_track_focus\"));\n        initHook(new UnlockNevus(), mPrefsMap.getBoolean(\"camera_settings_nevus\"));\n        initHook(new UnlockMenMakeup(), mPrefsMap.getBoolean(\"camera_settings_men_makeup\"));\n        initHook(EnableLabOptions.INSTANCE, mPrefsMap.getBoolean(\"camera_settings_lab_options\"));\n        initHook(new UnlockTrackEyes(), mPrefsMap.getBoolean(\"camera_settings_track_eyes\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Clock.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.clock.EnableHourGlass;\n\npublic class Clock extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new EnableHourGlass(), mPrefsMap.getBoolean(\"clock_enable_hour_glass\"));\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/ContentExtension.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.contentextension.DoublePress;\nimport com.sevtinge.cemiuiler.module.hook.contentextension.HorizontalContentExtension;\nimport com.sevtinge.cemiuiler.module.hook.contentextension.LinkOpenMode;\nimport com.sevtinge.cemiuiler.module.hook.contentextension.SuperImage;\nimport com.sevtinge.cemiuiler.module.hook.contentextension.UnlockTaplus;\nimport com.sevtinge.cemiuiler.module.hook.contentextension.UseThirdPartyBrowser;\n\npublic class ContentExtension extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new UseThirdPartyBrowser(), mPrefsMap.getBoolean(\"content_extension_browser\"));\n        initHook(new DoublePress(), mPrefsMap.getBoolean(\"content_extension_double_press\"));\n        initHook(new SuperImage(), mPrefsMap.getBoolean(\"content_extension_super_image\"));\n        initHook(new LinkOpenMode());\n        initHook(HorizontalContentExtension.INSTANCE, mPrefsMap.getBoolean(\"content_extension_unlock_taplus_horizontal\"));\n\n        if (!isAndroidR()){\n            initHook(UnlockTaplus.INSTANCE, mPrefsMap.getBoolean(\"content_extension_unlock_taplus\"));\n        }\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Creation.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.creation.UnlockCreation;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockSuperClipboard;\n\npublic class Creation extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(UnlockCreation.INSTANCE, mPrefsMap.getBoolean(\"creation_unlock_enable\"));\n        initHook(UnlockSuperClipboard.INSTANCE, mPrefsMap.getBoolean(\"various_super_clipboard_enable\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Downloads.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.downloads.FuckXlDownload;\n\npublic class Downloads extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new FuckXlDownload(), mPrefsMap.getBoolean(\"various_fuck_xlDownload\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/ExternalStorage.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.externalstorage.DisableFolderCantUse;\n\npublic class ExternalStorage extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new DisableFolderCantUse(), mPrefsMap.getBoolean(\"various_disable_folder_cantuse\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/FileExplorer.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.fileexplorer.SelectName;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockSuperClipboard;\n\npublic class FileExplorer extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(SelectName.INSTANCE, mPrefsMap.getBoolean(\"file_explorer_can_selectable\") || mPrefsMap.getBoolean(\"file_explorer_is_single_line\"));\n        initHook(UnlockSuperClipboard.INSTANCE, mPrefsMap.getBoolean(\"various_super_clipboard_enable\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Gallery.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableHdrEnhance;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableIdPhoto;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableMagicSky;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableOcr;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableOcrForm;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnablePdf;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnablePhotoMovie;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableRemover2;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableTextYanhua;\nimport com.sevtinge.cemiuiler.module.hook.gallery.EnableVideoPost;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockSuperClipboard;\n\npublic class Gallery extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new EnableHdrEnhance(), mPrefsMap.getBoolean(\"gallery_enable_hdr_enhanced\"));\n        initHook(new EnableMagicSky(), mPrefsMap.getBoolean(\"gallery_enable_magic_sky\"));\n        initHook(new EnablePdf(), mPrefsMap.getBoolean(\"gallery_enable_pdf\"));\n        initHook(new EnablePhotoMovie(), mPrefsMap.getBoolean(\"gallery_enable_photo_movie\"));\n        initHook(new EnableRemover2(), mPrefsMap.getBoolean(\"gallery_enable_remover_2\"));\n        initHook(new EnableTextYanhua(), mPrefsMap.getBoolean(\"gallery_enable_text_yanhua\"));\n        initHook(new EnableIdPhoto(), mPrefsMap.getBoolean(\"gallery_enable_id_photo\"));\n        initHook(new EnableIdPhoto(), mPrefsMap.getBoolean(\"gallery_enable_magic_matting\"));\n        initHook(new EnableVideoPost(), mPrefsMap.getBoolean(\"gallery_enable_video_post\"));\n        initHook(new EnableVideoPost(), mPrefsMap.getBoolean(\"gallery_enable_video_editor\"));\n        initHook(new EnableOcr(), mPrefsMap.getBoolean(\"gallery_enable_ocr\"));\n        initHook(new EnableOcrForm(), mPrefsMap.getBoolean(\"gallery_enable_ocr_form\"));\n        initHook(UnlockSuperClipboard.INSTANCE, mPrefsMap.getBoolean(\"various_super_clipboard_enable\"));\n    }\n}\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/GlobalActions.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogE;\nimport static java.lang.System.currentTimeMillis;\n\nimport android.annotation.SuppressLint;\nimport android.app.ActivityManager;\nimport android.content.BroadcastReceiver;\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.media.AudioManager;\nimport android.os.SystemClock;\nimport android.os.UserHandle;\nimport android.provider.Settings;\nimport android.view.KeyEvent;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\n@SuppressLint(\"UnspecifiedRegisterReceiverFlag\")\npublic class GlobalActions extends BaseHook {\n\n\n    @Override\n    public void init() {\n        setupGlobalActions();\n        setupRestartActions();\n    }\n\n    // GlobalActions\n    public void setupGlobalActions() {\n        hookAllConstructors(\"com.android.server.accessibility.AccessibilityManagerService\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mGlobalContext = (Context) param.args[0];\n                IntentFilter mFilter = new IntentFilter();\n                // Actions\n                mFilter.addAction(ACTION_PREFIX + \"ToggleColorInversion\");\n                mFilter.addAction(ACTION_PREFIX + \"LockScreen\");\n                mFilter.addAction(ACTION_PREFIX + \"GoToSleep\");\n                mFilter.addAction(ACTION_PREFIX + \"ScreenCapture\");\n                mFilter.addAction(ACTION_PREFIX + \"OpenPowerMenu\");\n                mFilter.addAction(ACTION_PREFIX + \"LaunchIntent\");\n                mGlobalContext.registerReceiver(mGlobalReceiver, mFilter);\n            }\n        });\n    }\n\n    public static void proxySystemProperties(String method, String prop, String val, ClassLoader classLoader) {\n        XposedHelpers.callStaticMethod(XposedHelpers.findClassIfExists(\"android.os.SystemProperties\", classLoader),\n            method, prop, val);\n    }\n\n    @SuppressLint(\"UnsafeIntentLaunch\")\n    private final BroadcastReceiver mGlobalReceiver = new BroadcastReceiver() {\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            try {\n                Class<?> clsWMG = findClass(\"android.view.WindowManagerGlobal\", null);\n                Object wms = XposedHelpers.callStaticMethod(clsWMG, \"getWindowManagerService\");\n\n                String action = intent.getAction();\n\n                switch (action) {\n                    case ACTION_PREFIX + \"ToggleColorInversion\" -> {\n                        int opt = Settings.Secure.getInt(context.getContentResolver(), \"accessibility_display_inversion_enabled\");\n                        int conflictProp = (int) Helpers.proxySystemProperties(\"getInt\", \"ro.df.effect.conflict\", 0, null);\n                        int conflictProp2 = (int) Helpers.proxySystemProperties(\"getInt\", \"ro.vendor.df.effect.conflict\", 0, null);\n                        boolean hasConflict = conflictProp == 1 || conflictProp2 == 1;\n                        Object dfMgr = XposedHelpers.callStaticMethod(XposedHelpers.findClass(\"miui.hardware.display.DisplayFeatureManager\", null), \"getInstance\");\n                        if (hasConflict && opt == 0) {\n                            XposedHelpers.callMethod(dfMgr, \"setScreenEffect\", 15, 1);\n                        }\n                        Settings.Secure.putInt(context.getContentResolver(), \"accessibility_display_inversion_enabled\", opt == 0 ? 1 : 0);\n                        if (hasConflict && opt != 0) {\n                            XposedHelpers.callMethod(dfMgr, \"setScreenEffect\", 15, 0);\n                        }\n                    }\n\n                    case ACTION_PREFIX + \"LockScreen\" -> {\n                        XposedHelpers.callMethod(context.getSystemService(Context.POWER_SERVICE), \"goToSleep\", SystemClock.uptimeMillis());\n                        XposedHelpers.callMethod(wms, \"lockNow\", (Object) null);\n                    }\n                    case ACTION_PREFIX + \"GoToSleep\" ->\n                        XposedHelpers.callMethod(context.getSystemService(Context.POWER_SERVICE), \"goToSleep\", SystemClock.uptimeMillis());\n\n                    case ACTION_PREFIX + \"ScreenCapture\" ->\n                        context.sendBroadcast(new Intent(\"android.intent.action.CAPTURE_SCREENSHOT\"));\n\n                    case ACTION_PREFIX + \"OpenPowerMenu\" -> {\n                        clsWMG = findClass(\"android.view.WindowManagerGlobal\");\n                        wms = XposedHelpers.callStaticMethod(clsWMG, \"getWindowManagerService\");\n                        XposedHelpers.callMethod(wms, \"showGlobalActions\");\n                    }\n\n                    case ACTION_PREFIX + \"LaunchIntent\" -> {\n                        Intent launchIntent = intent.getParcelableExtra(\"intent\");\n                        if (launchIntent != null) {\n                            int user = 0;\n                            if (launchIntent.hasExtra(\"user\")) {\n                                user = launchIntent.getIntExtra(\"user\", 0);\n                                launchIntent.removeExtra(\"user\");\n                            }\n                            if (user != 0) {\n                                XposedHelpers.callMethod(context, \"startActivityAsUser\", launchIntent, XposedHelpers.newInstance(UserHandle.class, user));\n                            } else {\n                                context.startActivity(launchIntent);\n                            }\n                        }\n                    }\n                }\n            } catch (Throwable t) {\n                LogD(TAG, \"onReceive\", t);\n            }\n        }\n    };\n\n    /**\n     * RestartActions\n     */\n    public void setupRestartActions() {\n        hookAllMethods(\"com.android.server.policy.PhoneWindowManager\", \"init\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                IntentFilter intentfilter = new IntentFilter();\n                intentfilter.addAction(ACTION_PREFIX + \"RestartApps\");\n                mContext.registerReceiver(mRestartReceiver, intentfilter);\n            }\n        });\n    }\n\n    private static void forceStopPackage(Context context, String packageName) {\n        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);\n        XposedHelpers.callMethod(am, \"forceStopPackage\", packageName);\n    }\n\n    private static final BroadcastReceiver mRestartReceiver = new BroadcastReceiver() {\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            try {\n                String action = intent.getAction();\n                if (action == null) {\n                    return;\n                }\n\n                if ((ACTION_PREFIX + \"RestartApps\").equals(action)) {\n                    forceStopPackage(context, intent.getStringExtra(\"packageName\"));\n                }\n            } catch (Exception e) {\n                LogE(\"GlobalActions\", null, e);\n            }\n        }\n    };\n\n\n    public static boolean handleAction(Context context, String key) {\n        return handleAction(context, key, false);\n    }\n\n    public static boolean handleAction(Context context, String key, boolean skipLock) {\n        if (key == null || key.isEmpty()) {\n            return false;\n        }\n        int action = PrefsUtils.getSharedIntPrefs(context, key + \"_action\", 0);\n        if (action <= 0) {\n            return false;\n        }\n        if (action >= 85 && action <= 88) {\n            if (GlobalActions.isMediaActionsAllowed(context)) {\n                GlobalActions.sendDownUpKeyEvent(context, action, false);\n            }\n            return true;\n        }\n        return switch (action) {\n            case 1 -> setAction(context, \"OpenNotificationCenter\");\n            case 2 -> setAction(context, \"ClearMemory\");\n            case 3 -> setAction(context, \"ToggleColorInversion\");\n            case 4 -> setAction(context, \"LockScreen\");\n            case 5 -> setAction(context, \"GoToSleep\");\n            case 6 -> setAction(context, \"ScreenCapture\");\n            case 7 -> setAction(context, \"OpenRecents\");\n            case 8 -> setAction(context, \"OpenVolumeDialog\");\n            case 12 -> setAction(context, \"OpenPowerMenu\");\n            case 13 -> launchAppIntent(context, key, skipLock);\n            /*\n            case 3: return expandEQS(context);\n            case 6: return takeScreenshot(context);\n            case 7: return openRecents(context);\n            case 8: return launchAppIntent(context, key, skipLock);\n            case 9: return launchShortcutIntent(context, key, skipLock);\n            case 20: return launchActivityIntent(context, key, skipLock);\n            case 10: return toggleThis(context, Helpers.getSharedIntPref(context, key + \"_toggle\", 0));\n            case 11: return switchToPrevApp(context);\n            case 12: return openPowerMenu(context);\n            case 15: return goBack(context);\n            case 16: return simulateMenu(context);\n            case 18: return volumeUp(context);\n            case 19: return volumeDown(context);\n            case 21: return switchKeyboard(context);\n            case 22: return switchOneHandedLeft(context);\n            case 23: return switchOneHandedRight(context);\n            case 24: return forceClose(context);*/\n            default -> false;\n        };\n    }\n\n\n    // Actions\n    public static boolean setAction(Context context, String action) {\n        try {\n            context.sendBroadcast(new Intent(ACTION_PREFIX + action));\n            return true;\n        } catch (Throwable t) {\n            LogD(\"GlobalActions\", \"setAction\", t);\n            return false;\n        }\n    }\n\n    /*public static boolean openNotificationCenter(Context context) {\n        try {\n            context.sendBroadcast(new Intent(ACTION_PREFIX + \"ExpandNotifications\"));\n            return true;\n        } catch (Throwable t) {\n            LogUtils.log(t);\n            return false;\n        }\n    }\n\n    public static boolean goToSleep(Context context) {\n        try {\n            context.sendBroadcast(new Intent(ACTION_PREFIX + \"GoToSleep\"));\n            return true;\n        } catch (Throwable t) {\n            LogUtils.log(t);\n            return false;\n        }\n    }*/\n\n\n    public static boolean isMediaActionsAllowed(Context mContext) {\n        AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);\n        boolean isMusicActive = am.isMusicActive();\n        boolean isMusicActiveRemotely = (Boolean) XposedHelpers.callMethod(am, \"isMusicActiveRemotely\");\n        boolean isAllowed = isMusicActive || isMusicActiveRemotely;\n        if (!isAllowed) {\n            long mCurrentTime = currentTimeMillis();\n            long mLastPauseTime = Settings.System.getLong(mContext.getContentResolver(), \"last_music_paused_time\", mCurrentTime);\n            if (mCurrentTime - mLastPauseTime < 10 * 60 * 1000) {\n                isAllowed = true;\n            }\n        }\n        return isAllowed;\n    }\n\n    public static void sendDownUpKeyEvent(Context mContext, int keyCode, boolean vibrate) {\n        AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);\n        am.dispatchMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));\n        am.dispatchMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));\n\n        if (vibrate && PrefsUtils.getSharedBoolPrefs(mContext, \"prefs_key_controls_volumemedia_vibrate\", true)) ;\n        /*Helpers.performStrongVibration(mContext, PrefsUtils.getSharedBoolPrefs(mContext, \"prefa_key_controls_volumemedia_vibrate_ignore\", false));*/\n    }\n\n    public static boolean launchAppIntent(Context context, String key, boolean skipLock) {\n        return launchIntent(context, getIntent(context, key, IntentType.APP, skipLock));\n    }\n\n    public static boolean launchIntent(Context context, Intent intent) {\n        if (intent == null) {\n            return false;\n        }\n        Intent bIntent = new Intent(ACTION_PREFIX + \"LaunchIntent\");\n        bIntent.putExtra(\"intent\", intent);\n        context.sendBroadcast(bIntent);\n        return true;\n    }\n\n    enum IntentType {\n        APP, ACTIVITY, SHORTCUT\n    }\n\n    public static Intent getIntent(Context context, String prefs, IntentType intentType, boolean skipLock) {\n        try {\n            if (intentType == IntentType.APP) {\n                prefs += \"_app\";\n            } else if (intentType == IntentType.ACTIVITY) {\n                prefs += \"_activity\";\n            } else if (intentType == IntentType.SHORTCUT) {\n                prefs += \"_shortcut_intent\";\n            }\n\n            String prefValue = PrefsUtils.getSharedStringPrefs(context, prefs, null);\n            if (prefValue == null) return null;\n\n            Intent intent = new Intent();\n            if (intentType == IntentType.SHORTCUT) {\n                intent = Intent.parseUri(prefValue, 0);\n            } else {\n                String[] pkgAppArray = prefValue.split(\"\\\\|\");\n                if (pkgAppArray.length < 2) {\n                    return null;\n                }\n                ComponentName name = new ComponentName(pkgAppArray[0], pkgAppArray[1]);\n                intent.setComponent(name);\n                int user = PrefsUtils.getSharedIntPrefs(context, prefs + \"_user\", 0);\n                if (user != 0) {\n                    intent.putExtra(\"user\", user);\n                }\n            }\n            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);\n\n            if (intentType == IntentType.APP) {\n                intent.setAction(Intent.ACTION_MAIN);\n                intent.addCategory(Intent.CATEGORY_LAUNCHER);\n            }\n\n            if (skipLock) {\n                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);\n                intent.putExtra(\"ShowCameraWhenLocked\", true);\n                intent.putExtra(\"StartActivityWhenLocked\", true);\n            }\n\n            return intent;\n        } catch (Throwable t) {\n            LogD(\"GlobalActions\", \"getIntent\", t);\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/GuardProvider.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.guardprovider.DisableUploadAppListNew;\n\npublic class GuardProvider extends BaseModule {\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(DisableUploadAppListNew.INSTANCE, mPrefsMap.getBoolean(\"disable_upload_applist\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Home.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.home.AllAppsBlur;\nimport com.sevtinge.cemiuiler.module.hook.home.AnimDurationRatio;\nimport com.sevtinge.cemiuiler.module.hook.home.FreeFormCountForHome;\nimport com.sevtinge.cemiuiler.module.hook.home.HideNavigationBar;\nimport com.sevtinge.cemiuiler.module.hook.home.HomePortraitReverse;\nimport com.sevtinge.cemiuiler.module.hook.home.MaxFreeForm;\nimport com.sevtinge.cemiuiler.module.hook.home.ScreenSwipe;\nimport com.sevtinge.cemiuiler.module.hook.home.SeekPoints;\nimport com.sevtinge.cemiuiler.module.hook.home.SetDeviceLevel;\nimport com.sevtinge.cemiuiler.module.hook.home.StickyFloatingWindowsForHome;\nimport com.sevtinge.cemiuiler.module.hook.home.ToastSlideAgain;\nimport com.sevtinge.cemiuiler.module.hook.home.UnlockHotseatIcon;\nimport com.sevtinge.cemiuiler.module.hook.home.UserPresentAnimation;\nimport com.sevtinge.cemiuiler.module.hook.home.WidgetCornerRadius;\nimport com.sevtinge.cemiuiler.module.hook.home.WidgetCrack;\nimport com.sevtinge.cemiuiler.module.hook.home.dock.DisableRecentsIcon;\nimport com.sevtinge.cemiuiler.module.hook.home.dock.DockCustom;\nimport com.sevtinge.cemiuiler.module.hook.home.dock.FoldDeviceDock;\nimport com.sevtinge.cemiuiler.module.hook.home.dock.FoldDock;\nimport com.sevtinge.cemiuiler.module.hook.home.dock.HideSeekPoint;\nimport com.sevtinge.cemiuiler.module.hook.home.dock.ShowDockIconTitle;\nimport com.sevtinge.cemiuiler.module.hook.home.drawer.AllAppsContainerViewBlur;\nimport com.sevtinge.cemiuiler.module.hook.home.drawer.AppDrawer;\nimport com.sevtinge.cemiuiler.module.hook.home.drawer.PinyinArrangement;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.BigFolderIcon;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.BigFolderIconBlur;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.BigFolderIconBlur1x2;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.BigFolderIconBlur2x1;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.BigFolderItemMaxCount;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.FolderAnimation;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.FolderAutoClose;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.FolderBlur;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.FolderColumns;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.FolderShade;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.FolderVerticalPadding;\nimport com.sevtinge.cemiuiler.module.hook.home.folder.SmallFolderIconBlur;\nimport com.sevtinge.cemiuiler.module.hook.home.gesture.DoubleTap;\nimport com.sevtinge.cemiuiler.module.hook.home.gesture.HotSeatSwipe;\nimport com.sevtinge.cemiuiler.module.hook.home.gesture.QuickBack;\nimport com.sevtinge.cemiuiler.module.hook.home.gesture.ShakeDevice;\nimport com.sevtinge.cemiuiler.module.hook.home.layout.HotSeatsHeight;\nimport com.sevtinge.cemiuiler.module.hook.home.layout.HotSeatsMarginBottom;\nimport com.sevtinge.cemiuiler.module.hook.home.layout.HotSeatsMarginTop;\nimport com.sevtinge.cemiuiler.module.hook.home.layout.SearchBarMarginBottom;\nimport com.sevtinge.cemiuiler.module.hook.home.layout.UnlockGrids;\nimport com.sevtinge.cemiuiler.module.hook.home.layout.WorkspacePadding;\nimport com.sevtinge.cemiuiler.module.hook.home.mipad.EnableHideGestureLine;\nimport com.sevtinge.cemiuiler.module.hook.home.mipad.EnableMoreSetting;\nimport com.sevtinge.cemiuiler.module.hook.home.navigation.BackGestureAreaHeight;\nimport com.sevtinge.cemiuiler.module.hook.home.navigation.BackGestureAreaWidth;\nimport com.sevtinge.cemiuiler.module.hook.home.other.AlwaysBlurWallpaper;\nimport com.sevtinge.cemiuiler.module.hook.home.other.AlwaysShowStatusClock;\nimport com.sevtinge.cemiuiler.module.hook.home.other.BlurRadius;\nimport com.sevtinge.cemiuiler.module.hook.home.other.BlurWhenShowShortcutMenu;\nimport com.sevtinge.cemiuiler.module.hook.home.other.DisableHideGoogle;\nimport com.sevtinge.cemiuiler.module.hook.home.other.FixAndroidRS;\nimport com.sevtinge.cemiuiler.module.hook.home.other.FreeformShortcutMenu;\nimport com.sevtinge.cemiuiler.module.hook.home.other.HomeMode;\nimport com.sevtinge.cemiuiler.module.hook.home.other.InfiniteScroll;\nimport com.sevtinge.cemiuiler.module.hook.home.other.OverlapMode;\nimport com.sevtinge.cemiuiler.module.hook.home.other.ShortcutItemCount;\nimport com.sevtinge.cemiuiler.module.hook.home.other.ShowAllHideApp;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.AlwaysShowCleanUp;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.BlurLevel;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.CardTextColor;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.CardTextSize;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.DisableRecentViewWallpaperDarken;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.FreeformCardBackgroundColor;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.HideCleanUp;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.HideFreeform;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.HideStatusBarWhenEnterRecent;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.MemInfoShow;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.RealMemory;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.RecentResource;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.RecentText;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.RemoveCardAnim;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.RemoveIcon;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.TaskViewHorizontal;\nimport com.sevtinge.cemiuiler.module.hook.home.recent.TaskViewVertical;\nimport com.sevtinge.cemiuiler.module.hook.home.title.AnimParamCustom;\nimport com.sevtinge.cemiuiler.module.hook.home.title.BigIconCorner;\nimport com.sevtinge.cemiuiler.module.hook.home.title.DisableHideFile;\nimport com.sevtinge.cemiuiler.module.hook.home.title.DisableHideTheme;\nimport com.sevtinge.cemiuiler.module.hook.home.title.DownloadAnimation;\nimport com.sevtinge.cemiuiler.module.hook.home.title.EnableIconMonoChrome;\nimport com.sevtinge.cemiuiler.module.hook.home.title.FixAnimation;\nimport com.sevtinge.cemiuiler.module.hook.home.title.HiddenAllTitle;\nimport com.sevtinge.cemiuiler.module.hook.home.title.IconTitleColor;\nimport com.sevtinge.cemiuiler.module.hook.home.title.LargeIconCornerRadius;\nimport com.sevtinge.cemiuiler.module.hook.home.title.NewInstallIndicator;\nimport com.sevtinge.cemiuiler.module.hook.home.title.PerfectIcon;\nimport com.sevtinge.cemiuiler.module.hook.home.title.TitleFontSize;\nimport com.sevtinge.cemiuiler.module.hook.home.title.TitleMarquee;\nimport com.sevtinge.cemiuiler.module.hook.home.widget.AllWidgetAnimation;\nimport com.sevtinge.cemiuiler.module.hook.home.widget.AllowMoveAllWidgetToMinus;\nimport com.sevtinge.cemiuiler.module.hook.home.widget.AlwaysShowMiuiWidget;\nimport com.sevtinge.cemiuiler.module.hook.home.widget.HideWidgetTitles;\nimport com.sevtinge.cemiuiler.module.hook.home.widget.ResizableWidgets;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.mipad.SetGestureNeedFingerNum;\n\nimport java.util.Objects;\n\npublic class Home extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n\n        // 手势\n        initHook(new QuickBack(), mPrefsMap.getBoolean(\"home_navigation_quick_back\"));\n        initHook(new DoubleTap(), mPrefsMap.getInt(\"home_gesture_double_tap_action\", 0) > 0);\n        initHook(new ScreenSwipe(), mPrefsMap.getInt(\"home_gesture_up_swipe_action\", 0) > 0 ||\n            mPrefsMap.getInt(\"home_gesture_down_swipe_action\", 0) > 0 ||\n            mPrefsMap.getInt(\"home_gesture_up_swipe2_action\", 0) > 0 ||\n            mPrefsMap.getInt(\"home_gesture_down_swipe2_action\", 0) > 0);\n        initHook(new HotSeatSwipe(), mPrefsMap.getInt(\"home_gesture_left_swipe_action\", 0) > 0\n            || mPrefsMap.getInt(\"home_gesture_right_swipe_action\", 0) > 0);\n        initHook(new ShakeDevice(), mPrefsMap.getInt(\"home_gesture_shake_action\", 0) > 0);\n        // initHook(new SwipeAndStop(), mPrefsMap.getInt(\"home_gesture_swipe_and_stop_action\" ,0) > 0);\n\n        initHook(new BackGestureAreaHeight(), mPrefsMap.getInt(\"home_navigation_back_area_height\", 60) != 60);\n        initHook(new BackGestureAreaWidth(), mPrefsMap.getInt(\"home_navigation_back_area_width\", 100) != 100);\n\n        // 布局\n        initHook(new UnlockGrids(), mPrefsMap.getBoolean(\"home_layout_unlock_grids\"));\n        // initHook(new UnlockGridsNoWord(), mPrefsMap.getBoolean(\"home_layout_unlock_grids_no_word\"));\n        initHook(new WorkspacePadding(), mPrefsMap.getBoolean(\"home_layout_workspace_padding_bottom_enable\") ||\n            mPrefsMap.getBoolean(\"home_layout_workspace_padding_top_enable\"));\n\n        initHook(new HotSeatsHeight(), mPrefsMap.getBoolean(\"home_layout_hotseats_height_enable\"));\n        initHook(new HotSeatsMarginTop(), mPrefsMap.getBoolean(\"home_layout_hotseats_margin_top_enable\"));\n        initHook(new HotSeatsMarginBottom(), mPrefsMap.getBoolean(\"home_layout_hotseats_margin_bottom_enable\"));\n        initHook(new SearchBarMarginBottom(), (mPrefsMap.getInt(\"home_layout_searchbar_margin_bottom\", 0) > 0) &&\n            mPrefsMap.getBoolean(\"home_layout_searchbar_margin_bottom_enable\"));\n\n\n        // 文件夹\n        initHook(FolderAutoClose.INSTANCE, mPrefsMap.getBoolean(\"home_folder_auto_close\"));\n        initHook(new FolderShade(), mPrefsMap.getStringAsInt(\"home_folder_shade\", 1) > 0);\n        initHook(FolderColumns.INSTANCE, mPrefsMap.getInt(\"home_folder_columns\", 3) != 3 ||\n            mPrefsMap.getBoolean(\"home_folder_width\"));\n        initHook(new FolderAnimation(), mPrefsMap.getBoolean(\"home_folder_animation\"));\n        initHook(new SmallFolderIconBlur(), mPrefsMap.getBoolean(\"home_small_folder_icon_bg\"));\n        initHook(FolderVerticalPadding.INSTANCE, mPrefsMap.getInt(\"home_folder_vertical_padding\", 0) != 0);\n\n        initHook(new BigFolderIcon(), false);\n        initHook(new BigFolderIconBlur2x1(), mPrefsMap.getBoolean(\"home_big_folder_icon_bg_2x1\"));\n        initHook(new BigFolderIconBlur1x2(), mPrefsMap.getBoolean(\"home_big_folder_icon_bg_1x2\"));\n        initHook(new BigFolderIconBlur(), mPrefsMap.getBoolean(\"home_big_folder_icon_bg\"));\n        initHook(new BigFolderItemMaxCount(), mPrefsMap.getBoolean(\"home_big_folder_item_max_count\"));\n\n        // 抽屉\n        initHook(AppDrawer.INSTANCE, mPrefsMap.getBoolean(\"home_drawer_all\") ||\n            mPrefsMap.getBoolean(\"home_drawer_editor\"));\n        initHook(AllAppsContainerViewBlur.INSTANCE, mPrefsMap.getBoolean(\"home_drawer_blur\") && !isAndroidR());\n        initHook(new PinyinArrangement(), mPrefsMap.getBoolean(\"home_drawer_pinyin\"));\n\n        // 最近任务\n        initHook(BlurLevel.INSTANCE, mPrefsMap.getStringAsInt(\"home_recent_blur_level\", 6) != 6);\n        initHook(DisableRecentViewWallpaperDarken.INSTANCE, mPrefsMap.getBoolean(\"home_recent_disable_wallpaper_dimming\"));\n        initHook(HideStatusBarWhenEnterRecent.INSTANCE, true);\n        initHook(RemoveCardAnim.INSTANCE, mPrefsMap.getBoolean(\"home_recent_modify_animation\"));\n        initHook(TaskViewHorizontal.INSTANCE);\n        initHook(TaskViewVertical.INSTANCE);\n        initHook(HideFreeform.INSTANCE, mPrefsMap.getBoolean(\"home_recent_hide_freeform\"));\n        initHook(HideCleanUp.INSTANCE, mPrefsMap.getBoolean(\"home_recent_hide_clean_up\"));\n        initHook(FreeformCardBackgroundColor.INSTANCE);\n        initHook(CardTextColor.INSTANCE);\n        initHook(CardTextSize.INSTANCE);\n        initHook(RecentText.INSTANCE, !Objects.equals(mPrefsMap.getString(\"home_recent_text\", \"\"), \"\"));\n        initHook(RemoveIcon.INSTANCE, mPrefsMap.getBoolean(\"home_recent_remove_icon\"));\n        initHook(RecentResource.INSTANCE, mPrefsMap.getInt(\"task_view_corners\", 20) != 20 ||\n            mPrefsMap.getInt(\"task_view_header_height\", 40) != 40);\n        initHook(RealMemory.INSTANCE, mPrefsMap.getBoolean(\"home_recent_show_real_memory\"));\n        initHook(MemInfoShow.INSTANCE, mPrefsMap.getBoolean(\"home_recent_show_memory_info\") && isPad());\n        initHook(AlwaysShowCleanUp.INSTANCE, mPrefsMap.getBoolean(\"always_show_clean_up\"));\n\n        // 图标\n        initHook(BigIconCorner.INSTANCE, mPrefsMap.getBoolean(\"home_title_big_icon_corner\"));\n        initHook(new DownloadAnimation(), mPrefsMap.getBoolean(\"home_title_download_animation\"));\n        initHook(DisableHideTheme.INSTANCE, mPrefsMap.getBoolean(\"home_title_disable_hide_theme\"));\n        initHook(DisableHideFile.INSTANCE, mPrefsMap.getBoolean(\"home_title_disable_hide_file\"));\n        initHook(new AnimParamCustom(), mPrefsMap.getBoolean(\"home_title_custom_anim_param_main\"));\n        // initHook(new IconScaleHook()/*, mPrefsMap.getInt(\"home_title_icon_scale\", 100) != 100*/);\n\n        // 标题\n        initHook(new TitleMarquee(), mPrefsMap.getBoolean(\"home_title_title_marquee\"));\n        initHook(new NewInstallIndicator(), mPrefsMap.getBoolean(\"home_title_title_new_install\"));\n        initHook(new HiddenAllTitle(), mPrefsMap.getBoolean(\"home_drawer_font_hidden\"));\n        initHook(new TitleFontSize(), mPrefsMap.getInt(\"home_title_font_size\", 12) != 12);\n        initHook(IconTitleColor.INSTANCE);\n        initHook(new UnlockHotseatIcon(), mPrefsMap.getBoolean(\"home_dock_unlock_hotseat\"));\n\n        // 小部件\n        initHook(new AllWidgetAnimation(), mPrefsMap.getBoolean(\"home_widget_all_widget_animation\"));\n        initHook(AlwaysShowMiuiWidget.INSTANCE, mPrefsMap.getBoolean(\"home_widget_show_miui_widget\"));\n        initHook(AllowMoveAllWidgetToMinus.INSTANCE, mPrefsMap.getBoolean(\"home_widget_allow_moved_to_minus_one_screen\"));\n        initHook(new WidgetCornerRadius(), mPrefsMap.getInt(\"home_widget_corner_radius\", 0) > 0);\n        initHook(HideWidgetTitles.INSTANCE, mPrefsMap.getBoolean(\"home_widget_hide_title\"));\n        initHook(ResizableWidgets.INSTANCE, mPrefsMap.getBoolean(\"home_widget_resizable\"));\n\n        // 底栏\n        initHook(new DockCustom(), mPrefsMap.getBoolean(\"home_dock_bg_custom_enable\"));\n        initHook(new SeekPoints(), mPrefsMap.getStringAsInt(\"home_other_seek_points\", 0) > 0);\n        initHook(FoldDeviceDock.INSTANCE, mPrefsMap.getBoolean(\"home_dock_fold\"));\n        initHook(HideSeekPoint.INSTANCE, mPrefsMap.getBoolean(\"home_dock_hide_seekpoint\"));\n        initHook(ShowDockIconTitle.INSTANCE, mPrefsMap.getBoolean(\"home_dock_icon_title\"));\n        initHook(new HideNavigationBar(), mPrefsMap.getBoolean(\"system_ui_hide_navigation_bar\"));\n        initHook(DisableRecentsIcon.INSTANCE, mPrefsMap.getBoolean(\"home_dock_disable_recents_icon\"));\n\n        // 其他\n        initHook(new HomeMode(), mPrefsMap.getStringAsInt(\"home_other_home_mode\", 0) > 0);\n        initHook(AlwaysShowStatusClock.INSTANCE, mPrefsMap.getBoolean(\"home_other_show_clock\"));\n        initHook(new InfiniteScroll(), mPrefsMap.getBoolean(\"home_other_infinite_scroll\"));\n        initHook(new FreeformShortcutMenu(), (mPrefsMap.getBoolean(\"home_other_freeform_shortcut_menu\") || (mPrefsMap.getBoolean(\"home_other_tasks_shortcut_menu\"))));\n        initHook(new UserPresentAnimation(), mPrefsMap.getBoolean(\"home_other_user_present_animation\"));\n        initHook(new PerfectIcon(), mPrefsMap.getBoolean(\"home_other_perfect_icon\"));\n        initHook(new EnableIconMonoChrome(), mPrefsMap.getBoolean(\"home_other_icon_mono_chrome\"));\n        initHook(new HomePortraitReverse(), mPrefsMap.getBoolean(\"home_other_portrait_reverse\"));\n        initHook(AlwaysBlurWallpaper.INSTANCE, mPrefsMap.getBoolean(\"home_other_always_blur_launcher_wallpaper\"));\n        initHook(BlurRadius.INSTANCE, mPrefsMap.getInt(\"home_other_blur_radius\", 100) != 100);\n        initHook(ShortcutItemCount.INSTANCE, mPrefsMap.getBoolean(\"home_other_shortcut_remove_restrictions\"));\n        initHook(DisableHideGoogle.INSTANCE, mPrefsMap.getBoolean(\"home_other_disable_hide_google\"));\n        initHook(ShowAllHideApp.INSTANCE); // 桌面快捷方式管理\n        initHook(FixAndroidRS.INSTANCE, mPrefsMap.getBoolean(\"home_other_fix_android_r_s\"));\n\n        // 实验性功能\n        initHook(BlurWhenShowShortcutMenu.INSTANCE, mPrefsMap.getBoolean(\"home_other_shortcut_background_blur\") && !isAndroidR());\n        initHook(FolderBlur.INSTANCE, mPrefsMap.getBoolean(\"home_folder_blur\") && !isAndroidR());\n        initHook(new FoldDock(), mPrefsMap.getBoolean(\"home_other_fold_dock\"));\n        initHook(new AllAppsBlur(), !isAndroidR());\n        initHook(new FixAnimation(), mPrefsMap.getBoolean(\"home_title_fix_animation\"));\n        initHook(new LargeIconCornerRadius(), mPrefsMap.getBoolean(\"home_large_icon_enable\"));\n\n        // 多小窗\n        initHook(new FreeFormCountForHome(), mPrefsMap.getBoolean(\"system_framework_freeform_count\"));\n        initHook(new MaxFreeForm(), mPrefsMap.getBoolean(\"system_framework_freeform_count\"));\n\n        // Fold2样式负一屏\n        initHook(new OverlapMode(), mPrefsMap.getBoolean(\"personal_assistant_overlap_mode\") && !isAndroidR());\n\n        // Other\n        initHook(new ToastSlideAgain(), mPrefsMap.getBoolean(\"home_other_toast_slide_again\"));\n        initHook(new StickyFloatingWindowsForHome(), mPrefsMap.getBoolean(\"system_framework_freeform_sticky\"));\n        initHook(new WidgetCrack(), mPrefsMap.getBoolean(\"various_enable_super_function\") && mPrefsMap.getBoolean(\"personal_assistant_widget_crack\"));\n        initHook(AnimDurationRatio.INSTANCE, true);\n        initHook(SetDeviceLevel.INSTANCE, mPrefsMap.getBoolean(\"home_other_high_models\"));\n\n        // 小米/红米平板相关\n        boolean mMoreSetting = mPrefsMap.getBoolean(\"home_other_mi_pad_enable_more_setting\") && isPad();\n        initHook(SetGestureNeedFingerNum.INSTANCE, mPrefsMap.getBoolean(\"mipad_input_need_finger_num\") && isPad());\n        initHook(EnableMoreSetting.INSTANCE, mMoreSetting);\n        initHook(EnableHideGestureLine.INSTANCE, mMoreSetting);\n\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/InCallUi.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.incallui.AnswerInHeadUp;\nimport com.sevtinge.cemiuiler.module.hook.incallui.HideCrbt;\n\npublic class InCallUi extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new HideCrbt(), mPrefsMap.getBoolean(\"incallui_hide_crbt\"));\n        initHook(new AnswerInHeadUp(), mPrefsMap.getBoolean(\"incallui_answer_in_head_up\"));\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Joyose.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.joyose.DisableCloudControl;\nimport com.sevtinge.cemiuiler.module.hook.joyose.EnableGpuTuner;\n\npublic class Joyose extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(DisableCloudControl.INSTANCE, mPrefsMap.getBoolean(\"various_disable_cloud_control\"));\n        initHook(EnableGpuTuner.INSTANCE, mPrefsMap.getBoolean(\"joyose_enable_gpu_tuner\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Lbe.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.lbe.DisableClipboardTip;\n\npublic class Lbe extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(DisableClipboardTip.INSTANCE, mPrefsMap.getBoolean(\"lbe_clipboard_tip_toast\"));\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Market.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.market.DeviceModify;\n\npublic class Market extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new DeviceModify(), mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) != 0);;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/MediaEditor.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.mediaeditor.FilterManagerAll;\nimport com.sevtinge.cemiuiler.module.hook.mediaeditor.UnlockMinimumCropLimitNew;\n\npublic class MediaEditor extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(UnlockMinimumCropLimitNew.INSTANCE, mPrefsMap.getBoolean(\"mediaeditor_unlock_minimum_crop_limit\"));\n        initHook(FilterManagerAll.INSTANCE, mPrefsMap.getBoolean(\"mediaeditor_filter_manager\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/MiLink.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.milink.UnlockMiShare;\n\npublic class MiLink extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new UnlockMiShare(), mPrefsMap.getBoolean(\"milink_unlock_mishare\"));\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/MiSettings.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.misettings.CustomRefreshRate;\nimport com.sevtinge.cemiuiler.module.hook.misettings.ShowMoreFpsList;\n\npublic class MiSettings extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(CustomRefreshRate.INSTANCE, mPrefsMap.getBoolean(\"various_custom_refresh_rate\"));\n        initHook(ShowMoreFpsList.INSTANCE, mPrefsMap.getBoolean(\"mi_settings_show_fps\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/MiShare.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.mishare.NoAutoTurnOff;\nimport com.sevtinge.cemiuiler.module.hook.mishare.UnlockTurboMode;\n\npublic class MiShare extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(NoAutoTurnOff.INSTANCE, mPrefsMap.getBoolean(\"disable_mishare_auto_off\"));\n        initHook(UnlockTurboMode.INSTANCE, mPrefsMap.getBoolean(\"unlock_turbo_mode\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/MiWallpaper.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.miwallpaper.UnlockSuperWallpaper;\n\npublic class MiWallpaper extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new UnlockSuperWallpaper(), mPrefsMap.getBoolean(\"miwallpaper_unlock_super_wallpaper\"));\n    }\n}\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Mirror.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.mirror.UnlockMiuiPlus;\n\npublic class Mirror extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new UnlockMiuiPlus(), mPrefsMap.getBoolean(\"mirror_unlock_miui_plus\"));\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Mms.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.mms.DisableAd;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockSuperClipboard;\n\npublic class Mms extends BaseModule {\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(DisableAd.INSTANCE, mPrefsMap.getBoolean(\"mms_disable_ad\"));\n        initHook(UnlockSuperClipboard.INSTANCE, mPrefsMap.getBoolean(\"various_super_clipboard_enable\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Mtb.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.mtb.BypassAuthentication;\nimport com.sevtinge.cemiuiler.module.hook.mtb.IsUserBuild;\n\npublic class Mtb extends BaseModule {\n    @Override\n    public void handleLoadPackage() {\n        initHook(BypassAuthentication.INSTANCE, mPrefsMap.getBoolean(\"mtb_auth\"));\n        initHook(IsUserBuild.INSTANCE, mPrefsMap.getBoolean(\"mtb_auth\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Music.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.music.DisableAd;\n\npublic class Music extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new DisableAd(), mPrefsMap.getBoolean(\"music_disable_ad\"));\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/NetworkBoost.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.networkboost.LinkTurboToast;\n\npublic class NetworkBoost extends BaseModule {\n    @Override\n    public void handleLoadPackage() {\n        initHook(new LinkTurboToast(), mPrefsMap.getBoolean(\"various_disable_link_turbo_toast\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Nfc.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.nfc.*;\n\npublic class Nfc extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new DisableSound(), mPrefsMap.getBoolean(\"nfc_disable_sound\"));\n        initHook(new AllowInformationScreen(), mPrefsMap.getBoolean(\"nfc_allow_information_screen\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Notes.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockSuperClipboard;\n\npublic class Notes extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(UnlockSuperClipboard.INSTANCE, mPrefsMap.getBoolean(\"various_super_clipboard_enable\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/PackageInstaller.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport android.text.TextUtils;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.AllAsSystemApp;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.DisableAD;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.DisableCountChecking;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.DisableSafeModelTip;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.DisplayMoreApkInfoNew;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.InstallRiskDisable;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.InstallSource;\nimport com.sevtinge.cemiuiler.module.hook.packageinstaller.SafeMode;\n\npublic class PackageInstaller extends BaseModule {\n\n    public void handleLoadPackage() {\n\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n\n        //\n        /*initHook(new MiuiPackageInstallModify(), mPrefsMap.getBoolean(\"miui_package_installer_modify\"));*/\n\n        // 纯净模式\n        initHook(new SafeMode());\n\n        // 禁用广告\n        initHook(DisableAD.INSTANCE, mPrefsMap.getBoolean(\"miui_package_installer_disable_ad\"));\n\n        // 禁用风险检测\n        initHook(InstallRiskDisable.INSTANCE, mPrefsMap.getBoolean(\"miui_package_installer_install_risk\"));\n\n        // 禁用安全守护提示\n        initHook(DisableSafeModelTip.INSTANCE, mPrefsMap.getBoolean(\"miui_package_installer_safe_model_tip\"));\n\n        // 允许更新系统应用\n        initHook(AllAsSystemApp.INSTANCE, mPrefsMap.getBoolean(\"miui_package_installer_update_system_app\"));\n\n        // 自定义安装来源\n        initHook(new InstallSource(), !TextUtils.isEmpty(mPrefsMap.getString(\"miui_package_installer_install_source\", \"com.android.fileexplorer\")));\n\n        // 显示更多安装包信息\n        // initHook(new DisplayMoreApkInfo(), mPrefsMap.getBoolean(\"miui_package_installer_apk_info\"));\n        initHook(DisplayMoreApkInfoNew.INSTANCE, mPrefsMap.getBoolean(\"miui_package_installer_apk_info\"));\n\n        // 禁用频繁安装应用检查\n        initHook(DisableCountChecking.INSTANCE, mPrefsMap.getBoolean(\"miui_package_installer_count_checking\"));\n\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/PersonalAssistant.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.personalassistant.BlurOverlay;\nimport com.sevtinge.cemiuiler.module.hook.personalassistant.BlurPersonalAssistant;\nimport com.sevtinge.cemiuiler.module.hook.personalassistant.BlurPersonalAssistantBackGround;\nimport com.sevtinge.cemiuiler.module.hook.personalassistant.EnableFoldWidget;\nimport com.sevtinge.cemiuiler.module.hook.personalassistant.WidgetCrack;\n\npublic class PersonalAssistant extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n\n        initHook(new BlurOverlay(), false);\n        initHook(new EnableFoldWidget(), mPrefsMap.getBoolean(\"personal_assistant_fold_widget_enable\"));\n\n        if (mPrefsMap.getStringAsInt(\"personal_assistant_value\", 1) != 1 && !isAndroidR()) {\n            initHook(BlurPersonalAssistant.INSTANCE, mPrefsMap.getBoolean(\"pa_enable\"));\n        } else {\n            initHook(BlurPersonalAssistantBackGround.INSTANCE, mPrefsMap.getBoolean(\"pa_enable\"));\n        }\n\n        initHook(new WidgetCrack(), mPrefsMap.getBoolean(\"various_enable_super_function\") && mPrefsMap.getBoolean(\"personal_assistant_widget_crack\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Phone.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.phone.DualNrSupport;\nimport com.sevtinge.cemiuiler.module.hook.phone.DualSaSupport;\nimport com.sevtinge.cemiuiler.module.hook.phone.ModemFeature;\nimport com.sevtinge.cemiuiler.module.hook.phone.N1BandPhone;\nimport com.sevtinge.cemiuiler.module.hook.phone.N28BandPhone;\nimport com.sevtinge.cemiuiler.module.hook.phone.N5N8BandPhone;\nimport com.sevtinge.cemiuiler.module.hook.phone.ViceSlotVolteButton;\n\npublic class Phone extends BaseModule {\n    @Override\n    public void handleLoadPackage() {\n        initHook(ModemFeature.INSTANCE, mPrefsMap.getBoolean(\"phone_smart_dual_sim\"));\n        initHook(ViceSlotVolteButton.INSTANCE, mPrefsMap.getBoolean(\"phone_vice_slot_volte\"));\n\n        initHook(DualNrSupport.INSTANCE, mPrefsMap.getBoolean(\"phone_double_5g_nr\"));\n        initHook(DualSaSupport.INSTANCE, mPrefsMap.getBoolean(\"phone_double_5g_sa\"));\n        initHook(N1BandPhone.INSTANCE, mPrefsMap.getBoolean(\"phone_n1\"));\n        initHook(N5N8BandPhone.INSTANCE, mPrefsMap.getBoolean(\"phone_n5_n8\"));\n        initHook(N28BandPhone.INSTANCE, mPrefsMap.getBoolean(\"phone_n28\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/PowerKeeper.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.powerkeeper.CustomRefreshRate;\nimport com.sevtinge.cemiuiler.module.hook.powerkeeper.DontKillApps;\nimport com.sevtinge.cemiuiler.module.hook.powerkeeper.LockMaxFps;\nimport com.sevtinge.cemiuiler.module.hook.powerkeeper.PreventBatteryWitelist;\n\npublic class PowerKeeper extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(CustomRefreshRate.INSTANCE, mPrefsMap.getBoolean(\"various_custom_refresh_rate\"));\n        initHook(LockMaxFps.INSTANCE, mPrefsMap.getBoolean(\"powerkeeper_lock_max_fps\"));\n        initHook(DontKillApps.INSTANCE, mPrefsMap.getBoolean(\"powerkeeper_do_not_kill_apps\"));\n        initHook(new PreventBatteryWitelist(), mPrefsMap.getBoolean(\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Scanner.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.scanner.EnableCard;\nimport com.sevtinge.cemiuiler.module.hook.scanner.EnableDocPpt;\nimport com.sevtinge.cemiuiler.module.hook.scanner.EnableOcr;\nimport com.sevtinge.cemiuiler.module.hook.scanner.EnableTranslation;\nimport com.sevtinge.cemiuiler.module.hook.scanner.document.EnableDocument;\nimport com.sevtinge.cemiuiler.module.hook.scanner.document.EnableExcel;\nimport com.sevtinge.cemiuiler.module.hook.scanner.document.EnablePpt;\n\npublic class Scanner extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new EnableOcr(), mPrefsMap.getBoolean(\"scanner_ocr\"));\n        initHook(new EnableExcel(), mPrefsMap.getBoolean(\"scanner_excel\"));\n        initHook(new EnablePpt(), mPrefsMap.getBoolean(\"scanner_ppt\"));\n        initHook(new EnableCard(), mPrefsMap.getBoolean(\"scanner_card\"));\n        initHook(new EnableTranslation(), mPrefsMap.getBoolean(\"scanner_translation\"));\n        initHook(new EnableDocument(), mPrefsMap.getBoolean(\"scanner_document\"));\n        initHook(new EnableDocPpt(), mPrefsMap.getBoolean(\"scanner_doc_ppt\"));\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/ScreenRecorder.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.screenrecorder.ForceSupportPlaybackCapture;\nimport com.sevtinge.cemiuiler.module.hook.screenrecorder.SaveToMovies;\nimport com.sevtinge.cemiuiler.module.hook.screenrecorder.ScreenRecorderConfig;\nimport com.sevtinge.cemiuiler.module.hook.screenrecorder.UnlockMoreVolumeFrom;\n\npublic class ScreenRecorder extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(new ForceSupportPlaybackCapture(), mPrefsMap.getBoolean(\"screenrecorder_force_support_playback_capture\"));\n        initHook(new UnlockMoreVolumeFrom(), mPrefsMap.getBoolean(\"screenrecorder_more_volume\"));\n        initHook(ScreenRecorderConfig.INSTANCE, mPrefsMap.getBoolean(\"screenrecorder_config\"));\n        initHook(SaveToMovies.INSTANCE, mPrefsMap.getBoolean(\"screenrecorder_save_to_movies\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/ScreenShot.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport android.text.TextUtils;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.screenshot.DeviceShellCustomize;\nimport com.sevtinge.cemiuiler.module.hook.screenshot.SaveToPictures;\nimport com.sevtinge.cemiuiler.module.hook.screenshot.UnlockMinimumCropLimit;\nimport com.sevtinge.cemiuiler.module.hook.screenshot.UnlockPrivacyMarking;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockSuperClipboard;\n\npublic class ScreenShot extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(UnlockMinimumCropLimit.INSTANCE, mPrefsMap.getBoolean(\"screenshot_unlock_minimum_crop_limit\"));\n        initHook(SaveToPictures.INSTANCE, mPrefsMap.getBoolean(\"screenshot_save_to_pictures\"));\n        initHook(DeviceShellCustomize.INSTANCE, !TextUtils.isEmpty(mPrefsMap.getString(\"screenshot_device_customize\", \"\")));\n        initHook(UnlockPrivacyMarking.INSTANCE, mPrefsMap.getBoolean(\"screenshot_unlock_privacy_marking\"));\n        // 超级剪切板\n        initHook(UnlockSuperClipboard.INSTANCE, mPrefsMap.getBoolean(\"various_super_clipboard_enable\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/SecurityCenter.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.AppLockPinScramble;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.BlurSecurity;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.DisableReport;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.GetBubbleAppString;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.IsSbnBelongToActiveBubbleApp;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.NewBoxBlur;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.RemoveConversationBubbleSettingsRestriction;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.RemoveOpenAppConfirmationPopup;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.SidebarLineCustom;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.VideoDolbyOpen;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.app.AppDefaultSort;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.app.AppDetails;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.app.AppDisable;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.app.AppRestrict;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.app.OpenByDefaultSetting;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.battery.ScreenUsedTime;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.battery.ShowBatteryTemperatureNew;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.battery.UnlockSmartCharge;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.battery.UnlockSuperWirelessCharge;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.beauty.BeautyFace;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.beauty.BeautyLightAuto;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.beauty.BeautyPc;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.beauty.BeautyPrivacy;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.lab.AiClipboardEnable;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.lab.BlurLocationEnable;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.lab.GetNumberEnable;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.other.DisableRootCheck;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.other.FuckRiskPkg;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.other.LockOneHundredPoints;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.other.NoLowBatteryWarning;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.other.SkipCountDownLimit;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.AddSideBarExpandReceiver;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.game.RemoveMacroBlackList;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.game.UnlockGunService;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video.DisableRemoveScreenHoldOn;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video.UnlockEnhanceContours;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video.UnlockMemc;\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video.UnlockSuperResolution;\n\npublic class SecurityCenter extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n\n        // 应用管理\n        initHook(new AppDefaultSort(), mPrefsMap.getStringAsInt(\"security_center_app_default_sort\", 0) > 0);\n        initHook(new AppRestrict(), mPrefsMap.getBoolean(\"security_center_app_restrict\"));\n        initHook(new AppDisable(), mPrefsMap.getBoolean(\"security_center_app_disable\"));\n        initHook(new AppDetails(), mPrefsMap.getBoolean(\"security_center_app_details\"));\n        initHook(DisableReport.INSTANCE, mPrefsMap.getBoolean(\"security_center_disable_ban\"));\n        initHook(OpenByDefaultSetting.INSTANCE, mPrefsMap.getBoolean(\"security_center_app_default_setting\"));\n\n        // 省电与电池\n        // initHook(new ShowBatteryTemperature(), mPrefsMap.getBoolean(\"security_center_show_battery_temperature\"));\n        initHook(ShowBatteryTemperatureNew.INSTANCE, mPrefsMap.getBoolean(\"security_center_show_battery_temperature\"));\n        initHook(UnlockSuperWirelessCharge.INSTANCE, mPrefsMap.getBoolean(\"security_center_super_wireless_charge\"));\n        initHook(ScreenUsedTime.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_screen_time\"));\n        initHook(UnlockSmartCharge.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_smart_charge\"));\n\n        // 隐私保护\n        initHook(new AppLockPinScramble(), mPrefsMap.getBoolean(\"security_center_applock_pin_scramble\"));\n        initHook(AiClipboardEnable.INSTANCE, mPrefsMap.getBoolean(\"security_center_ai_clipboard\"));\n        initHook(BlurLocationEnable.INSTANCE, mPrefsMap.getBoolean(\"security_center_blur_location\"));\n        initHook(GetNumberEnable.INSTANCE, mPrefsMap.getBoolean(\"security_center_get_number\"));\n\n        // 前置摄像助手\n        initHook(BeautyLightAuto.INSTANCE, mPrefsMap.getBoolean(\"security_center_beauty_light_auto\"));\n        initHook(BeautyFace.INSTANCE, mPrefsMap.getBoolean(\"security_center_beauty_face\"));\n        initHook(BeautyPrivacy.INSTANCE, mPrefsMap.getBoolean(\"security_center_beauty_privacy\"));\n        initHook(BeautyPc.INSTANCE, mPrefsMap.getBoolean(\"security_center_beauty_pc\"));\n\n        // 其他\n        initHook(LockOneHundredPoints.INSTANCE, mPrefsMap.getBoolean(\"security_center_score\"));\n        initHook(new SkipCountDownLimit(), mPrefsMap.getBoolean(\"security_center_skip_count_down_limit\"));\n        initHook(DisableRootCheck.INSTANCE, mPrefsMap.getBoolean(\"security_center_disable_root_check\"));\n        initHook(FuckRiskPkg.INSTANCE, mPrefsMap.getBoolean(\"security_center_disable_send_malicious_app_notification\"));\n        initHook(NoLowBatteryWarning.INSTANCE, mPrefsMap.getBoolean(\"security_center_remove_low_battery_reminder\"));\n\n        // 小窗和气泡通知\n        initHook(new RemoveConversationBubbleSettingsRestriction(), mPrefsMap.getBoolean(\"security_center_remove_conversation_bubble_settings_restriction\"));\n        initHook(IsSbnBelongToActiveBubbleApp.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_side_hide_freeform\"));\n        initHook(GetBubbleAppString.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_side_hide_freeform\"));\n\n        // 移除打开应用弹窗\n        initHook(new RemoveOpenAppConfirmationPopup(), mPrefsMap.getBoolean(\"security_center_remove_open_app_confirmation_popup\"));\n\n        // 全局侧边栏\n        if (!isAndroidR()) {\n            initHook(new NewBoxBlur(), mPrefsMap.getBoolean(\"security_center_newbox_custom_enable\"));\n            initHook(BlurSecurity.INSTANCE, mPrefsMap.getBoolean(\"se_enable\"));\n            initHook(SidebarLineCustom.INSTANCE, mPrefsMap.getBoolean(\"security_center_sidebar_line_color\"));\n        }\n        initHook(new RemoveMacroBlackList(), mPrefsMap.getBoolean(\"security_center_remove_macro_black_list\"));\n        initHook(UnlockGunService.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_gun_service\"));\n        initHook(DisableRemoveScreenHoldOn.INSTANCE, mPrefsMap.getBoolean(\"security_center_disable_remove_screen_hold_on\"));\n        initHook(UnlockMemc.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_memc\"));\n        initHook(UnlockSuperResolution.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_s_resolution\"));\n        initHook(UnlockEnhanceContours.INSTANCE, mPrefsMap.getBoolean(\"security_center_unlock_enhance_contours\"));\n        initHook(new AddSideBarExpandReceiver(), mPrefsMap.getBoolean(\"security_center_hide_sidebar\"));\n        // initHook(new DisableDockSuggest(), mPrefsMap.getBoolean(\"security_center_disable_sidebar_show_suggest\"));\n        initHook(new VideoDolbyOpen(), mPrefsMap.getBoolean(\"security_center_dolby_open\"));\n\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Settings.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.settings.CemiuilerSettings;\nimport com.sevtinge.cemiuiler.module.hook.settings.NotificationImportance;\nimport com.sevtinge.cemiuiler.module.hook.settings.VolumeSeparateControlForSettings;\n\npublic class Settings extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n\n        initHook(new NotificationImportance(), mPrefsMap.getBoolean(\"settings_notfication_importance\"));\n\n        // initHook(new BluetoothRestrict(), mPrefsMap.getBoolean(\"various_disable_bluetooth_restrict\"));\n        initHook(new VolumeSeparateControlForSettings(), mPrefsMap.getBoolean(\"system_framework_volume_separate_control\"));\n\n\n        initHook(new CemiuilerSettings(), mPrefsMap.getStringAsInt(\"settings_icon\", 0) != 0);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/SystemFramework.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.AllowUntrustedTouch;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.AppDisableService;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.AppLinkVerify;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.CleanOpenMenu;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.CleanShareMenu;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.DeleteOnPostNotification;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.DisableCleaner;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.DisableFreeformBlackList;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.DisablePinVerifyPer72h;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.FlagSecure;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.FreeFormCount;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.FreeformBubble;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.MultiFreeFormSupported;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.PackagePermissions;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.RemoveSmallWindowRestrictions;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.ScreenRotation;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.SpeedInstall;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.StickyFloatingWindows;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.ThemeProvider;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.ThermalBrightness;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.UseOriginalAnimation;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.VolumeDefaultStream;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.VolumeDisableSafe;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.VolumeFirstPress;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.VolumeMediaSteps;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.VolumeSeparateControl;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.VolumeSteps;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.corepatch.BypassSignCheckForT;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.display.DisplayCutout;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.display.ToastTime;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.freeform.OpenAppInFreeForm;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.mipad.IgnoreStylusKeyGesture;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.mipad.NoMagicPointer;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.mipad.RemoveStylusBluetoothRestriction;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.mipad.RestoreEsc;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.mipad.SetGestureNeedFingerNum;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.network.DualNRSupport;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.network.DualSASupport;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.network.N1Band;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.network.N28Band;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.network.N5N8Band;\nimport com.sevtinge.cemiuiler.module.hook.various.NoAccessDeviceLogsRequest;\n\nimport de.robv.android.xposed.XposedBridge;\n\n\npublic class SystemFramework extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        if (mPrefsMap.getBoolean(\"settings_disable_detailed_log\"))\n            XposedBridge.log(\"[Cemiuiler][I]: Detail log is disabled.\");\n\n        // 小窗\n        initHook(new FreeFormCount(), mPrefsMap.getBoolean(\"system_framework_freeform_count\"));\n        initHook(new FreeformBubble(), mPrefsMap.getBoolean(\"system_framework_freeform_bubble\"));\n        initHook(new DisableFreeformBlackList(), mPrefsMap.getBoolean(\"system_framework_disable_freeform_blacklist\"));\n        initHook(RemoveSmallWindowRestrictions.INSTANCE, mPrefsMap.getBoolean(\"system_framework_disable_freeform_blacklist\"));\n        initHook(new StickyFloatingWindows(), mPrefsMap.getBoolean(\"system_framework_freeform_sticky\"));\n        initHook(MultiFreeFormSupported.INSTANCE, mPrefsMap.getBoolean(\"system_framework_freeform_recents_to_small_freeform\"));\n        initHook(new OpenAppInFreeForm(), mPrefsMap.getBoolean(\"system_framework_freeform_jump\"));\n        // initHook(new OpenAppInFreeForm(), mPrefsMap.getBoolean(\"system_framework_freeform_jump\"));\n\n        // 音量\n        initHook(new VolumeDefaultStream());\n        initHook(new VolumeFirstPress(), mPrefsMap.getBoolean(\"system_framework_volume_first_press\"));\n        initHook(new VolumeSeparateControl(), mPrefsMap.getBoolean(\"system_framework_volume_separate_control\"));\n        initHook(new VolumeSteps(), mPrefsMap.getInt(\"system_framework_volume_steps\", 0) > 0);\n        initHook(new VolumeMediaSteps(), mPrefsMap.getBoolean(\"system_framework_volume_media_steps_enable\"));\n        initHook(new VolumeDisableSafe(), mPrefsMap.getBoolean(\"system_framework_volume_disable_safe\"));\n        // initHook(new ClockShowSecond(), mPrefsMap.getBoolean(\"system_ui_statusbar_clock_show_second\"));\n\n        initHook(new ThemeProvider(), mPrefsMap.getBoolean(\"various_enable_super_function\") && mPrefsMap.getBoolean(\"various_theme_crack\"));\n\n        // 其他\n        initHook(new ScreenRotation(), mPrefsMap.getBoolean(\"system_framework_screen_all_rotations\"));\n        initHook(new CleanShareMenu(), mPrefsMap.getBoolean(\"system_framework_clean_share_menu\"));\n        initHook(new CleanOpenMenu(), mPrefsMap.getBoolean(\"system_framework_clean_open_menu\"));\n        initHook(new AllowUntrustedTouch(), mPrefsMap.getBoolean(\"system_framework_allow_untrusted_touch\"));\n        initHook(new FlagSecure(), mPrefsMap.getBoolean(\"system_other_flag_secure\"));\n        initHook(new AppLinkVerify(), mPrefsMap.getBoolean(\"system_framework_disable_app_link_verify\"));\n        initHook(new UseOriginalAnimation(), mPrefsMap.getBoolean(\"system_framework_other_use_original_animation\"));\n        initHook(new SpeedInstall(), mPrefsMap.getBoolean(\"system_framework_other_speed_install\"));\n        initHook(DeleteOnPostNotification.INSTANCE, mPrefsMap.getBoolean(\"system_other_delete_on_post_notification\"));\n        initHook(NoAccessDeviceLogsRequest.INSTANCE, mPrefsMap.getBoolean(\"various_disable_access_device_logs\"));\n\n        // 显示\n        initHook(DisplayCutout.INSTANCE, mPrefsMap.getBoolean(\"system_ui_display_hide_cutout_enable\"));\n        initHook(new ToastTime(), mPrefsMap.getBoolean(\"system_ui_display_toast_times_enable\"));\n        // initHook(new AutoBrightness(), mPrefsMap.getBoolean(\"system_control_center_auto_brightness\"));\n\n        // 位置模拟\n        // initHook(new LocationSimulation(), false);\n\n        // 小米/红米平板设置相关\n        if (isPad()) {\n            initHook(IgnoreStylusKeyGesture.INSTANCE, mPrefsMap.getBoolean(\"mipad_input_ingore_gesture\"));\n            initHook(NoMagicPointer.INSTANCE, mPrefsMap.getBoolean(\"mipad_input_close_magic\"));\n            initHook(RemoveStylusBluetoothRestriction.INSTANCE, mPrefsMap.getBoolean(\"mipad_input_disable_bluetooth\"));\n            initHook(RestoreEsc.INSTANCE, mPrefsMap.getBoolean(\"mipad_input_restore_esc\"));\n            initHook(SetGestureNeedFingerNum.INSTANCE, mPrefsMap.getBoolean(\"mipad_input_need_finger_num\"));\n        }\n\n        // 核心破解\n        if (isMoreAndroidVersion(33)) {\n            initHook(BypassSignCheckForT.INSTANCE, mPrefsMap.getBoolean(\"system_framework_core_patch_auth_creak\") ||\n                mPrefsMap.getBoolean(\"system_framework_core_patch_disable_integrity\"));\n        }\n\n        // 网络\n        initHook(DualNRSupport.INSTANCE, mPrefsMap.getBoolean(\"phone_double_5g_nr\"));\n        initHook(DualSASupport.INSTANCE, mPrefsMap.getBoolean(\"phone_double_5g_sa\"));\n        initHook(N1Band.INSTANCE, mPrefsMap.getBoolean(\"phone_n1\"));\n        initHook(N5N8Band.INSTANCE, mPrefsMap.getBoolean(\"phone_n5_n8\"));\n        initHook(N28Band.INSTANCE, mPrefsMap.getBoolean(\"phone_n28\"));\n\n        // Other\n        initHook(new PackagePermissions());\n        initHook(new GlobalActions(), mLoadPackageParam.processName.equals(\"android\"));\n        initHook(new AppDisableService());\n        initHook(new ThermalBrightness(), mPrefsMap.getBoolean(\"system_framework_other_thermal_brightness\"));\n        initHook(DisableCleaner.INSTANCE, mPrefsMap.getBoolean(\"system_framework_other_disable_cleaner\"));\n        initHook(new DisablePinVerifyPer72h(), mPrefsMap.getBoolean(\"system_framework_disable_72h_verify\"));\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/SystemFrameworkForCorePatch.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport android.os.Build;\n\nimport com.sevtinge.cemiuiler.module.hook.systemframework.corepatch.CorePatchForR;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.corepatch.CorePatchForS;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.corepatch.CorePatchForT;\nimport com.sevtinge.cemiuiler.module.hook.systemframework.corepatch.CorePatchForU;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.IXposedHookLoadPackage;\nimport de.robv.android.xposed.IXposedHookZygoteInit;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage;\n\npublic class SystemFrameworkForCorePatch implements IXposedHookLoadPackage, IXposedHookZygoteInit {\n    public static final String TAG = \"CorePatch\";\n\n    @Override\n    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {\n        if ((\"android\".equals(lpparam.packageName)) && (lpparam.processName.equals(\"android\"))) {\n            XposedLogUtils.logI(TAG, \"Current sdk version \" + Build.VERSION.SDK_INT);\n            switch (Build.VERSION.SDK_INT) {\n                case Build.VERSION_CODES.UPSIDE_DOWN_CAKE -> // 34\n                    new CorePatchForU().handleLoadPackage(lpparam);\n                case Build.VERSION_CODES.TIRAMISU -> // 33\n                    new CorePatchForT().handleLoadPackage(lpparam);\n                case Build.VERSION_CODES.S_V2 -> // 32\n                    new CorePatchForS().handleLoadPackage(lpparam);\n                case Build.VERSION_CODES.S -> // 31\n                    new CorePatchForS().handleLoadPackage(lpparam);\n                case Build.VERSION_CODES.R -> // 30\n                    new CorePatchForR().handleLoadPackage(lpparam);\n                default -> XposedLogUtils.logW(TAG, \"Unsupported Version of Android \" + Build.VERSION.SDK_INT);\n            }\n        }\n    }\n\n    @Override\n    public void initZygote(StartupParam startupParam) throws Throwable {\n        if (startupParam.startsSystemServer) {\n            XposedLogUtils.logI(TAG, \"Current sdk version \" + Build.VERSION.SDK_INT);\n            switch (Build.VERSION.SDK_INT) {\n                case Build.VERSION_CODES.UPSIDE_DOWN_CAKE -> // 34\n                    new CorePatchForU().initZygote(startupParam);\n                case Build.VERSION_CODES.TIRAMISU -> // 33\n                    new CorePatchForT().initZygote(startupParam);\n                case Build.VERSION_CODES.S_V2 -> // 32\n                    new CorePatchForS().initZygote(startupParam);\n                case Build.VERSION_CODES.S -> // 31\n                    new CorePatchForS().initZygote(startupParam);\n                case Build.VERSION_CODES.R -> // 30\n                    new CorePatchForR().initZygote(startupParam);\n                default -> XposedLogUtils.logW(TAG, \"Unsupported Version of Android \" + Build.VERSION.SDK_INT);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/SystemSettings.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.AddMiuiPlusEntry;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.AppsFreezerEnable;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.EnableFoldArea;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.EnablePadArea;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.EnableSpeedMode;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.InternationalBuild;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.NewNFCPage;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.NoveltyHaptic;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.QuickManageOverlayPermission;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.QuickManageUnknownAppSources;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.UnLockAreaScreenshot;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.UnlockTaplusForSettings;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.ViewWifiPasswordHook;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.VoipAssistantController;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.aiimage.UnlockAi;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.aiimage.UnlockMemc;\nimport com.sevtinge.cemiuiler.module.hook.systemsettings.aiimage.UnlockSuperResolution;\n\npublic class SystemSettings extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new ViewWifiPasswordHook(), mPrefsMap.getBoolean(\"system_settings_safe_wifi\"));\n        initHook(new VoipAssistantController(), mPrefsMap.getBoolean(\"system_settings_voip_assistant_controller\"));\n        initHook(new AddMiuiPlusEntry(), mPrefsMap.getBoolean(\"mirror_unlock_miui_plus\"));\n        initHook(new EnableSpeedMode(), mPrefsMap.getBoolean(\"system_settings_develop_speed_mode\"));\n        initHook(new QuickManageOverlayPermission(), mPrefsMap.getBoolean(\"system_settings_permission_show_app_up\"));\n        initHook(new QuickManageUnknownAppSources(), mPrefsMap.getBoolean(\"system_settings_permission_unknown_origin_app\"));\n        initHook(new InternationalBuild(), mPrefsMap.getBoolean(\"system_settings_international_build\"));\n        initHook(new NewNFCPage(), mPrefsMap.getBoolean(\"system_settings_new_nfc_page\"));\n        initHook(new AppsFreezerEnable(), mPrefsMap.getBoolean(\"system_settings_apps_freezer\"));\n\n        initHook(new UnlockSuperResolution(), mPrefsMap.getBoolean(\"system_settings_ai_image_unlock_sr\"));\n        initHook(new UnlockAi(), mPrefsMap.getBoolean(\"system_settings_ai_image_unlock_ai\"));\n        initHook(new UnlockMemc(), mPrefsMap.getBoolean(\"system_settings_ai_image_unlock_memc\"));\n        initHook(UnLockAreaScreenshot.INSTANCE, mPrefsMap.getBoolean(\"system_settings_area_screenshot\"));\n        initHook(NoveltyHaptic.INSTANCE, mPrefsMap.getBoolean(\"system_settings_novelty_haptic\"));\n\n        initHook(new EnablePadArea(),mPrefsMap.getBoolean(\"system_settings_enable_pad_area\"));\n        initHook(new EnableFoldArea(),mPrefsMap.getBoolean(\"system_settings_enable_fold_area\"));\n\n        if (!isAndroidR()) {\n            initHook(UnlockTaplusForSettings.INSTANCE, mPrefsMap.getBoolean(\"content_extension_unlock_taplus\"));\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/SystemUI.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.systemui.AutoCollapse;\nimport com.sevtinge.cemiuiler.module.hook.systemui.BluetoothRestrict;\nimport com.sevtinge.cemiuiler.module.hook.systemui.ChargeAnimationStyle;\nimport com.sevtinge.cemiuiler.module.hook.systemui.HideNavigationBar;\nimport com.sevtinge.cemiuiler.module.hook.systemui.MonetThemeOverlay;\nimport com.sevtinge.cemiuiler.module.hook.systemui.NotificationFix;\nimport com.sevtinge.cemiuiler.module.hook.systemui.NotificationFreeform;\nimport com.sevtinge.cemiuiler.module.hook.systemui.OriginChargeAnimation;\nimport com.sevtinge.cemiuiler.module.hook.systemui.QSDetailBackGround;\nimport com.sevtinge.cemiuiler.module.hook.systemui.StatusBarActions;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.AddBlurEffectToNotificationView;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.CCGrid;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.CompactNotificationsHook;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.ControlCenterStyle;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.FiveGTile;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.FixMediaControlPanel;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.FlashLight;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.GmsTile;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.MuteVisibleNotifications;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.NotificationWeather;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.NotificationWeatherNew;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.NotificationWeatherOld;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.QQSGrid;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.QQSGridOld;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.QSControlDetailBackgroundAlpha;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.QSGrid;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.QSGridLabels;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.QSGridOld;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.RedirectToNotificationChannelSetting;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.SunlightMode;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.SwitchCCAndNotification;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.AddBlurEffectToLockScreen;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.BlurButton;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.ChargingCVP;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.ClockDisplaySeconds;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.ForceClockUseSystemFontsHook;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.HideLockScreenHint;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.HideLockScreenStatusBar;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.HideLockscreenZenMode;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.LockScreenDoubleTapToSleep;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.NoPassword;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.RemoveCamera;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.RemoveSmartScreen;\nimport com.sevtinge.cemiuiler.module.hook.systemui.lockscreen.ScramblePIN;\nimport com.sevtinge.cemiuiler.module.hook.systemui.navigation.HandleLineCustom;\nimport com.sevtinge.cemiuiler.module.hook.systemui.navigation.NavigationCustom;\nimport com.sevtinge.cemiuiler.module.hook.systemui.plugin.PluginHelper;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.DisplayHardwareDetail;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.DoubleTapToSleep;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.DualRowSignalHook;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.HideStatusBarBeforeScreenshot;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.MobileNetwork;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.NotificationIconColumns;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.SelectiveHideIconForAlarmClock;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.WifiStandard;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.clock.TimeCustomization;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.clock.TimeStyle;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.BatteryStyle;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.BluetoothIcon;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.DataSaverIcon;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.HideBatteryIcon;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.HideVoWiFiIcon;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.IconsFromSystemManager;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.StatusBarIcon;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.StatusBarIconPositionAdjust;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.StatusBarSimIcon;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all.WifiNetworkIndicator;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.t.UseNewHD;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.layout.StatusBarLayout;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.model.MobileTypeSingleHook;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.model.MobileTypeTextCustom;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network.NetworkSpeed;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network.NetworkSpeedSec;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network.NetworkSpeedSpacing;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network.NetworkSpeedStyle;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network.StatusBarNoNetSpeedSep;\nimport com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network.s.NetworkSpeedWidth;\n\nimport java.util.Objects;\n\npublic class SystemUI extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // 充电动画\n        initHook(new ChargeAnimationStyle(), mPrefsMap.getStringAsInt(\"system_ui_charge_animation_style\", 0) > 0);\n        initHook(new OriginChargeAnimation(), mPrefsMap.getBoolean(\"system_ui_origin_charge_animation\"));\n\n        // 小窗\n        initHook(new NotificationFreeform(), mPrefsMap.getBoolean(\"system_ui_notification_freeform\"));\n\n        // 禁用蓝牙临时关闭\n        initHook(new BluetoothRestrict(), mPrefsMap.getBoolean(\"various_disable_bluetooth_restrict\"));\n\n        // Monet\n        initHook(new MonetThemeOverlay(), mPrefsMap.getBoolean(\"system_ui_monet_overlay_custom\"));\n\n        // 状态栏图标\n        initHook(WifiNetworkIndicator.INSTANCE, mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_wifi_network_indicator\", 0) > 0);\n        initHook(new StatusBarIcon());\n        initHook(new IconsFromSystemManager());\n        initHook(new WifiStandard(), mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_wifi_standard\", 0) > 0);\n        initHook(new BluetoothIcon(), mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_bluetooth\", 0) != 0);\n        initHook(new SelectiveHideIconForAlarmClock(), mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_alarm_clock\", 0) == 3 && mPrefsMap.getInt(\"system_ui_status_bar_icon_alarm_clock_n\", 0) > 0);\n        initHook(NotificationIconColumns.INSTANCE, mPrefsMap.getBoolean(\"system_ui_status_bar_notification_dots_maximum_enable\") || mPrefsMap.getBoolean(\"system_ui_status_bar_notification_icon_maximum_enable\"));\n        initHook(UseNewHD.INSTANCE, mPrefsMap.getBoolean(\"system_ui_status_bar_use_new_hd\"));\n        initHook(new HideStatusBarBeforeScreenshot(), mPrefsMap.getBoolean(\"system_ui_status_bar_hide_icon\"));\n        initHook(StatusBarSimIcon.INSTANCE);\n        initHook(HideVoWiFiIcon.INSTANCE, mPrefsMap.getBoolean(\"system_ui_status_bar_icon_vowifi\"));\n        initHook(new DataSaverIcon(), mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_data_saver\", 0) != 0);\n\n        // 移动网络图标\n        initHook(new MobileNetwork());\n        // initHook(new BigMobileNetworkType(), false);\n        initHook(new DualRowSignalHook(), mPrefsMap.getBoolean(\"system_ui_statusbar_network_icon_enable\"));\n        initHook(MobileTypeSingleHook.INSTANCE, mPrefsMap.getBoolean(\"system_ui_statusbar_mobile_type_enable\"));\n        initHook(MobileTypeTextCustom.INSTANCE, !Objects.equals(mPrefsMap.getString(\"system_ui_status_bar_mobile_type_custom\", \"\"), \"\"));\n\n        // 电池相关\n        boolean isHideBatteryIcon = mPrefsMap.getBoolean(\"system_ui_status_bar_battery_icon\") ||\n            mPrefsMap.getBoolean(\"system_ui_status_bar_battery_percent\") ||\n            mPrefsMap.getBoolean(\"system_ui_status_bar_battery_percent_mark\") ||\n            mPrefsMap.getBoolean(\"system_ui_status_bar_battery_charging\");\n        initHook(HideBatteryIcon.INSTANCE, isHideBatteryIcon);\n        initHook(BatteryStyle.INSTANCE, mPrefsMap.getBoolean(\"system_ui_status_bar_battery_style_enable_custom\") ||\n            mPrefsMap.getBoolean(\"system_ui_status_bar_battery_style_change_location\"));\n        // initHook(new BatteryIndicator(), mPrefsMap.getBoolean(\"system_ui_status_bar_battery_indicator_enable\"));\n\n        // 网速指示器\n        if (mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_enable_custom\")) {\n            initHook(NetworkSpeed.INSTANCE, !isMoreAndroidVersion(34));\n            initHook(NetworkSpeedWidth.INSTANCE, mPrefsMap.getInt(\"system_ui_statusbar_network_speed_fixedcontent_width\", 10) > 10);\n        }\n        initHook(NetworkSpeedStyle.INSTANCE);\n        initHook(NetworkSpeedSpacing.INSTANCE, mPrefsMap.getInt(\"system_ui_statusbar_network_speed_update_spacing\", 3) != 3);\n        initHook(NetworkSpeedSec.INSTANCE, mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_sec_unit\"));\n        initHook(StatusBarNoNetSpeedSep.INSTANCE, mPrefsMap.getBoolean(\"system_ui_status_bar_no_netspeed_separator\"));\n\n        // 时钟指示器\n        initHook(TimeStyle.INSTANCE);\n        initHook(TimeCustomization.INSTANCE, mPrefsMap.getStringAsInt(\"system_ui_statusbar_clock_mode\", 0) != 0);\n\n        // 硬件指示器\n        initHook(new DisplayHardwareDetail(), mPrefsMap.getBoolean(\"system_ui_statusbar_battery_enable\") ||\n            mPrefsMap.getBoolean(\"system_ui_statusbar_temp_enable\"));\n\n        // 居右显示\n        boolean isWiFiAtLeft = mPrefsMap.getBoolean(\"system_ui_status_bar_wifi_at_left\");\n        boolean isMobileNetworkAtLeft = mPrefsMap.getBoolean(\"system_ui_status_bar_mobile_network_at_left\");\n\n        boolean isNetworkSpeedAtRight = mPrefsMap.getBoolean(\"system_ui_status_bar_network_speed_at_right\");\n        boolean isAlarmClockAtRight = mPrefsMap.getBoolean(\"system_ui_status_bar_alarm_clock_at_right\");\n        boolean isNFCAtRight = mPrefsMap.getBoolean(\"system_ui_status_bar_nfc_at_right\");\n        boolean isVolumeAtRight = mPrefsMap.getBoolean(\"system_ui_status_bar_volume_at_right\");\n        boolean isZenAtRight = mPrefsMap.getBoolean(\"system_ui_status_bar_zen_at_right\");\n\n        boolean isSwapWiFiAndMobileNetwork = mPrefsMap.getBoolean(\"system_ui_status_bar_swap_wifi_and_mobile_network\");\n\n        boolean isStatusBarIconAtRightEnable = isWiFiAtLeft || isMobileNetworkAtLeft || isSwapWiFiAndMobileNetwork || isNetworkSpeedAtRight || isAlarmClockAtRight || isNFCAtRight || isVolumeAtRight || isZenAtRight;\n\n        initHook(new StatusBarIconPositionAdjust(), isStatusBarIconAtRightEnable);\n\n        // 导航栏\n        initHook(HandleLineCustom.INSTANCE, mPrefsMap.getBoolean(\"system_ui_navigation_handle_custom\"));\n        initHook(new NavigationCustom(), mPrefsMap.getBoolean(\"system_ui_navigation_custom\"));\n        initHook(new HideNavigationBar(), mPrefsMap.getBoolean(\"system_ui_hide_navigation_bar\"));\n\n        // 状态栏布局\n        initHook(StatusBarLayout.INSTANCE, mPrefsMap.getBoolean(\"system_ui_statusbar_layout_compatibility_mode\") ||\n            mPrefsMap.getStringAsInt(\"system_ui_statusbar_layout_mode\", 0) != 0);\n\n        // 实验性功能\n        // initHook(new SwitchControlPanel(), false);\n        // initHook(new MiuiGxzwSize(), false);\n\n        // 控制中心\n        // initHook(new SmartHome(), false);\n        initHook(new QSDetailBackGround(), mPrefsMap.getInt(\"system_control_center_qs_detail_bg\", 0) > 0);\n        initHook(new GmsTile(), mPrefsMap.getBoolean(\"security_center_gms_open\"));\n        initHook(new FiveGTile(), mPrefsMap.getBoolean(\"system_control_center_5g_tile\"));\n        initHook(new FlashLight(), mPrefsMap.getBoolean(\"security_flash_light\"));\n        initHook(new SunlightMode(), mPrefsMap.getStringAsInt(\"system_control_center_sunshine_new_mode\", 0) != 0);\n        initHook(new QSGridLabels(), mPrefsMap.getInt(\"system_control_center_old_qs_row\", 1) > 1 ||\n            mPrefsMap.getBoolean(\"system_control_center_qs_tile_label\"));\n        initHook(new MuteVisibleNotifications(), mPrefsMap.getBoolean(\"system_ui_control_center_mute_visible_notice\"));\n        initHook(new SwitchCCAndNotification(), mPrefsMap.getBoolean(\"system_ui_control_center_switch_cc_and_notification\"));\n        initHook(QSControlDetailBackgroundAlpha.INSTANCE, mPrefsMap.getInt(\"system_ui_control_center_control_detail_background_alpha\", 255) != 255);\n        initHook(FixMediaControlPanel.INSTANCE, mPrefsMap.getBoolean(\"system_ui_control_center_fix_media_control_panel\"));\n        initHook(NotificationWeather.INSTANCE, mPrefsMap.getBoolean(\"system_ui_control_center_show_weather\"));\n        initHook(NotificationWeatherOld.INSTANCE, mPrefsMap.getBoolean(\"system_ui_control_center_show_weather\"));\n        initHook(NotificationWeatherNew.INSTANCE, mPrefsMap.getBoolean(\"system_ui_control_center_show_weather\"));\n        initHook(CompactNotificationsHook.INSTANCE, mPrefsMap.getBoolean(\"system_ui_control_center_compact_notice\"));\n        initHook(CCGrid.INSTANCE, mPrefsMap.getInt(\"system_control_center_cc_rows\", 4) > 4 ||\n            mPrefsMap.getInt(\"system_control_center_cc_columns\", 4) > 4 ||\n            mPrefsMap.getBoolean(\"system_ui_control_center_rounded_rect\") ||\n            mPrefsMap.getBoolean(\"system_control_center_qs_tile_label\"));\n        if (isMoreAndroidVersion(33)) {\n            initHook(new QSGrid(), mPrefsMap.getBoolean(\"system_control_center_old_enable\"));\n            initHook(new QQSGrid(), mPrefsMap.getBoolean(\"system_control_center_old_enable\"));\n        } else {\n            initHook(new QSGridOld(), mPrefsMap.getBoolean(\"system_control_center_old_enable_1\"));\n            initHook(new QQSGridOld(), mPrefsMap.getBoolean(\"system_control_center_old_enable_1\"));\n        }\n        initHook(new AutoCollapse(), mPrefsMap.getBoolean(\"system_ui_control_auto_close\"));\n        initHook(RedirectToNotificationChannelSetting.INSTANCE, mPrefsMap.getBoolean(\"system_ui_control_center_redirect_notice\"));\n        initHook(ControlCenterStyle.INSTANCE, mPrefsMap.getBoolean(\"system_control_center_unlock_old\"));\n\n        // Actions\n        initHook(new StatusBarActions());\n\n        // Other\n        initHook(new NotificationFix(), mPrefsMap.getBoolean(\"system_ui_other_notification_fix\"));\n\n        // 锁屏\n        initHook(new ScramblePIN(), mPrefsMap.getBoolean(\"system_ui_lock_screen_scramble_pin\"));\n        initHook(ClockDisplaySeconds.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_show_second\"));\n        initHook(ChargingCVP.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_show_charging_cv\"));\n        initHook(RemoveCamera.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_hide_camera\"));\n        initHook(RemoveSmartScreen.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_hide_smart_screen\"));\n        initHook(NoPassword.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_password_free\"));\n        initHook(LockScreenDoubleTapToSleep.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_double_lock\"));\n        initHook(ForceClockUseSystemFontsHook.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_force_system_fonts\"));\n        initHook(HideLockscreenZenMode.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_not_disturb_mode\"));\n        initHook(HideLockScreenHint.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_unlock_tip\"));\n        initHook(HideLockScreenStatusBar.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_hide_status_bar\"));\n\n        if (!isAndroidR()) {\n            initHook(AddBlurEffectToLockScreen.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_blur_button\"));\n            initHook(AddBlurEffectToNotificationView.INSTANCE, mPrefsMap.getBoolean(\"n_enable\"));\n            initHook(BlurButton.INSTANCE, mPrefsMap.getBoolean(\"system_ui_lock_screen_blur_button\"));\n        }\n\n        initHook(DoubleTapToSleep.INSTANCE, mPrefsMap.getBoolean(\"system_ui_status_bar_double_tap_to_sleep\"));\n\n        initHook(new PluginHelper());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/ThemeManager.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.thememanager.DisableThemeAdNew;\nimport com.sevtinge.cemiuiler.module.hook.thememanager.EnableFoldTheme;\nimport com.sevtinge.cemiuiler.module.hook.thememanager.EnablePadTheme;\nimport com.sevtinge.cemiuiler.module.hook.thememanager.VersionCodeModify;\n\npublic class ThemeManager extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new DisableThemeAdNew(), mPrefsMap.getBoolean(\"various_theme_diable_ads\"));\n        initHook(new EnablePadTheme(), mPrefsMap.getBoolean(\"various_theme_enable_pad_theme\"));\n        initHook(new EnableFoldTheme(), mPrefsMap.getBoolean(\"various_theme_enable_fold_theme\"));\n\n        // 修改版本号\n        initHook(new VersionCodeModify(), mPrefsMap.getBoolean(\"theme_manager_version_code_modify\"));\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/TsmClient.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.tsmclient.AutoNfc;\n\npublic class TsmClient extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(AutoNfc.INSTANCE, mPrefsMap.getBoolean(\"tsmclient_auto_nfc\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Updater.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport android.text.TextUtils;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.updater.DeviceModify;\nimport com.sevtinge.cemiuiler.module.hook.updater.VabUpdate;\nimport com.sevtinge.cemiuiler.module.hook.updater.VersionCodeModify;\nimport com.sevtinge.cemiuiler.module.hook.updater.VersionCodeNew;\n\npublic class Updater extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        if (mPrefsMap.getStringAsInt(\"updater_version_mode\", 1) != 1) {\n            initHook(VersionCodeNew.INSTANCE);\n        } else {\n            initHook(new VersionCodeModify(), !TextUtils.isEmpty(mPrefsMap.getString(\"various_updater_miui_version\", \"\")));\n        }\n        initHook(new VabUpdate(), mPrefsMap.getBoolean(\"updater_fuck_vab\"));\n        initHook(DeviceModify.INSTANCE, !TextUtils.isEmpty(mPrefsMap.getString(\"updater_device\", \"\")));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Various.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.various.CollapseMiuiTitle;\nimport com.sevtinge.cemiuiler.module.hook.various.DialogCustom;\nimport com.sevtinge.cemiuiler.module.hook.various.MiuiAppNoOverScroll;\nimport com.sevtinge.cemiuiler.module.hook.various.UnlockIme;\n\nimport java.util.Arrays;\nimport java.util.HashSet;\n\npublic class Various extends BaseModule {\n\n    Class<?> mHelpers;\n\n    String mPackageName;\n    boolean isMiuiApps;\n\n\n    @Override\n    public void handleLoadPackage() {\n        mPackageName = mLoadPackageParam.packageName;\n        isMiuiApps = mPackageName.startsWith(\"com.miui\") || mPackageName.startsWith(\"com.xiaomi\") || miuiDialogCustomApps.contains(mPackageName);\n\n        initHook(new MiuiAppNoOverScroll(), isMiuiOverScrollApps());\n        initHook(new DialogCustom(), isMiuiDialogCustom());\n\n        initHook(new CollapseMiuiTitle(), isCollapseMiuiTitleApps());\n\n        initHook(UnlockIme.INSTANCE, mPrefsMap.getBoolean(\"various_unlock_ime\"));\n\n\n    }\n\n\n    private boolean isMiuiOverScrollApps() {\n        return mPrefsMap.getBoolean(\"various_no_overscroll\") && miuiOverScrollApps.contains(mPackageName);\n    }\n\n    private boolean isMiuiDialogCustom() {\n        return mPrefsMap.getStringAsInt(\"various_dialog_gravity\", 0) != 0 && isMiuiApps;\n    }\n\n    private boolean isCollapseMiuiTitleApps() {\n        return mPrefsMap.getStringAsInt(\"various_collapse_miui_title\", 0) != 0 && collapseMiuiTitleApps.contains(mPackageName);\n    }\n\n    HashSet<String> miuiOverScrollApps = new HashSet<>(Arrays.asList(\n        \"com.android.fileexplorer\",\n        \"com.android.providers.downloads.ui\",\n        \"com.android.settings\"\n    ));\n\n    HashSet<String> miuiDialogCustomApps = new HashSet<>(Arrays.asList(\n        \"com.android.fileexplorer\",\n        \"com.android.providers.downloads.ui\",\n        \"com.android.settings\"\n    ));\n\n    HashSet<String> collapseMiuiTitleApps = new HashSet<>(Arrays.asList(\n        \"com.android.fileexplorer\",\n        \"com.android.providers.downloads.ui\",\n        \"com.android.settings\"\n    ));\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/VoiceAssist.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.base.CloseHostDir;\nimport com.sevtinge.cemiuiler.module.base.LoadHostDir;\nimport com.sevtinge.cemiuiler.module.hook.voiceassist.UseThirdPartyBrowser;\n\npublic class VoiceAssist extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        // dexKit load\n        initHook(LoadHostDir.INSTANCE);\n        initHook(UseThirdPartyBrowser.INSTANCE, mPrefsMap.getBoolean(\"content_extension_browser\"));\n        // dexKit finish\n        initHook(CloseHostDir.INSTANCE);\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/app/Weather.java",
    "content": "package com.sevtinge.cemiuiler.module.app;\n\nimport com.sevtinge.cemiuiler.module.base.BaseModule;\nimport com.sevtinge.cemiuiler.module.hook.weather.SetDeviceLevel;\n\npublic class Weather extends BaseModule {\n\n    @Override\n    public void handleLoadPackage() {\n        initHook(new SetDeviceLevel(), mPrefsMap.getStringAsInt(\"weather_device_level\", 0) != 3);\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/base/BaseHook.java",
    "content": "package com.sevtinge.cemiuiler.module.base;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\n\nimport com.sevtinge.cemiuiler.BuildConfig;\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.utils.PrefsMap;\nimport com.sevtinge.cemiuiler.utils.ResourcesHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.*;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;\n\npublic abstract class BaseHook {\n    public String TAG = getClass().getSimpleName();\n    private static final boolean isDebugVersion = BuildConfig.BUILD_TYPE.contains(\"debug\");\n    private static final boolean isNotReleaseVersion = !BuildConfig.BUILD_TYPE.contains(\"release\");\n    private final boolean detailLog = !mPrefsMap.getBoolean(\"settings_disable_detailed_log\");\n\n    public LoadPackageParam lpparam;\n    public static final ResourcesHook mResHook = XposedInit.mResHook;\n    public static final PrefsMap<String, Object> mPrefsMap = XposedInit.mPrefsMap;\n\n    public static final String ACTION_PREFIX = \"com.sevtinge.cemiuiler.module.action.\";\n\n    public abstract void init();\n\n    public void onCreate(LoadPackageParam lpparam) {\n        try {\n            setLoadPackageParam(lpparam);\n            init();\n            if (detailLog && isNotReleaseVersion) {\n                XposedLogUtils.logI(TAG, \"Hook Success.\");\n            }\n        } catch (Throwable t) {\n            XposedLogUtils.logE(TAG, \"Hook Failed\", t);\n        }\n    }\n\n    public void setLoadPackageParam(LoadPackageParam param) {\n        lpparam = param;\n    }\n\n    public Class<?> findClass(String className) {\n        return findClass(className, lpparam.classLoader);\n    }\n\n    public Class<?> findClass(String className, ClassLoader classLoader) {\n        return XposedHelpers.findClass(className, classLoader);\n    }\n\n    public Class<?> findClassIfExists(String className) {\n        try {\n            return findClass(className);\n        } catch (XposedHelpers.ClassNotFoundError e) {\n            LogD(\"findClassIfExists\", \"find \" + className + \" is Null\", e);\n            return null;\n        }\n    }\n\n    public Class<?> findClassIfExists(String newClassName, String oldClassName) {\n        try {\n            return findClass(findClassIfExists(newClassName) != null ? newClassName : oldClassName);\n        } catch (XposedHelpers.ClassNotFoundError e) {\n            LogD(\"findClassIfExists\", \"find \" + newClassName + \" and \" + oldClassName + \" is Null\", e);\n            return null;\n        }\n    }\n\n    public Class<?> findClassIfExists(String className, ClassLoader classLoader) {\n        try {\n            return findClass(className, classLoader);\n        } catch (XposedHelpers.ClassNotFoundError e) {\n            LogD(\"findClassIfExists\", \"find \" + className + \" is Null\", e);\n            return null;\n        }\n    }\n\n    public static class MethodHook extends XC_MethodHook {\n\n        protected void before(MethodHookParam param) throws Throwable {\n        }\n\n        protected void after(MethodHookParam param) throws Throwable {\n        }\n\n        public MethodHook() {\n            super();\n        }\n\n        public MethodHook(int priority) {\n            super(priority);\n        }\n\n\n        @Override\n        public void beforeHookedMethod(MethodHookParam param) throws Throwable {\n            try {\n                this.before(param);\n            } catch (Throwable t) {\n                LogD(\"BeforeHook\", t);\n            }\n        }\n\n        @Override\n        public void afterHookedMethod(MethodHookParam param) throws Throwable {\n            try {\n                this.after(param);\n            } catch (Throwable t) {\n                LogD(\"AfterHook\", t);\n            }\n        }\n    }\n\n\n    public void findAndHookMethod(Class<?> clazz, String methodName, Object... parameterTypesAndCallback) {\n        XposedHelpers.findAndHookMethod(clazz, methodName, parameterTypesAndCallback);\n    }\n\n    public void findAndHookMethod(String className, String methodName, Object... parameterTypesAndCallback) {\n        findAndHookMethod(findClassIfExists(className), methodName, parameterTypesAndCallback);\n    }\n\n    public boolean findAndHookMethodSilently(String className, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            findAndHookMethod(className, methodName, parameterTypesAndCallback);\n            return true;\n        } catch (Throwable t) {\n            LogD(\"findAndHookMethodSilently\", className + methodName + \" is null\", t);\n            return false;\n        }\n    }\n\n    public boolean findAndHookMethodSilently(Class<?> clazz, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            findAndHookMethod(clazz, methodName, parameterTypesAndCallback);\n            return true;\n        } catch (Throwable t) {\n            LogD(\"findAndHookMethodSilently\", clazz + methodName + \" is null\", t);\n            return false;\n        }\n    }\n\n    public void findAndHookConstructor(String className, Object... parameterTypesAndCallback) {\n        findAndHookConstructor(findClassIfExists(className), parameterTypesAndCallback);\n    }\n\n    public void findAndHookConstructor(Class<?> hookClass, Object... parameterTypesAndCallback) {\n        XposedHelpers.findAndHookConstructor(hookClass, parameterTypesAndCallback);\n    }\n\n    public void hookMethod(Method method, MethodHook callback) {\n        XposedBridge.hookMethod(method, callback);\n    }\n\n    public void hookAllMethods(String className, String methodName, XC_MethodHook callback) {\n        try {\n            Class<?> hookClass = findClassIfExists(className);\n            if (hookClass != null) {\n                XposedBridge.hookAllMethods(hookClass, methodName, callback).size();\n            }\n\n        } catch (Throwable t) {\n            LogD(\"HookAllMethods\", className + \" is \" + methodName + \" abnormal\", t);\n        }\n    }\n\n    public void hookAllMethods(Class<?> hookClass, String methodName, XC_MethodHook callback) {\n        try {\n            XposedBridge.hookAllMethods(hookClass, methodName, callback).size();\n        } catch (Throwable t) {\n            LogD(\"HookAllMethods\", hookClass + \" is \" + methodName + \" abnormal\", t);\n        }\n    }\n\n    public void hookAllMethodsSilently(String className, String methodName, XC_MethodHook callback) {\n        try {\n            Class<?> hookClass = findClassIfExists(className);\n            if (hookClass != null) {\n                XposedBridge.hookAllMethods(hookClass, methodName, callback).size();\n            }\n        } catch (Throwable ignored) {\n        }\n    }\n\n    public boolean hookAllMethodsSilently(Class<?> hookClass, String methodName, XC_MethodHook callback) {\n        try {\n            if (hookClass != null) {\n                XposedBridge.hookAllMethods(hookClass, methodName, callback).size();\n            }\n            return false;\n        } catch (Throwable t) {\n            return false;\n        }\n    }\n\n    public void hookAllConstructors(String className, MethodHook callback) {\n        try {\n            Class<?> hookClass = findClassIfExists(className);\n            if (hookClass != null) {\n                XposedBridge.hookAllConstructors(hookClass, callback).size();\n            }\n        } catch (Throwable t) {\n            LogD(\"hookAllConstructors\", className + \" is  abnormal\", t);\n        }\n    }\n\n    public void hookAllConstructors(Class<?> hookClass, MethodHook callback) {\n        try {\n            XposedBridge.hookAllConstructors(hookClass, callback).size();\n        } catch (Throwable t) {\n            LogD(\"hookAllConstructors\", hookClass + \" is  abnormal\", t);\n        }\n    }\n\n\n    public Object getStaticObjectFieldSilently(Class<?> clazz, String fieldName) {\n        try {\n            return XposedHelpers.getStaticObjectField(clazz, fieldName);\n        } catch (Throwable t) {\n            return null;\n        }\n    }\n\n    public void setDeclaredField(XC_MethodHook.MethodHookParam param, String iNeedString, Object iNeedTo) {\n        if (param != null) {\n            try {\n                Field setString = param.thisObject.getClass().getDeclaredField(iNeedString);\n                setString.setAccessible(true);\n                try {\n                    setString.set(param.thisObject, iNeedTo);\n                    Object result = setString.get(param.thisObject);\n                    checkLast(\"getDeclaredField\", iNeedString, iNeedTo, result);\n                } catch (IllegalAccessException e) {\n                    XposedLogUtils.logW(\"IllegalAccessException to: \" + iNeedString + \" need to: \" + iNeedTo + \" code:\" + e);\n                }\n            } catch (NoSuchFieldException e) {\n                XposedLogUtils.logW(\"No such the: \" + iNeedString + \" code: \" + e);\n            }\n        } else {\n            XposedLogUtils.logW(\"Param is null Field: \" + iNeedString + \" to: \" + iNeedTo);\n        }\n    }\n\n    public void checkLast(String setObject, Object fieldName, Object value, Object last) {\n        if (value.equals(last)) {\n            XposedLogUtils.logI(setObject + \" Success! set \" + fieldName + \" to \" + value);\n        } else {\n            XposedLogUtils.logW(setObject + \" Failed! set \" + fieldName + \" to \" + value + \" hope: \" + value + \" but: \" + last);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/base/BaseModule.java",
    "content": "package com.sevtinge.cemiuiler.module.base;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.utils.PrefsMap;\n\nimport de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;\n\npublic abstract class BaseModule implements IXposedHook {\n\n    public LoadPackageParam mLoadPackageParam = null;\n    public final PrefsMap<String, Object> mPrefsMap = XposedInit.mPrefsMap;\n\n    public void init(LoadPackageParam lpparam) {\n        mLoadPackageParam = lpparam;\n        initZygote();\n        handleLoadPackage();\n    }\n\n    @Override\n    public void initZygote() {\n    }\n\n    public void initHook(BaseHook baseHook) {\n        initHook(baseHook, true);\n    }\n\n    public void initHook(BaseHook baseHook, boolean isInit) {\n        if (isInit) {\n            baseHook.onCreate(mLoadPackageParam);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/base/BaseXposedInit.java",
    "content": "package com.sevtinge.cemiuiler.module.base;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\n\nimport com.sevtinge.cemiuiler.BuildConfig;\nimport com.sevtinge.cemiuiler.module.app.AiAsst;\nimport com.sevtinge.cemiuiler.module.app.Aod;\nimport com.sevtinge.cemiuiler.module.app.Barrage;\nimport com.sevtinge.cemiuiler.module.app.Browser;\nimport com.sevtinge.cemiuiler.module.app.Camera;\nimport com.sevtinge.cemiuiler.module.app.Clock;\nimport com.sevtinge.cemiuiler.module.app.ContentExtension;\nimport com.sevtinge.cemiuiler.module.app.Creation;\nimport com.sevtinge.cemiuiler.module.app.Downloads;\nimport com.sevtinge.cemiuiler.module.app.ExternalStorage;\nimport com.sevtinge.cemiuiler.module.app.FileExplorer;\nimport com.sevtinge.cemiuiler.module.app.Gallery;\nimport com.sevtinge.cemiuiler.module.app.GuardProvider;\nimport com.sevtinge.cemiuiler.module.app.Home;\nimport com.sevtinge.cemiuiler.module.app.InCallUi;\nimport com.sevtinge.cemiuiler.module.app.Joyose;\nimport com.sevtinge.cemiuiler.module.app.Lbe;\nimport com.sevtinge.cemiuiler.module.app.Market;\nimport com.sevtinge.cemiuiler.module.app.MediaEditor;\nimport com.sevtinge.cemiuiler.module.app.MiLink;\nimport com.sevtinge.cemiuiler.module.app.MiSettings;\nimport com.sevtinge.cemiuiler.module.app.MiShare;\nimport com.sevtinge.cemiuiler.module.app.MiWallpaper;\nimport com.sevtinge.cemiuiler.module.app.Mms;\nimport com.sevtinge.cemiuiler.module.app.Mtb;\nimport com.sevtinge.cemiuiler.module.app.Music;\nimport com.sevtinge.cemiuiler.module.app.NetworkBoost;\nimport com.sevtinge.cemiuiler.module.app.Nfc;\nimport com.sevtinge.cemiuiler.module.app.Notes;\nimport com.sevtinge.cemiuiler.module.app.PackageInstaller;\nimport com.sevtinge.cemiuiler.module.app.PersonalAssistant;\nimport com.sevtinge.cemiuiler.module.app.Phone;\nimport com.sevtinge.cemiuiler.module.app.PowerKeeper;\nimport com.sevtinge.cemiuiler.module.app.Scanner;\nimport com.sevtinge.cemiuiler.module.app.ScreenRecorder;\nimport com.sevtinge.cemiuiler.module.app.ScreenShot;\nimport com.sevtinge.cemiuiler.module.app.SecurityCenter;\nimport com.sevtinge.cemiuiler.module.app.Settings;\nimport com.sevtinge.cemiuiler.module.app.SystemFramework;\nimport com.sevtinge.cemiuiler.module.app.SystemSettings;\nimport com.sevtinge.cemiuiler.module.app.SystemUI;\nimport com.sevtinge.cemiuiler.module.app.ThemeManager;\nimport com.sevtinge.cemiuiler.module.app.TsmClient;\nimport com.sevtinge.cemiuiler.module.app.Updater;\nimport com.sevtinge.cemiuiler.module.app.Various;\nimport com.sevtinge.cemiuiler.module.app.VoiceAssist;\nimport com.sevtinge.cemiuiler.module.app.Weather;\nimport com.sevtinge.cemiuiler.module.hook.thememanager.ThemeCrackNew;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.PrefsMap;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.ResourcesHook;\nimport com.sevtinge.cemiuiler.utils.ShellUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.io.File;\nimport java.util.Map;\n\nimport de.robv.android.xposed.IXposedHookLoadPackage;\nimport de.robv.android.xposed.IXposedHookZygoteInit;\nimport de.robv.android.xposed.XSharedPreferences;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;\n\npublic abstract class BaseXposedInit implements IXposedHookLoadPackage, IXposedHookZygoteInit {\n\n    public static ResourcesHook mResHook;\n    public static String mModulePath = null;\n    public static PrefsMap<String, Object> mPrefsMap = new PrefsMap<>();\n\n    public final SystemFramework mSystemFramework = new SystemFramework();\n    public final SystemUI mSystemUI = new SystemUI();\n    public final Home mHome = new Home();\n    public final ScreenShot mScreenShot = new ScreenShot();\n\n    public final ScreenRecorder mScreenRecorder = new ScreenRecorder();\n    public final SecurityCenter mSecurityCenter = new SecurityCenter();\n    public final SystemSettings mSystemSettings = new SystemSettings();\n    public final Settings mSettings = new Settings();\n    public final PersonalAssistant mPersonalAssistant = new PersonalAssistant();\n    public final ThemeManager mThemeManager = new ThemeManager();\n    public final Updater mUpdater = new Updater();\n    public final Market mMarket = new Market();\n    public final MediaEditor mMediaEditor = new MediaEditor();\n    public final PackageInstaller mPackageInstaller = new PackageInstaller();\n    public final PowerKeeper mPowerKeeper = new PowerKeeper();\n    public final MiSettings mMiSettings = new MiSettings();\n    public final Joyose mJoyose = new Joyose();\n    public final Various mVarious = new Various();\n    public final Weather mWeather = new Weather();\n    public final Clock mClock = new Clock();\n    public final FileExplorer mFileExplorer = new FileExplorer();\n    public final Music mMusic = new Music();\n    public final Gallery mGallery = new Gallery();\n    public final AiAsst mAiAsst = new AiAsst();\n    public final Scanner mScanner = new Scanner();\n    public final MiShare mMiShare = new MiShare();\n    public final MiLink mMiLink = new MiLink();\n    public final GuardProvider mGuardProvider = new GuardProvider();\n    public final Lbe mLbe = new Lbe();\n    public final InCallUi mInCallUi = new InCallUi();\n    public final TsmClient mTsmClient = new TsmClient();\n    public final ContentExtension mContentExtension = new ContentExtension();\n    public final VoiceAssist mVoiceAssist = new VoiceAssist();\n    public final Mms mMms = new Mms();\n    public final ExternalStorage mExternalStorage = new ExternalStorage();\n    public final Camera mCamera = new Camera();\n    public final Browser mBrowser = new Browser();\n    public final Mtb mMtb = new Mtb();\n    public final Phone mPhone = new Phone();\n    public final MiWallpaper mMiWallpaper = new MiWallpaper();\n    public final Downloads mDownloads = new Downloads();\n    public final Aod mAod = new Aod();\n    public final Barrage mBarrage = new Barrage();\n    public final Notes mNotes = new Notes();\n    public final NetworkBoost networkBoost = new NetworkBoost();\n    public final Creation mCreation = new Creation();\n    public final Nfc mNfc = new Nfc();\n\n    @Override\n    public void initZygote(StartupParam startupParam) throws Throwable {\n        setXSharedPrefs();\n        mResHook = new ResourcesHook();\n        mModulePath = startupParam.modulePath;\n    }\n\n    public void setXSharedPrefs() {\n        if (mPrefsMap.size() == 0) {\n            XSharedPreferences mXSharedPreferences;\n            try {\n                mXSharedPreferences = new XSharedPreferences(Helpers.mAppModulePkg, PrefsUtils.mPrefsName);\n                mXSharedPreferences.makeWorldReadable();\n\n                Map<String, ?> allPrefs = mXSharedPreferences == null ? null : mXSharedPreferences.getAll();\n                if (allPrefs == null || allPrefs.size() == 0) {\n                    mXSharedPreferences = new XSharedPreferences(new File(PrefsUtils.mPrefsFile));\n                    mXSharedPreferences.makeWorldReadable();\n                    allPrefs = mXSharedPreferences == null ? null : mXSharedPreferences.getAll();\n                    if (allPrefs == null || allPrefs.size() == 0) {\n                        XposedLogUtils.logE(\n                            \"[UID\" + android.os.Process.myUid() + \"]\",\n                            \"Cannot read module's SharedPreferences, some mods might not work!\"\n                        );\n                    } else {\n                        mPrefsMap.putAll(allPrefs);\n                    }\n                } else {\n                    mPrefsMap.putAll(allPrefs);\n                }\n            } catch (Throwable t) {\n                LogD(\"setXSharedPrefs\", t);\n            }\n        }\n    }\n\n    public void init(LoadPackageParam lpparam) {\n        String packageName = lpparam.packageName;\n        switch (packageName) {\n            case \"android\" -> {\n                mSystemFramework.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.systemui\" -> {\n                if (isSystemUIModuleEnable()) {\n                    mSystemUI.init(lpparam);\n                    mVarious.init(lpparam);\n                }\n            }\n            case \"com.miui.home\" -> {\n                if (isHomeModuleEnable()) {\n                    mHome.init(lpparam);\n                    mVarious.init(lpparam);\n                }\n            }\n            case \"com.miui.securitycenter\" -> {\n                if (isSecurityCenterModuleEnable()) {\n                    mSecurityCenter.init(lpparam);\n                    mVarious.init(lpparam);\n                }\n            }\n            case \"com.android.settings\" -> {\n                mSystemSettings.init(lpparam);\n                mSettings.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.personalassistant\" -> {\n                mPersonalAssistant.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.thememanager\" -> {\n                new ThemeCrackNew().init(lpparam);\n                mThemeManager.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.browser\" -> {\n                mBrowser.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.nfc\" -> {\n                mNfc.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.updater\" -> {\n                mUpdater.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.xiaomi.market\" -> mMarket.init(lpparam);\n\n            case \"com.miui.packageinstaller\" -> {\n                mPackageInstaller.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.powerkeeper\" -> mPowerKeeper.init(lpparam);\n\n            case \"com.xiaomi.misettings\" -> {\n                mMiSettings.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.xiaomi.joyose\" -> mJoyose.init(lpparam);\n\n            case \"com.miui.screenshot\" -> mScreenShot.init(lpparam);\n\n            case \"com.miui.screenrecorder\" -> {\n                mScreenRecorder.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.mediaeditor\" -> mMediaEditor.init(lpparam);\n\n            case \"com.miui.miwallpaper\" -> {\n                mMiWallpaper.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.weather2\" -> {\n                mWeather.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.deskclock\" -> {\n                mClock.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.player\" -> mMusic.init(lpparam);\n\n            case \"com.miui.gallery\" -> {\n                mGallery.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.aod\" -> {\n                mAod.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.xiaomi.barrage\" -> mBarrage.init(lpparam);\n\n            case \"com.xiaomi.aiasst.vision\" -> {\n                mAiAsst.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.xiaomi.scanner\" -> {\n                mScanner.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.mishare.connectivity\" -> {\n                mMiShare.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.milink.service\" -> mMiLink.init(lpparam);\n\n            case \"com.miui.guardprovider\" -> mGuardProvider.init(lpparam);\n\n            case \"com.lbe.security.miui\" -> {\n                mLbe.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.incallui\" -> {\n                mInCallUi.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.notes\" -> {\n                mNotes.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.tsmclient\" -> {\n                mTsmClient.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.contentextension\" -> {\n                mContentExtension.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.miui.voiceassist\" -> {\n                mVoiceAssist.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.mms\" -> {\n                mMms.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.fileexplorer\" -> {\n                mFileExplorer.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.phone\" -> mPhone.init(lpparam);\n\n            case \"com.xiaomi.mtb\" -> mMtb.init(lpparam);\n\n            case \"com.android.externalstorage\" -> {\n                mExternalStorage.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.camera\" -> {\n                mCamera.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.android.providers.downloads\" -> mDownloads.init(lpparam);\n\n            case \"com.miui.creation\" -> {\n                mCreation.init(lpparam);\n                mVarious.init(lpparam);\n            }\n            case \"com.xiaomi.NetworkBoost\" -> networkBoost.init(lpparam);\n            case BuildConfig.APPLICATION_ID -> {\n                ModuleActiveHook(lpparam);\n                XSharedPreferences mXSharedPreferences = new XSharedPreferences(Helpers.mAppModulePkg, PrefsUtils.mPrefsName);\n                String sharedPreferencePath = mXSharedPreferences.getFile().getPath();\n                sharedPreferencePath = sharedPreferencePath.replace(\"/com.sevtinge.cemiuiler/cemiuiler_prefs.xml\", \"\");\n                XposedLogUtils.logD(sharedPreferencePath);\n                File folder = new File(sharedPreferencePath+\"/com.sevtinge.hyperceiler\");\n                if (folder.exists() && folder.isDirectory()) {\n                    ShellUtils.execCommand(\"dd if=\"+sharedPreferencePath+\"/com.sevtinge.cemiuiler/cemiuiler_prefs.xml of=\"+sharedPreferencePath+\"/com.sevtinge.hyperceiler/hyperceiler_prefs.xml\", true, false);\n                } else {\n                    ShellUtils.execCommand(\"mkdir \"+sharedPreferencePath+\"/com.sevtinge.hyperceiler\", true, false);\n\n                }\n                ShellUtils.execCommand(\"dd if=\"+sharedPreferencePath+\"/com.sevtinge.cemiuiler/cemiuiler_prefs.xml of=\"+sharedPreferencePath+\"/com.sevtinge.hyperceiler/hyperceiler_prefs.xml\", true, false);\n            }\n            default -> mVarious.init(lpparam);\n        }\n    }\n\n    public void ModuleActiveHook(LoadPackageParam lpparam) {\n        Class<?> mHelpers = XposedHelpers.findClassIfExists(Helpers.mAppModulePkg + \".utils.Helpers\", lpparam.classLoader);\n\n        XposedHelpers.setStaticBooleanField(mHelpers, \"isModuleActive\", true);\n        XposedHelpers.setStaticIntField(mHelpers, \"XposedVersion\", XposedBridge.getXposedVersion());\n    }\n\n\n    public boolean isSafeModeEnable(String key) {\n        return !mPrefsMap.getBoolean(key);\n    }\n\n    public boolean isSystemUIModuleEnable() {\n        return isSafeModeEnable(\"system_ui_safe_mode_enable\");\n    }\n\n    public boolean isHomeModuleEnable() {\n        return isSafeModeEnable(\"home_safe_mode_enable\");\n    }\n\n    public boolean isSecurityCenterModuleEnable() {\n        return isSafeModeEnable(\"security_center_safe_mode_enable\");\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/base/HostDir.kt",
    "content": "package com.sevtinge.cemiuiler.module.base\n\nimport com.sevtinge.cemiuiler.utils.DexKit.closeDexKit\nimport com.sevtinge.cemiuiler.utils.DexKit.initDexKit\n\nobject LoadHostDir : BaseHook() {\n    override fun init() {\n        if (lpparam != null) {\n            initDexKit(lpparam)\n        }\n    }\n}\n\n\nobject CloseHostDir : BaseHook() {\n    override fun init() {\n        if (lpparam != null) {\n            closeDexKit()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/base/IXposedHook.java",
    "content": "package com.sevtinge.cemiuiler.module.base;\n\npublic interface IXposedHook {\n\n    void initZygote();\n\n    void handleLoadPackage();\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/aiasst/AiCaptions.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.aiasst\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\n\nclass AiCaptions : BaseHook() {\n\n    override fun init() {\n        val finder = loadClass(\"com.xiaomi.aiasst.vision.utils.SupportAiSubtitlesUtils\").methodFinder()\n\n        finder.filterByName(\"isSupportAiSubtitles\").first()\n            .createHook {\n                returnConstant(true)\n            }\n        finder.filterByName(\"isSupportJapanKoreaTranslation\").first()\n            .createHook {\n                returnConstant(true)\n            }\n        finder.filterByName(\"deviceWhetherSupportOfflineSubtitles\").first()\n            .createHook {\n                returnConstant(true)\n            }\n        finder.filterByName(\"isSupportOfflineAiSubtitles\").first()\n            .createHook {\n                returnConstant(true)\n            }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/aod/UnlockAlwaysOnDisplay.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.aod\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject UnlockAlwaysOnDisplay : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.aod.widget.AODSettings\").methodFinder().first {\n            name == \"onlySupportKeycodeGoto\"\n        }.createHook {\n            returnConstant(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/barrage/AnyBarrage.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.barrage\n\n\nimport android.service.notification.StatusBarNotification\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.ObjectUtils.getObjectOrNullAs\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\n\nobject AnyBarrage : BaseHook() {\n    override fun init() {\n        loadClass(\"com.xiaomi.barrage.service.NotificationMonitorService\").methodFinder()\n            .filterByName(\"filterNotification\")\n            .first().createHook {\n                before { param ->\n                    val statusBarNotification =\n                        param.args[0] as StatusBarNotification\n                    getObjectOrNullAs<ArrayList<String>>(\n                        param.thisObject,\n                        \"mBarragePackageList\"\n                    )!!.let {\n                        if (!it.contains(statusBarNotification.packageName)) {\n                            it.add(statusBarNotification.packageName)\n                        }\n                    }\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/barrage/CustomBarrageLength.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.barrage\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\n//from StarVoyager by @hosizoraru\nobject CustomBarrageLength : BaseHook() {\n    private val barrageLength by lazy {\n        mPrefsMap.getInt(\"barrage_length\", 36)\n    }\n\n    override fun init() {\n        val clazzString = loadClass(\"java.lang.String\")\n\n        clazzString.methodFinder()\n            .filterByName(\"subSequence\")\n            .filterByParamCount(2)\n            .first().createHook {\n                before { param ->\n                    if (Throwable().stackTrace.any { it.className == \"com.xiaomi.barrage.utils.BarrageWindowUtils\" }) {\n                        param.args[1] = minOf(barrageLength, (param.thisObject as String).length)\n                    }\n                }\n\n                after {\n                    if (it.throwable != null) {\n                        it.throwable = null\n                        it.result = it.thisObject\n                    }\n                }\n            }\n\n        clazzString.methodFinder()\n            .filterByName(\"length\")\n            .filterByParamCount(0)\n            .first().createHook {\n                after { param ->\n                    val stacktrace = Throwable().stackTrace\n                    if (stacktrace.any {\n                            it.className in setOf(\n                                \"java.lang.String\",\n                                \"android.text.SpannableStringBuilder\"\n                            )\n                        }) return@after\n                    if (stacktrace.any {\n                            it.className == \"com.xiaomi.barrage.utils.BarrageWindowUtils\" && it.methodName in setOf(\n                                \"addBarrageNotification\", \"sendBarrage\"\n                            )\n                        }) {\n                        val realResult = (param.result as Int)\n                        param.result = if (barrageLength < 36) {\n                            if (realResult > barrageLength) {\n                                maxOf(37, realResult)\n                            } else realResult\n                        } else {\n                            if (realResult <= barrageLength) {\n                                minOf(35, realResult)\n                            } else realResult\n                        }\n                    }\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/browser/DebugMode.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.browser\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper.safeClassLoader\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.closeDexKit\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.DexKit.initDexKit\nimport com.sevtinge.cemiuiler.utils.Helpers.getPackageVersionCode\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedBridge\n\nobject DebugMode : BaseHook() {\n    private var found = false\n\n    override fun init() {\n        /* val result: List<DexMethodDescriptor> =\n             Objects.requireNonNull(mBrowserResultMethodsMap.get(\"DebugMode\"))\n         for (descriptor in result) {\n             val DebugMode: Method = descriptor.getMethodInstance(lpparam.classLoader)\n             if (DebugMode.returnType == Boolean::class.javaPrimitiveType && DebugMode.toString()\n                     .contains(\"getDebugMode\")\n             ) {\n                 log(\"DebugMode method is $DebugMode\")\n                 found = true\n                 XposedBridge.hookMethod(DebugMode, XC_MethodReplacement.returnConstant(true))\n             }\n         }\n         if (!found) {\n             val result1: List<DexMethodDescriptor> =\n                 Objects.requireNonNull(mBrowserResultMethodsMap.get(\"DebugMode1\"))\n             for (descriptor1 in result1) {\n                 val DebugMode1: Method = descriptor1.getMethodInstance(lpparam.classLoader)\n                 if (DebugMode1.returnType == Boolean::class.javaPrimitiveType && DebugMode1.toString()\n                         .contains(\"getDebugMode\")\n                 ) {\n                     log(\"DebugMode1 method is $DebugMode1\")\n                     found = true\n                     XposedBridge.hookMethod(\n                         DebugMode1,\n                         XC_MethodReplacement.returnConstant(true)\n                     )\n                 }\n             }\n         }\n         if (!found) {\n             val result2: List<DexMethodDescriptor> =\n                 Objects.requireNonNull(mBrowserResultMethodsMap.get(\"DebugMode2\"))\n             for (descriptor2 in result2) {\n                 val DebugMode2: Method = descriptor2.getMethodInstance(lpparam.classLoader)\n                 if (DebugMode2.returnType == Boolean::class.javaPrimitiveType && DebugMode2.toString()\n                         .contains(\"getDebugMode\")\n                 ) {\n                     log(\"DebugMode2 method is $DebugMode2\")\n                     XposedBridge.hookMethod(\n                         DebugMode2,\n                         XC_MethodReplacement.returnConstant(true)\n                     )\n                 }\n             }\n         }*/\n        initDexKit(lpparam)\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"pref_key_debug_mode_new\")\n                returnType = \"boolean\"\n            }\n        }.forEach {\n            val debugMode = it.getMethodInstance(lpparam.classLoader)\n            if (debugMode.toString().contains(\"getDebugMode\")) {\n                XposedLogUtils.logI(\"DebugMode method is $debugMode\")\n                found = true\n                XposedBridge.hookMethod(\n                    debugMode,\n                    XC_MethodReplacement.returnConstant(true)\n                )\n            }\n        }\n\n        if (!found) {\n            dexKitBridge.findMethod {\n                matcher {\n                    addUsingStringsEquals(\"pref_key_debug_mode\")\n                    returnType = \"boolean\"\n                }\n            }.forEach {\n                val debugMode1 = it.getMethodInstance(safeClassLoader)\n                if (debugMode1.toString().contains(\"getDebugMode\")) {\n                    XposedLogUtils.logI(\"DebugMode1 method is $debugMode1\")\n                    found = true\n                    XposedBridge.hookMethod(\n                        debugMode1,\n                        XC_MethodReplacement.returnConstant(true)\n                    )\n                }\n            }\n        }\n\n        if (!found) {\n            dexKitBridge.findMethod {\n                matcher {\n                    addUsingStringsEquals(\"pref_key_debug_mode_\" + getPackageVersionCode(lpparam))\n                    returnType = \"boolean\"\n                }\n            }.forEach {\n                val debugMode2 = it.getMethodInstance(lpparam.classLoader)\n                if (debugMode2.toString().contains(\"getDebugMode\")) {\n                    XposedLogUtils.logI(\"DebugMode2 method is $debugMode2\")\n                    found = true\n                    XposedBridge.hookMethod(\n                        debugMode2,\n                        XC_MethodReplacement.returnConstant(true)\n                    )\n                }\n            }\n        }\n        closeDexKit()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/EnableLabOptions.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject EnableLabOptions : BaseHook() {\n    override fun init() {\n        try {\n            \"com.xiaomi.camera.util.SystemProperties\".hookBeforeMethod(\n                \"getBoolean\", String::class.java, Boolean::class.java\n            ) {\n                if (it.args[0] == \"camera.lab.options\") it.result = true\n            }\n        } catch (e: Exception) {\n           XposedLogUtils.logE(TAG, e)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/Unlock120Fps.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class Unlock120Fps extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupported4K120Fps\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/Unlock60Fps.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class Unlock60Fps extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.android.camera.data.data.config.ComponentConfigVideoQuality\", \"isSupport60FPS\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockAiEnhance.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockAiEnhance extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"supportAiEnhancedVideo\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"supportAiEnhancedVideo\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockAiShutter.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockAiShutter extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportAiShutter\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportAiShutter\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera.CameraSettings\", \"isSupportAiShutter\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockAiWatermark.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockAiWatermark extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.aiwatermark.AIWaterModuleEntry\", \"support\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockAmbilight.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockAmbilight extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.ambilight.AmbilightModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockAudioZoom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockAudioZoom extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.android.camera.aiaudio.AiAudioParameterManager\", \"isSupportAiAudioNew\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockClone.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockClone extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.clone.CloneModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.camera.features.mode.more.clone.MoreCloneModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockColorEnhance.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockColorEnhance extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportedColorEnhance\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportedColorEnhance\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockCosmeticMirror.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockCosmeticMirror extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.cosmeticmirror.CosmeticMirrorModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockCvlens.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class UnlockCvlens extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.CameraSettings\", \"isSupportCvLensDevice\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n        try {\n            findAndHookMethod(\"com.android.camera.CameraSettings\", \"getCvLensVersion\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(2);\n                }\n            });\n            findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"getCvLensVersion\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(2);\n                }\n            });\n            hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"getCvLensVersion\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(2);\n                }\n            });\n        } catch (Exception e) {\n            XposedLogUtils.logI(\"try to hook CvLensVersion failed!\\n\" + e);\n            throw new RuntimeException(e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockCyberFocusVersion2.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockCyberFocusVersion2 extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isCyberFocusVersion2\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isCyberFocusVersion2\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockDoc.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockDoc extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.doc.DocModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockDualcam.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockDualcam extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.dualcam.DualCamModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockDuration.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockDuration extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.fast.FastMotionModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockFilm.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockFilm extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.more.film.MoreFilmModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockFilmDelay.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockFilmDelay extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.film.delay.LongExpModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockFilmDollyZoom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockFilmDollyZoom extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.film.dollyzoom.DollyZoomModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockFilmDream.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockFilmDream extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.film.dream.DreamModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockFilmSlowShutter.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockFilmSlowShutter extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.film.slowshutter.SlowShutterModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockFilmTimeBackflow.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockFilmTimeBackflow extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.film.timebackflow.TimeBackflowModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockFilmTimeFreeze.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockFilmTimeFreeze extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.film.timefreeze.TimeFreezeModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockHandGesture.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockHandGesture extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.data.data.runing.DataItemRunning\", \"supportHandGesture\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockHdr.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockHdr extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportVideoHdr\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportVideoHdr\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportQcomVideoHdr\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportQcomVideoHdr\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockHeic.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockHeic extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isHeicSupported\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isHeicSupported\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockIdcard.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockIdcard extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.idcard.IDCardModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockLog.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockLog extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportedVideoLogFormat\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportedVideoLogFormat\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockMakeup.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockMakeup extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportMakeups\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportMakeups2\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportMakeups\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportMakeups2\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockMenMakeup.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockMenMakeup extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportMaleMakeupSwitch\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportMaleMakeupSwitch\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockMilive.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockMilive extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.milive.MiLiveModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockMoon.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockMoon extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.moon.MoonModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockNevus.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockNevus extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportNevusWipeSwitch\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportNevusSupported\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportNevusWipeSwitch\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockNewBeauty.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockNewBeauty extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportPortraitBeautyItem\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportPortraitBeautyItem\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockPano.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockPano extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.pano.pano3.PanoModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockPixel.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockPixel extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.pixel.PixelModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockPortrait.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockPortrait extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.portrait.PortraitModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockRaw.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockRaw extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportRaw\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportRaw\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockSlow.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockSlow extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.slow.SlowMotionModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockTrackEyes.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockTrackEyes extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportTrackEye\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportTrackEye\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockTrackFeature.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockTrackFeature extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportTrackFeatureEnable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportTrackFeatureEnable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockTrackFocus.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockTrackFocus extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isSupportTrackFocus\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.camera2.CameraCapabilities\", \"isTrackFocusDefined\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.android.camera2.CameraCapabilitiesUtil\", \"isSupportTrackFocus\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockVideosky.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockVideosky extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.videosky.VideoSkyModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockVlog.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockVlog extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.vlog.VlogModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.camera.features.mode.more.vlog.MoreVVModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/camera/UnlockVlogPro.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.camera;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockVlogPro extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.camera.features.mode.vlogpro.VlogProModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.camera.features.mode.more.vlogpro.MoreVlogProModuleEntry\", \"support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/clock/EnableHourGlass.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.clock;\n\nimport static com.sevtinge.cemiuiler.utils.Helpers.getPackageVersionCode;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class EnableHourGlass extends BaseHook {\n    @Override\n    public void init() {\n        int appVersionCode = getPackageVersionCode(lpparam);\n        hookAllMethods(\"com.android.deskclock.util.Util\", \"isHourGlassEnable\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                if (appVersionCode <= 130206400) {\n                    param.setResult(true);\n                } else {\n                    XposedLogUtils.logI(\"Your clock versionCode is \" + appVersionCode);\n                    XposedLogUtils.logI(\"Please revert to a supported version yourself\");\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/contentextension/DoublePress.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.contentextension\n\nimport android.content.Context\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass DoublePress : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.contentextension.utils.ContentCatcherUtil\").methodFinder().first {\n            name == \"isCatcherSupportDoublePress\" &&\n                parameterTypes[0] == Context::class.java\n        }.createHook {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/contentextension/HorizontalContentExtension.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.contentextension\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject HorizontalContentExtension : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.contentextension.services.TextContentExtensionService\").methodFinder()\n            .first {\n                name == \"isScreenPortrait\"\n            }.createHook {\n            after {\n                it.result = true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/contentextension/LinkOpenMode.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.contentextension;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.content.pm.PackageManager;\nimport android.content.pm.ResolveInfo;\nimport android.net.Uri;\nimport android.text.TextUtils;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class LinkOpenMode extends BaseHook {\n\n    Class<?> mAppsUtils;\n\n    @Override\n    public void init() {\n        mAppsUtils = findClassIfExists(\"com.miui.contentextension.utils.AppsUtils\");\n        int mode = mPrefsMap.getStringAsInt(\"content_extension_link_open_mode\", 0);\n\n        hookAllMethods(mAppsUtils, \"generateOpenIntent\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                Context mContext = (Context) param.args[0];\n                Object o = param.args[1];\n                String detailUrl = (String) XposedHelpers.callMethod(o, \"getIntent\");\n                if (TextUtils.isEmpty(detailUrl)) {\n                    detailUrl = (String) XposedHelpers.callMethod(o, \"getDetailUrl\");\n                }\n                Uri uri = Uri.parse(detailUrl);\n                setOpenIntent(mContext, uri, mode);\n                param.setResult(null);\n            }\n        });\n    }\n\n\n    private void setOpenIntent(Context context, Uri uri, int mode) {\n        Intent intent = new Intent(Intent.ACTION_VIEW, uri);\n        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n        switch (mode) {\n            case 0 -> setFreeFormIntent(context, getDefaultBrowserApp(context));\n\n            case 2 -> {\n                intent.setPackage(\"com.android.browser\");\n                setFreeFormIntent(context, \"com.android.browser\");\n            }\n        }\n        context.startActivity(intent);\n    }\n\n\n    private void setFreeFormIntent(Context context, String packageName) {\n        if (mPrefsMap.getBoolean(\"system_framework_freeform_jump\") && mPrefsMap.getBoolean(\"system_framework_freeform_content_extension\")) {\n            Intent mFreeFormIntent = new Intent(ACTION_PREFIX + \"SetFreeFormPackage\");\n            mFreeFormIntent.putExtra(\"package\", packageName);\n            context.sendBroadcast(mFreeFormIntent);\n        }\n    }\n\n    private String getDefaultBrowserApp(Context context) {\n        Intent intent = new Intent(Intent.ACTION_VIEW);\n        intent.addCategory(Intent.CATEGORY_DEFAULT);\n        intent.addCategory(Intent.CATEGORY_BROWSABLE);\n        Uri uri = Uri.parse(\"http://\");\n        intent.setDataAndType(uri, null);\n        List<ResolveInfo> resolveInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.GET_INTENT_FILTERS);\n        if (resolveInfoList.size() > 0) {\n            ActivityInfo activityInfo = resolveInfoList.get(0).activityInfo;\n            return activityInfo.packageName;\n        } else {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/contentextension/SuperImage.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.contentextension\n\nimport android.graphics.Bitmap\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass SuperImage : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.contentextension.utils.SuperImageUtils\").methodFinder().first {\n            name == \"isSupportSuperImage\"\n        }.createHook {\n            returnConstant(true)\n        }\n\n        loadClass(\"com.miui.contentextension.utils.SuperImageUtils\").methodFinder().first {\n            name == \"isBitmapSupportSuperImage\" &&\n                parameterTypes[0] == Bitmap::class.java\n        }.createHook {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/contentextension/UnlockTaplus.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.contentextension\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.ClassUtils.setStaticObject\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.IS_TABLET\n\nobject UnlockTaplus : BaseHook() {\n    override fun init() {\n        if (!IS_TABLET) return\n        loadClass(\"com.miui.contentextension.setting.activity.MainSettingsActivity\").methodFinder()\n            .first {\n                name == \"getFragment\"\n            }.createHook {\n                setStaticObject(\n                    loadClass(\"miui.os.Build\"), \"IS_TABLET\", false\n                )\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/contentextension/UseThirdPartyBrowser.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.contentextension;\n\nimport android.app.SearchManager;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.net.Uri;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\n\npublic class UseThirdPartyBrowser extends BaseHook {\n\n    @Override\n    public void init() {\n        // XposedBridge.log(\"Hook到传送门进程！\");\n        final Class<?> clazz = XposedHelpers.findClass(\"com.miui.contentextension.utils.AppsUtils\", lpparam.classLoader);\n        // getClassInfo(clazz);\n\n        XposedHelpers.findAndHookMethod(clazz, \"getIntentWithBrowser\", String.class, new XC_MethodReplacement() {\n            @Override\n            protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {\n                XposedLogUtils.logI(\"com.miui.contentextension hooked url \" + param.args[0].toString());\n                Uri uri = Uri.parse(param.args[0].toString());\n                Intent intent = new Intent();\n                intent.setAction(\"android.intent.action.VIEW\");\n                intent.setData(uri);\n                return intent;\n            }\n        });\n\n        XposedHelpers.findAndHookMethod(clazz, \"openGlobalSearch\", Context.class, String.class, String.class, new XC_MethodReplacement() {\n            @Override\n            protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {\n                XposedLogUtils.logI(\"com.miui.contentextension hooked all-search on, word is \" + param.args[1].toString() + \", from \" + param.args[2].toString());\n                try {\n                    Intent intent = new Intent();\n                    intent.setAction(Intent.ACTION_WEB_SEARCH);\n                    intent.putExtra(SearchManager.QUERY, param.args[1].toString());\n                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n                    ((Context) param.args[0]).startActivity(intent);\n                } catch (Exception e) {\n                    XposedLogUtils.logE(TAG, e);\n                }\n                return null;\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/creation/UnlockCreation.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.creation\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.setStaticObject\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.LazyClass.clazzMiuiBuild\n\nobject UnlockCreation : BaseHook() {\n    override fun init() {\n        setStaticObject(clazzMiuiBuild, \"IS_TABLET\", true)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/downloads/FuckXlDownload.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.downloads;\n\nimport android.os.Environment;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.io.File;\nimport java.io.FileNotFoundException;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class FuckXlDownload extends BaseHook {\n    private static final String TARGET_PACKAGE = \"com.android.providers.downloads\";\n    private static final File TARGET_PATH = new File(Environment.getExternalStorageDirectory(), \".xlDownload\").getAbsoluteFile();\n\n    @Override\n    public void init() {\n        if (!TARGET_PACKAGE.equals(lpparam.packageName)) return;\n        XposedLogUtils.logI(\"Target path = \" + TARGET_PATH);\n        XposedHelpers.findAndHookMethod(File.class, \"mkdirs\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) {\n                final boolean isXlDownload = ((File) param.thisObject).getAbsoluteFile().equals(TARGET_PATH);\n                if (isXlDownload) {\n                    XposedLogUtils.logI(\"blocked\");\n                    param.setThrowable(new FileNotFoundException(\"blocked\"));\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/externalstorage/DisableFolderCantUse.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.externalstorage;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class DisableFolderCantUse extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.externalstorage.ExternalStorageProvider\", \"shouldBlockFromTree\", String.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(false);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/fileexplorer/SelectName.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.fileexplorer\n\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectField\n\nobject SelectName : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.fileexplorer.view.FileListItem\").methodFinder().first {\n            name == \"onFinishInflate\"\n        }.createHook {\n            after {\n                (it.thisObject.getObjectField(\"mFileNameTextView\") as TextView).apply {\n                    setTextIsSelectable(mPrefsMap.getBoolean(\"file_explorer_can_selectable\"))\n                    isSingleLine = mPrefsMap.getBoolean(\"file_explorer_is_single_line\")\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableHdrEnhance.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableHdrEnhance extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.gallery.domain.DeviceFeature\", \"isSupportHDREnhance\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableIdPhoto.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableIdPhoto extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.mediaeditor.api.MediaEditorApiHelper\", \"isIDPhotoAvailable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.miui.gallery.domain.IDPhotoEntranceUtils\", \"isDeviceSupportIDPhoto\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.miui.gallery.domain.IDPhotoEntranceUtils\", \"getIdType\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(2);\n            }\n        });\n    }\n}\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableMagicMatting.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableMagicMatting extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.mediaeditor.api.MediaEditorApiHelper\", \"isMagicMattingAvailable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableMagicSky.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableMagicSky extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.gallery.util.FilterSkyEntranceUtils\", \"showSingleFilterSky\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableOcr.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableOcr extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.gallery.ui.photoPage.ocr.OCRHelper\", \"isSupportLocalOCR\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.miui.gallery.ui.photoPage.ocr.OCRHelper\", \"isSupportOCR\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableOcrForm.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableOcrForm extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.gallery.util.RecognizeFormUtil\", \"isAvailable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnablePdf.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnablePdf extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.gallery.request.PicToPdfHelper\", \"isPicToPdfSupport\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnablePhotoMovie.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnablePhotoMovie extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.mediaeditor.api.MediaEditorApiHelper\", \"isPhotoMovieAvailable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.miui.gallery.domain.DeviceFeature\", \"isDeviceSupportPhotoMovie\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableRemover2.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableRemover2 extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.gallery.editor.photo.app.remover2.sdk.Remover2CheckHelper\", \"isRemover2Support\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableTextYanhua.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableTextYanhua extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.gallery.domain.SkyCheckHelper\", \"isSupportTextYanhua\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableVideoEditor.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableVideoEditor extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.mediaeditor.api.MediaEditorApiHelper\", \"isVideoEditorAvailable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.miui.mediaeditor.api.MediaEditorApiHelper\", \"isVlogAvailable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/gallery/EnableVideoPost.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.gallery;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class EnableVideoPost extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.mediaeditor.api.MediaEditorApiHelper\", \"isVideoPostAvailable\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/guardprovider/DisableUploadAppList.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.guardprovider;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport org.json.JSONArray;\nimport org.json.JSONObject;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Method;\nimport java.util.List;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DisableUploadAppList extends BaseHook {\n\n    @Override\n    public void init(/*final XC_LoadPackage.LoadPackageParam lpparam*/) {\n        if (lpparam.packageName.equals(\"com.miui.guardprovider\")) {\n            XposedLogUtils.logI(\"Start to hook package \" + lpparam.packageName);\n\n            // Debug mode flag process\n            final Class<?> guardApplication = XposedHelpers.findClass(\"com.miui.guardprovider.GuardApplication\", lpparam.classLoader);\n            if (guardApplication != null) {\n                Field[] guardApplicationFields = guardApplication.getDeclaredFields();\n                for (Field field : guardApplicationFields) {\n                    if (\"c\".equals(field.getName())) {\n                        XposedHelpers.setStaticBooleanField(guardApplication, \"c\", true);\n                        XposedLogUtils.logI(\"Info: GuardProvider will work as debug mode!\");\n                    }\n                    XposedLogUtils.logI(\"Warning: GuardProvider debug mode flag not found!\");\n                }\n            } else {\n                XposedLogUtils.logI(\"Warning: GuardApplication class not found. GuardProvider will not work as debug mode! \");\n            }\n\n            // Prevent miui from uploading app list\n            final Class<?> antiDefraudAppManager = XposedHelpers.findClassIfExists(\"com.miui.guardprovider.engine.mi.antidefraud.AntiDefraudAppManager\", lpparam.classLoader);\n            if (antiDefraudAppManager == null) {\n                XposedLogUtils.logI(\"Skip: AntiDefraudAppManager class not found.\");\n                return;\n            } else {\n                XposedLogUtils.logI(\"Info: AntiDefraudAppManager class found.\");\n            }\n\n            final Method[] methods = antiDefraudAppManager.getDeclaredMethods();\n            Method getAllUnSystemAppsStatus = null;\n            for (Method method : methods) {\n                if (\"getAllUnSystemAppsStatus\".equals(method.getName()) && method.getParameterTypes().length == 1) {\n                    getAllUnSystemAppsStatus = method;\n                    break;\n                }\n            }\n            if (getAllUnSystemAppsStatus == null) {\n                XposedLogUtils.logI(\"Skip: getAllUnSystemAppsStatus method not found.\");\n                return;\n            } else {\n                XposedLogUtils.logI(\"Info: getAllUnSystemAppsStatus method found.\");\n            }\n\n            XposedBridge.hookMethod(getAllUnSystemAppsStatus, new XC_MethodHook() {\n                @Override\n                protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable {\n                    List list = (List) methodHookParam.args[0];\n\n                    String MIUI_VERSION = null;\n                    Field[] antiDefraudAppManagerFields = antiDefraudAppManager.getDeclaredFields();\n                    for (Field field : antiDefraudAppManagerFields) {\n                        if (field.getName().equals(\"MIUI_VERSION\")) {\n                            MIUI_VERSION = (String) XposedHelpers.getStaticObjectField(antiDefraudAppManager, \"MIUI_VERSION\");\n                        }\n                    }\n                    if (MIUI_VERSION == null) {\n                        XposedLogUtils.logI(\"Warning: Can't get MIUI_VERSION.\");\n                    }\n\n                    String uuid = null;\n                    final Class<?> uuidHelper = XposedHelpers.findClassIfExists(\"i.b\", lpparam.classLoader);\n                    if (uuidHelper != null) {\n                        final Method[] uuidHelperMethods = uuidHelper.getDeclaredMethods();\n                        Method getUUID = null;\n                        for (Method method : uuidHelperMethods) {\n                            if (method.getName().equals(\"b\") && method.getParameterTypes().length == 0) {\n                                getUUID = method;\n                                break;\n                            }\n                        }\n                        if (getUUID != null) {\n                            getUUID.setAccessible(true);\n                            uuid = (String) getUUID.invoke(methodHookParam);\n                        } else {\n                            XposedLogUtils.logI(\"Warning: getUUID method not found.\");\n                        }\n                    } else {\n                        XposedLogUtils.logI(\"Warning: uuidHelper class not found.\");\n                    }\n\n                    JSONObject jSONObject = new JSONObject();\n                    jSONObject.put(\"timestamp\", String.valueOf(System.currentTimeMillis() / 1000));\n                    jSONObject.put(\"os\", MIUI_VERSION);\n                    jSONObject.put(\"biz_id\", \"virus_scan\");\n                    jSONObject.put(\"uuid\", uuid);\n\n                    JSONArray jSONArray = new JSONArray();\n                    for (int i2 = 0; i2 < list.size(); i2++) {\n                        JSONObject jSONObject2 = new JSONObject();\n\n                        String pkgName = null;\n                        String version = null;\n                        String sign = null;\n                        String appName = null;\n\n                        Object antiDefraudAppInfo = (Object) list.get(i2);\n\n                        Field[] fields = antiDefraudAppInfo.getClass().getDeclaredFields();\n                        for (Field filed : fields) {\n                            filed.setAccessible(true);\n                            if (filed.getName().equals(\"pkgName\")) {\n                                pkgName = (String) filed.get(antiDefraudAppInfo);\n                            } else if (filed.getName().equals(\"version\")) {\n                                version = (String) filed.get(antiDefraudAppInfo);\n                            } else if (filed.getName().equals(\"sign\")) {\n                                sign = (String) filed.get(antiDefraudAppInfo);\n                            } else if (filed.getName().equals(\"appName\")) {\n                                appName = (String) filed.get(antiDefraudAppInfo);\n                            }\n                        }\n\n                        jSONObject2.put(\"pkg\", pkgName);\n                        jSONObject2.put(\"version\", version);\n                        jSONObject2.put(\"signature\", sign);\n                        jSONObject2.put(\"appname\", appName);\n\n                        jSONArray.put(jSONObject2);\n                    }\n                    jSONObject.put(\"content\", jSONArray);\n\n                    XposedLogUtils.logI(\"Info: Intercept=\" + jSONObject.toString());\n\n                    methodHookParam.setResult(null);\n                }\n            });\n        }\n    }\n\n   /* @Override\n    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) {\n        if (lpparam.packageName.equals(\"com.miui.guardprovider\")) {\n            XposedBridge.log(\"Cemiuiler: Start to hook package \" + lpparam.packageName);\n\n            // Debug mode flag process\n            final Class<?> guardApplication = XposedHelpers.findClass(\"com.miui.guardprovider.GuardApplication\", lpparam.classLoader);\n            if (guardApplication != null) {\n                Field[] guardApplicationFields = guardApplication.getDeclaredFields();\n                for (Field field : guardApplicationFields) {\n                    if (field.getName().equals(\"c\")) {\n                        XposedHelpers.setStaticBooleanField(guardApplication, \"c\", true);\n                        XposedBridge.log(\"Cemiuiler: Info: GuardProvider will work as debug mode!\");\n                    }\n                    XposedBridge.log(\"Cemiuiler: Warning: GuardProvider debug mode flag not found!\");\n                }\n            } else {\n                XposedBridge.log(\"Cemiuiler: Warning: GuardApplication class not found. GuardProvider will not work as debug mode! \");\n            }\n\n            // Prevent miui from uploading app list\n            final Class<?> antiDefraudAppManager = XposedHelpers.findClassIfExists(\"com.miui.guardprovider.engine.mi.antidefraud.AntiDefraudAppManager\", lpparam.classLoader);\n            if (antiDefraudAppManager == null) {\n                XposedBridge.log(\"Cemiuiler: Skip: AntiDefraudAppManager class not found.\");\n                return;\n            } else {\n                XposedBridge.log(\"Cemiuiler: Info: AntiDefraudAppManager class found.\");\n            }\n\n            final Method[] methods = antiDefraudAppManager.getDeclaredMethods();\n            Method getAllUnSystemAppsStatus = null;\n            for (Method method : methods) {\n                if (method.getName().equals(\"getAllUnSystemAppsStatus\") && method.getParameterTypes().length == 1) {\n                    getAllUnSystemAppsStatus = method;\n                    break;\n                }\n            }\n            if (getAllUnSystemAppsStatus == null) {\n                XposedBridge.log(\"Cemiuiler: Skip: getAllUnSystemAppsStatus method not found.\");\n                return;\n            } else {\n                XposedBridge.log(\"Cemiuiler: Info: getAllUnSystemAppsStatus method found.\");\n            }\n\n            XposedBridge.hookMethod(getAllUnSystemAppsStatus, new XC_MethodHook() {\n                @Override\n                protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable {\n                    List<Object> list = (List) methodHookParam.args[0];\n\n                    String MIUI_VERSION = null;\n                    Field[] antiDefraudAppManagerFields = antiDefraudAppManager.getDeclaredFields();\n                    for (Field field : antiDefraudAppManagerFields) {\n                        if (field.getName().equals(\"MIUI_VERSION\")) {\n                            MIUI_VERSION = (String) XposedHelpers.getStaticObjectField(antiDefraudAppManager, \"MIUI_VERSION\");\n                        }\n                    }\n                    if (MIUI_VERSION == null) {\n                        XposedBridge.log(\"Cemiuiler: Warning: Can't get MIUI_VERSION.\");\n                    }\n\n                    String uuid = null;\n                    final Class<?> uuidHelper = XposedHelpers.findClassIfExists(\"i.b\", lpparam.classLoader);\n                    if (uuidHelper != null) {\n                        final Method[] uuidHelperMethods = uuidHelper.getDeclaredMethods();\n                        Method getUUID = null;\n                        for (Method method : uuidHelperMethods) {\n                            if (method.getName().equals(\"b\") && method.getParameterTypes().length == 0) {\n                                getUUID = method;\n                                break;\n                            }\n                        }\n                        if (getUUID != null) {\n                            getUUID.setAccessible(true);\n                            uuid = (String) getUUID.invoke(methodHookParam);\n                        } else {\n                            XposedBridge.log(\"Cemiuiler: Warning: getUUID method not found.\");\n                        }\n                    } else {\n                        XposedBridge.log(\"Cemiuiler: Warning: uuidHelper class not found.\");\n                    }\n\n                    JSONObject jSONObject = new JSONObject();\n                    jSONObject.put(\"timestamp\", String.valueOf(System.currentTimeMillis() / 1000));\n                    jSONObject.put(\"os\", MIUI_VERSION);\n                    jSONObject.put(\"biz_id\", \"virus_scan\");\n                    jSONObject.put(\"uuid\", uuid);\n\n                    JSONArray jSONArray = new JSONArray();\n                    for (int i2 = 0; i2 < list.size(); i2++) {\n                        JSONObject jSONObject2 = new JSONObject();\n\n                        String pkgName = null;\n                        String version = null;\n                        String sign = null;\n                        String appName = null;\n\n                        Object antiDefraudAppInfo = (Object) list.get(i2);\n\n                        Field[] fields = antiDefraudAppInfo.getClass().getDeclaredFields();\n                        for (Field filed : fields) {\n                            filed.setAccessible(true);\n                            if (filed.getName().equals(\"pkgName\")) {\n                                pkgName = (String) filed.get(antiDefraudAppInfo);\n                            } else if (filed.getName().equals(\"version\")) {\n                                version = (String) filed.get(antiDefraudAppInfo);\n                            } else if (filed.getName().equals(\"sign\")) {\n                                sign = (String) filed.get(antiDefraudAppInfo);\n                            } else if (filed.getName().equals(\"appName\")) {\n                                appName = (String) filed.get(antiDefraudAppInfo);\n                            }\n                        }\n\n                        jSONObject2.put(\"pkg\", pkgName);\n                        jSONObject2.put(\"version\", version);\n                        jSONObject2.put(\"signature\", sign);\n                        jSONObject2.put(\"appname\", appName);\n\n                        jSONArray.put(jSONObject2);\n                    }\n                    jSONObject.put(\"content\", jSONArray);\n\n                    XposedBridge.log(\"Cemiuiler: Info: Intercept=\" + jSONObject.toString());\n\n                    methodHookParam.setResult(null);\n                }\n            });\n        }\n    }*/\n\n\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/guardprovider/DisableUploadAppListNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.guardprovider\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.replaceMethod\n\nobject DisableUploadAppListNew : BaseHook() {\n\n    @Throws(NoSuchMethodException::class)\n    override fun init() {\n        /*val antiDefraudAppManager = mGuardProviderResultMethodsMap[\"AntiDefraudAppManager\"]!!\n        assert(antiDefraudAppManager.size == 1)\n        val antiDefraudAppManagerDescriptor = antiDefraudAppManager.first()\n        val antiDefraudAppManagerMethod: Method = antiDefraudAppManagerDescriptor.getMethodInstance(lpparam.classLoader)\n        antiDefraudAppManagerMethod.replaceMethod {\n            return@replaceMethod null\n        }*/\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"AntiDefraudAppManager\", \"https://flash.sec.miui.com/detect/app\")\n            }\n        }.forEach {\n            it.getMethodInstance(lpparam.classLoader).replaceMethod {\n                return@replaceMethod null\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/AllAppsBlur.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport android.app.Activity;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class AllAppsBlur extends BaseHook {\n\n    Class<?> mLauncher;\n    Class<?> mBlurUtils;\n    Class<?> mAllAppsTransitionController;\n    Class<?> mActivityCls;\n    Activity mActivity;\n\n    @Override\n    public void init() {\n        mActivityCls = Activity.class;\n        mLauncher = findClassIfExists(\"com.miui.home.launcher.Launcher\");\n        mBlurUtils = findClassIfExists(\"com.miui.home.launcher.common.BlurUtils\");\n        mAllAppsTransitionController = findClassIfExists(\"com.miui.home.launcher.allapps.BaseAllAppsContainerView\");\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/AnimDurationRatio.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject AnimDurationRatio : BaseHook() {\n    override fun init() {\n        val value1 = mPrefsMap.getInt(\"home_title_animation_speed\", 100).toFloat() / 100f\n        val value2 = mPrefsMap.getInt(\"home_recent_animation_speed\", 100).toFloat() / 100f\n\n        loadClass(\"com.miui.home.recents.util.RectFSpringAnim\").methodFinder().first {\n            name == \"getModifyResponse\"\n        }.createHook {\n            before {\n                it.result = it.args[0] as Float * value1\n            }\n        }\n\n        loadClass(\"com.miui.home.launcher.common.DeviceLevelUtils\").methodFinder().first {\n            name == \"getDeviceLevelTransitionAnimRatio\"\n        }.createHook {\n            before {\n                it.result = value2\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/FreeFormCountForHome.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class FreeFormCountForHome extends BaseHook {\n\n    Class<?> mRecentsAndFSGesture;\n\n    @Override\n    public void init() {\n        mRecentsAndFSGesture = findClassIfExists(\"com.miui.home.launcher.RecentsAndFSGestureUtils\");\n\n        hookAllMethods(mRecentsAndFSGesture,\n            \"canTaskEnterMiniSmallWindow\",\n            XC_MethodReplacement.returnConstant(true));\n\n        hookAllMethods(mRecentsAndFSGesture,\n            \"canTaskEnterSmallWindow\",\n            XC_MethodReplacement.returnConstant(true));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/HideNavigationBar.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport android.provider.Settings;\nimport android.view.MotionEvent;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class HideNavigationBar extends BaseHook {\n    @Override\n    public void init() {\n        /*横屏隐藏*/\n        findAndHookMethod(\"com.miui.home.recents.views.RecentsContainer\",\n            \"showLandscapeOverviewGestureView\",\n            boolean.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.args[0] = false;\n                }\n            }\n        );\n\n        /*锁定返回*/\n        findAndHookMethod(\"com.miui.home.recents.NavStubView\",\n            \"isMistakeTouch\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    View navView = (View) param.thisObject;\n                    boolean misTouch = false;\n                    boolean setting = Settings.Global.getInt(navView.getContext().getContentResolver(), \"show_mistake_touch_toast\", 1) != 0;\n                    if (setting) {\n                        boolean mIsShowStatusBar = XposedHelpers.getBooleanField(param.thisObject, \"mIsShowStatusBar\");\n                        if (!mIsShowStatusBar) {\n                            misTouch = (boolean) XposedHelpers.callMethod(param.thisObject, \"isLandScapeActually\");\n                        }\n                    }\n                    param.setResult(misTouch);\n                }\n            }\n        );\n\n        /*横屏设置状态*/\n        findAndHookMethod(\"com.miui.home.recents.NavStubView\", \"onPointerEvent\",\n            MotionEvent.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    boolean mIsInFsMode = XposedHelpers.getBooleanField(param.thisObject, \"mIsInFsMode\");\n                    if (!mIsInFsMode) {\n                        MotionEvent motionEvent = (MotionEvent) param.args[0];\n                        if (motionEvent.getAction() == 0) {\n                            XposedHelpers.setObjectField(param.thisObject, \"mHideGestureLine\", true);\n                        }\n                    }\n                }\n            }\n        );\n\n        /*恢复状态*/\n        findAndHookMethod(\"com.miui.home.recents.NavStubView\", \"updateScreenSize\",\n            new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    XposedHelpers.setObjectField(param.thisObject, \"mHideGestureLine\", false);\n                }\n            }\n        );\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/HomePortraitReverse.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport android.app.Activity;\nimport android.content.pm.ActivityInfo;\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class HomePortraitReverse extends BaseHook {\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.Launcher\", \"onCreate\", Bundle.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Activity act = (Activity) param.thisObject;\n                act.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/MaxFreeForm.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home\n\nimport android.util.ArraySet\nimport com.github.kyuubiran.ezxhelper.ClassUtils\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.ObjectHelper.Companion.objectHelper\nimport com.github.kyuubiran.ezxhelper.ObjectUtils\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass MaxFreeForm : BaseHook() {\n    override fun init() {\n        // CanTaskEnterSmallWindow\n        val clazzRecentsAndFSGestureUtils =\n            loadClass(\"com.miui.home.launcher.RecentsAndFSGestureUtils\")\n        clazzRecentsAndFSGestureUtils.methodFinder().filter {\n            name == \"canTaskEnterSmallWindow\"\n        }.toList().createHooks {\n            returnConstant(true)\n        }\n\n        // CanTaskEnterMiniSmallWindow\n        clazzRecentsAndFSGestureUtils.methodFinder().filter {\n            name == \"canTaskEnterMiniSmallWindow\"\n        }.toList().createHooks {\n            before {\n                it.result = ClassUtils.invokeStaticMethodBestMatch(\n                    loadClass(\"com.miui.home.smallwindow.SmallWindowStateHelper\"),\n                    \"getInstance\"\n                )!!.objectHelper()\n                    .invokeMethodBestMatch(\"canEnterMiniSmallWindow\") as Boolean\n            }\n        }\n\n        // StartSmallWindow\n        loadClass(\"com.miui.home.smallwindow.SmallWindowStateHelperUseManager\").methodFinder()\n            .filterByName(\"canEnterMiniSmallWindow\").first().createHook {\n                before {\n                    it.result = ObjectUtils.getObjectOrNullAs<ArraySet<*>>(\n                        it.thisObject,\n                        \"mMiniSmallWindowInfoSet\"\n                    )!!.isEmpty()\n                }\n            }\n        loadClass(\"miui.app.MiuiFreeFormManager\").methodFinder()\n            .filterByName(\"getAllFreeFormStackInfosOnDisplay\")\n            .toList().createHooks {\n                before { param ->\n                    if (Throwable().stackTrace.any {\n                            it.className == \"android.util.MiuiMultiWindowUtils\" && it.methodName == \"startSmallFreeform\"\n                        }) {\n                        param.result = null\n                    }\n                }\n            }\n        loadClass(\"android.util.MiuiMultiWindowUtils\").methodFinder()\n            .filterByName(\"hasSmallFreeform\").toList().createHooks {\n                before { param ->\n                    if (Throwable().stackTrace.any {\n                            it.className == \"android.util.MiuiMultiWindowUtils\" && it.methodName == \"startSmallFreeform\"\n                        }) {\n                        param.result = false\n                    }\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/ScreenSwipe.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sevtinge.cemiuiler.module.app.GlobalActions;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ScreenSwipe extends BaseHook {\n\n    Class<?> mLauncher;\n    Class<?> mWorkspace;\n\n    @Override\n    public void init() {\n        mLauncher = findClassIfExists(\"com.miui.home.launcher.Launcher\");\n        mWorkspace = findClassIfExists(\"com.miui.home.launcher.Workspace\");\n\n        findAndHookMethod(mWorkspace, \"onVerticalGesture\", int.class, MotionEvent.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                if ((boolean) XposedHelpers.callMethod(param.thisObject, \"isInNormalEditingMode\")) return;\n                String key = null;\n                Context helperContext = ((ViewGroup) param.thisObject).getContext();\n                int numOfFingers = 1;\n                if (param.args[1] != null) numOfFingers = ((MotionEvent) param.args[1]).getPointerCount();\n                if ((int) param.args[0] == 11) {\n                    if (numOfFingers == 1)\n                        key = \"prefs_key_home_gesture_down_swipe\";\n                    else if (numOfFingers == 2)\n                        key = \"prefs_key_home_gesture_down_swipe2\";\n                    if (GlobalActions.handleAction(helperContext, key)) param.setResult(true);\n                } else if ((int) param.args[0] == 10) {\n                    if (numOfFingers == 1)\n                        key = \"prefs_key_home_gesture_up_swipe\";\n                    else if (numOfFingers == 2)\n                        key = \"prefs_key_home_gesture_up_swipe2\";\n                    if (GlobalActions.handleAction(helperContext, key)) param.setResult(true);\n                }\n            }\n        });\n\n        findAndHookMethod(mLauncher, \"onCreate\", Bundle.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) {\n                final Activity act = (Activity) param.thisObject;\n                Handler mHandler = (Handler) XposedHelpers.getObjectField(act, \"mHandler\");\n                new PrefsUtils.SharedPrefsObserver(act, mHandler) {\n                    @Override\n                    public void onChange(Uri uri) {\n                        try {\n                            String type = uri.getPathSegments().get(1);\n                            String key = uri.getPathSegments().get(2);\n                            if (key.contains(\"prefs_key_home_gesture_down_swipe\"))\n                                switch (type) {\n                                    case \"string\" ->\n                                        mPrefsMap.put(key, PrefsUtils.getSharedStringPrefs(act, key, \"\"));\n                                    case \"integer\" ->\n                                        mPrefsMap.put(key, PrefsUtils.getSharedIntPrefs(act, key, 1));\n                                    case \"boolean\" ->\n                                        mPrefsMap.put(key, PrefsUtils.getSharedBoolPrefs(act, key, false));\n                                }\n                        } catch (Throwable t) {\n                            LogD(TAG, \"setAction\", t);\n                        }\n                    }\n                };\n            }\n        });\n\n        findAndHookMethodSilently(\"com.miui.home.launcher.uioverrides.StatusBarSwipeController\", \"canInterceptTouch\", MotionEvent.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) {\n                if (mPrefsMap.getInt(\"home_gesture_down_swipe_action\", 0) > 0) param.setResult(false);\n            }\n        });\n\n        // content_center, global_search, notification_bar\n        findAndHookMethodSilently(\"com.miui.home.launcher.allapps.LauncherMode\", \"getPullDownGesture\", Context.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) {\n                if (PrefsUtils.getSharedIntPrefs((Context) param.args[0], \"prefs_key_home_gesture_down_swipe_action\", 1) > 1)\n                    param.setResult(\"no_action\");\n            }\n        });\n\n        // content_center, global_search\n        findAndHookMethodSilently(\"com.miui.home.launcher.allapps.LauncherMode\", \"getSlideUpGesture\", Context.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) {\n                if (PrefsUtils.getSharedIntPrefs((Context) param.args[0], \"prefs_key_home_gesture_up_swipe_action\", 0) > 0)\n                    param.setResult(\"no_action\");\n            }\n        });\n\n        if (findAndHookMethodSilently(\"com.miui.home.launcher.DeviceConfig\", \"isGlobalSearchEnable\", Context.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) {\n                if (PrefsUtils.getSharedIntPrefs((Context) param.args[0], \"prefs_key_home_gesture_up_swipe_action\", 0) > 0)\n                    param.setResult(false);\n            }\n        })) {\n            findAndHookMethodSilently(\"com.miui.home.launcher.search.SearchEdgeLayout\", \"isTopSearchEnable\", new MethodHook() {\n                @Override\n                protected void before(final MethodHookParam param) {\n                    View view = (View) param.thisObject;\n                    if (PrefsUtils.getSharedIntPrefs(view.getContext(), \"prefs_key_home_gesture_down_swipe_action\", 0) > 0)\n                        param.setResult(false);\n                }\n            });\n\n            findAndHookMethodSilently(\"com.miui.home.launcher.search.SearchEdgeLayout\", \"isBottomGlobalSearchEnable\", new MethodHook() {\n                @Override\n                protected void before(final MethodHookParam param) {\n                    View view = (View) param.thisObject;\n                    if (PrefsUtils.getSharedIntPrefs(view.getContext(), \"prefs_key_home_gesture_up_swipe_action\", 0) > 0)\n                        param.setResult(false);\n                }\n            });\n\n            findAndHookMethodSilently(\"com.miui.home.launcher.DeviceConfig\", \"isGlobalSearchBottomEffectEnable\", Context.class, new MethodHook() {\n                @Override\n                protected void before(final MethodHookParam param) {\n                    if (PrefsUtils.getSharedIntPrefs((Context) param.args[0], \"prefs_key_home_gesture_up_swipe_action\", 0) > 0)\n                        param.setResult(false);\n                }\n            });\n        } else if (!findAndHookMethodSilently(\"com.miui.home.launcher.DeviceConfig\", \"allowedSlidingUpToStartGolbalSearch\", Context.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) {\n                if (PrefsUtils.getSharedIntPrefs((Context) param.args[0], \"prefs_key_home_gesture_up_swipe_action\", 0) > 0)\n                    param.setResult(false);\n            }\n        })) if (lpparam.packageName.equals(\"com.miui.home\"))\n            XposedLogUtils.logI(TAG, \"Cannot disable swipe up search\");\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/SeekPoints.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport android.content.Context;\nimport android.os.Handler;\nimport android.os.Message;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SeekPoints extends BaseHook {\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.ScreenView\", \"updateSeekPoints\", int.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                showSeekBar((View) param.thisObject);\n            }\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.ScreenView\", \"addView\", View.class, int.class, ViewGroup.LayoutParams.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                showSeekBar((View) param.thisObject);\n            }\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.ScreenView\", \"removeScreen\", int.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                showSeekBar((View) param.thisObject);\n            }\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.ScreenView\", \"removeScreensInLayout\", int.class, int.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                showSeekBar((View) param.thisObject);\n            }\n        });\n    }\n\n    private void showSeekBar(View workspace) {\n        if (!\"Workspace\".equals(workspace.getClass().getSimpleName())) return;\n        boolean isInEditingMode = (boolean) XposedHelpers.callMethod(workspace, \"isInNormalEditingMode\");\n        View mScreenSeekBar = (View) XposedHelpers.getObjectField(workspace, \"mScreenSeekBar\");\n        if (mScreenSeekBar == null) {\n            XposedLogUtils.logI(\"showSeekBar\", \"HideSeekPointsHook Cannot find seekbar\");\n            return;\n        }\n        Context mContext = workspace.getContext();\n        Handler mHandler = (Handler) XposedHelpers.getAdditionalInstanceField(workspace, \"mHandlerEx\");\n        if (mHandler == null) {\n            mHandler = new Handler(mContext.getMainLooper()) {\n                @Override\n                public void handleMessage(Message msg) {\n                    View seekBar = (View) msg.obj;\n                    if (seekBar != null)\n                        seekBar.animate().alpha(0.0f).setDuration(600).withEndAction(new Runnable() {\n                            @Override\n                            public void run() {\n                                seekBar.setVisibility(View.GONE);\n                            }\n                        });\n                }\n            };\n            XposedHelpers.setAdditionalInstanceField(workspace, \"mHandlerEx\", mHandler);\n        }\n        if (mHandler == null) {\n            XposedLogUtils.logI(\"showSeekBar\", \"HideSeekPointsHook Cannot create handler\");\n            return;\n        }\n        if (mHandler.hasMessages(666)) mHandler.removeMessages(666);\n        mScreenSeekBar.animate().cancel();\n        if (!isInEditingMode && XposedInit.mPrefsMap.getStringAsInt(\"home_other_seek_points\", 0) == 2) {\n            mScreenSeekBar.setAlpha(0.0f);\n            mScreenSeekBar.setVisibility(View.GONE);\n            return;\n        }\n        mScreenSeekBar.setVisibility(View.VISIBLE);\n        mScreenSeekBar.animate().alpha(1.0f).setDuration(300);\n        if (!isInEditingMode) {\n            Message msg = Message.obtain(mHandler, 666);\n            msg.obj = mScreenSeekBar;\n            mHandler.sendMessageDelayed(msg, 1500);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/SetDeviceLevel.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport com.sevtinge.cemiuiler.utils.replaceMethod\n\nobject SetDeviceLevel : BaseHook() {\n    override fun init() {\n        val mDeviceLevelUtilsClass = loadClass(\"com.miui.home.launcher.common.DeviceLevelUtils\")\n        val mSystemPropertiesClass = loadClass(\"android.os.SystemProperties\")\n        val mDeviceConfigClass = loadClass(\"com.miui.home.launcher.DeviceConfig\")\n\n        try {\n            loadClass(\"com.miui.home.launcher.common.CpuLevelUtils\").methodFinder().first {\n                name == \"getQualcommCpuLevel\" && parameterCount == 1\n            }\n        } catch (e: Exception) {\n            loadClass(\"miuix.animation.utils.DeviceUtils\").methodFinder().first {\n                name == \"getQualcommCpuLevel\" && parameterCount == 1\n            }\n        }.createHook { returnConstant(2) }\n\n        runCatching {\n            mDeviceConfigClass.methodFinder().first {\n                name == \"isUseSimpleAnim\"\n            }.createHook {\n                before { it.result = false }\n            }\n        }\n        runCatching {\n            mDeviceLevelUtilsClass.methodFinder().first {\n                name == \"getDeviceLevel\"\n            }.createHook {\n                before { it.result = 2 }\n            }\n        }\n        runCatching {\n            mDeviceConfigClass.methodFinder().first {\n                name == \"isSupportCompleteAnimation\"\n            }.createHook {\n                before { it.result = true }\n            }\n        }\n        runCatching {\n            mDeviceLevelUtilsClass.methodFinder().first {\n                name == \"isLowLevelOrLiteDevice\"\n            }.createHook {\n                before { it.result = false }\n            }\n        }\n        runCatching {\n            mDeviceConfigClass.methodFinder().first {\n                name == \"isMiuiLiteVersion\"\n            }.createHook {\n                before { it.result = false }\n            }\n        }\n        runCatching {\n            \"com.miui.home.launcher.util.noword.NoWordSettingHelperKt\".hookBeforeMethod(\n                \"isNoWordAvailable\"\n            ) { it.result = true }\n        }\n\n        runCatching {\n            mSystemPropertiesClass.methodFinder().filter {\n                name == \"getBoolean\" && parameterTypes[0] == String::class.java && parameterTypes[1] == Boolean::class.java\n            }.toList().createHooks {\n                before {\n                    if (it.args[0] == \"ro.config.low_ram.threshold_gb\") it.result = false\n                    if (it.args[0] == \"ro.miui.backdrop_sampling_enabled\") it.result = true\n                }\n            }\n        }\n        runCatching {\n            \"com.miui.home.launcher.common.Utilities\".hookBeforeMethod(\n                \"canLockTaskView\"\n            ) { it.result = true }\n        }\n        runCatching {\n            \"com.miui.home.launcher.MIUIWidgetUtil\".hookBeforeMethod(\n                \"isMIUIWidgetSupport\"\n            ) {\n                it.result = true\n            }\n        }\n        runCatching {\n            \"com.miui.home.launcher.MiuiHomeLog\".findClass().replaceMethod(\n                \"log\", String::class.java, String::class.java\n            ) {\n                return@replaceMethod null\n            }\n        }\n        runCatching {\n            \"com.xiaomi.onetrack.OneTrack\".hookBeforeMethod(\"isDisable\") {\n                it.result = true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/StickyFloatingWindowsForHome.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport android.annotation.SuppressLint;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class StickyFloatingWindowsForHome extends BaseHook {\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.recents.views.RecentsContainer\", \"onAttachedToWindow\", new MethodHook() {\n            @SuppressLint(\"UnspecifiedRegisterReceiverFlag\")\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context) XposedHelpers.callMethod(param.thisObject, \"getContext\");\n                mContext.registerReceiver(new BroadcastReceiver() {\n                    @Override\n                    public void onReceive(Context context, Intent intent) {\n                        try {\n                            String pkgName = intent.getStringExtra(\"package\");\n                            if (pkgName != null) {\n                                XposedHelpers.callMethod(param.thisObject, \"dismissRecentsToLaunchTargetTaskOrHome\", pkgName, true);\n                            }\n                        } catch (Throwable t) {\n                            XposedLogUtils.logW(TAG, t);\n                        }\n                    }\n                }, new IntentFilter(ACTION_PREFIX + \"dismissRecentsWhenFreeWindowOpen\"));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/ToastSlideAgain.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport android.view.MotionEvent;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ToastSlideAgain extends BaseHook {\n    public XC_MethodHook.Unhook unhook = null;\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.recents.NavStubView\",\n            \"onPointerEvent\", MotionEvent.class,\n            new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    unhook = hookToast();\n                    // XposedLogUtils.logI(\"im hook onPointerEvent\");\n                }\n\n                @Override\n                protected void after(MethodHookParam param) {\n                    unHook(unhook);\n                }\n            }\n        );\n\n        findAndHookMethod(\"com.miui.home.recents.GestureModeApp\",\n            \"onStartGesture\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    unhook = hookToast();\n                    // XposedLogUtils.logI(\"im hook onStartGesture\");\n                }\n\n                @Override\n                protected void after(MethodHookParam param) {\n                    unHook(unhook);\n                }\n            }\n        );\n    }\n\n    public XC_MethodHook.Unhook hookToast() {\n        return XposedHelpers.findAndHookMethod(findClassIfExists(\"android.widget.Toast\"),\n            \"show\", new XC_MethodHook() {\n                @Override\n                protected void beforeHookedMethod(MethodHookParam param) {\n                    param.setResult(null);\n                    // XposedLogUtils.logI(\"im hook Toast show\");\n                }\n            }\n        );\n    }\n\n    public void unHook(XC_MethodHook.Unhook unhook) {\n        if (unhook != null) {\n            unhook.unhook();\n            // XposedLogUtils.logI(\"the unhook is: \" + unhook);\n        }  // logE(\"the unhook is: null\");\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/UnlockHotseatIcon.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\n\nclass UnlockHotseatIcon : BaseHook() {\n    override fun init() {\n        \"com.miui.home.launcher.DeviceConfig\".hookBeforeMethod(\"getHotseatMaxCount\") {\n            it.result = 99\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/UserPresentAnimation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UserPresentAnimation extends BaseHook {\n\n    Class<?> mUserPresentAnimationCompatV12Phone;\n\n    @Override\n    public void init() {\n        mUserPresentAnimationCompatV12Phone = !isPad() ?\n            findClassIfExists(\"com.miui.home.launcher.compat.UserPresentAnimationCompatV12Phone\") :\n        findClassIfExists(\"com.miui.home.launcher.compat.UserPresentAnimationCompatV12Spring\");\n        findAndHookMethod(mUserPresentAnimationCompatV12Phone, \"getSpringAnimator\", View.class, int.class, float.class, float.class, float.class, float.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.args[4] = 0.5f;\n                param.args[5] = 0.5f;\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/WidgetCornerRadius.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\npublic class WidgetCornerRadius extends BaseHook {\n\n    Context mContext;\n\n    @Override\n    public void init() {\n\n        hookAllConstructors(\"com.miui.home.launcher.maml.MaMlHostView\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                mContext = (Context) param.args[0];\n            }\n        });\n\n        hookAllMethods(\"com.miui.home.launcher.maml.MaMlHostView\", \"computeRoundedCornerRadius\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult((float) DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_widget_corner_radius\", 0)));\n            }\n        });\n\n\n        hookAllConstructors(\"com.miui.home.launcher.LauncherAppWidgetHostView\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                mContext = (Context) param.args[0];\n            }\n        });\n\n        hookAllMethods(\"com.miui.home.launcher.LauncherAppWidgetHostView\", \"computeRoundedCornerRadius\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult((float) DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_widget_corner_radius\", 0)));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/WidgetCrack.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class WidgetCrack extends BaseHook {\n\n\n    @Override\n    public void init() {\n\n\n        hookAllMethods(\"com.miui.maml.widget.edit.MamlutilKt\", \"themeManagerSupportPaidWidget\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                param.setResult(false);\n            }\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.gadget.MaMlPendingHostView\", \"isCanAutoStartDownload\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/dock/DisableRecentsIcon.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.dock\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DisableRecentsIcon : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.home.launcher.hotseats.HotSeatsListRecentsAppProvider\").methodFinder().first {\n            name == \"updateFinalRecommendTasks\"\n        }.createHook {\n            before { param ->\n                param.result = true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/dock/DockCustom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.dock;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.graphics.drawable.GradientDrawable;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DockCustom extends BaseHook {\n\n    FrameLayout mDockView;\n\n    boolean isFolderShowing;\n    boolean isShowEditPanel;\n    boolean isRecentShowing;\n\n    Class<?> mLauncherCls;\n    Class<?> mLauncherStateCls;\n    Class<?> mDeviceConfigCls;\n    Class<?> mFolderInfo;\n    Class<?> mBlurUtils;\n\n    @Override\n    public void init() {\n\n        mLauncherCls = findClassIfExists(\"com.miui.home.launcher.Launcher\");\n        mLauncherStateCls = findClassIfExists(\"com.miui.home.launcher.LauncherState\");\n        mDeviceConfigCls = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n        mFolderInfo = findClassIfExists(\"com.miui.home.launcher.FolderInfo\");\n        mBlurUtils = findClassIfExists(\"com.miui.home.launcher.common.BlurUtils\");\n\n\n        findAndHookMethod(mLauncherCls, \"onCreate\", Bundle.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Activity mActivity = (Activity) param.thisObject;\n\n                FrameLayout mSearchBarContainer = (FrameLayout) XposedHelpers.callMethod(param.thisObject, \"getSearchBarContainer\");\n                FrameLayout mSearchEdgeLayout = (FrameLayout) mSearchBarContainer.getParent();\n\n                int mDockHeight = DisplayUtils.dip2px(mSearchBarContainer.getContext(), XposedInit.mPrefsMap.getInt(\"home_dock_bg_height\", 80));\n                int mDockMargin = DisplayUtils.dip2px(mSearchBarContainer.getContext(), XposedInit.mPrefsMap.getInt(\"home_dock_bg_margin_horizontal\", 30));\n                int mDockBottomMargin = DisplayUtils.dip2px(mSearchBarContainer.getContext(), XposedInit.mPrefsMap.getInt(\"home_dock_bg_margin_bottom\", 30));\n\n                mDockView = new FrameLayout(mSearchBarContainer.getContext());\n                FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mDockHeight);\n                layoutParams.gravity = Gravity.BOTTOM;\n                layoutParams.setMargins(mDockMargin, 0, mDockMargin, mDockBottomMargin);\n                mDockView.setLayoutParams(layoutParams);\n                mSearchEdgeLayout.addView(mDockView, 0);\n\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                    new BlurUtils(mDockView, \"home_dock_bg_custom\");\n                }\n\n\n                findAndHookMethod(mLauncherCls, \"isFolderShowing\", new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        isFolderShowing = (boolean) param.getResult();\n                    }\n                });\n\n                findAndHookMethod(mLauncherCls, \"showEditPanel\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        isShowEditPanel = (boolean) param.args[0];\n                        mDockView.setVisibility(isShowEditPanel ? View.GONE : View.VISIBLE);\n                    }\n                });\n\n                findAndHookMethod(mLauncherCls, \"openFolder\", mFolderInfo, View.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        mDockView.setVisibility(View.GONE);\n                    }\n                });\n\n                findAndHookMethod(mLauncherCls, \"closeFolder\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        if (!isShowEditPanel) mDockView.setVisibility(View.VISIBLE);\n                    }\n                });\n\n                findAndHookMethod(mBlurUtils, \"fastBlurWhenEnterRecents\", mLauncherCls, mLauncherStateCls, boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        mDockView.setVisibility(View.GONE);\n                    }\n                });\n            }\n        });\n\n        findAndHookMethod(mLauncherCls, \"onStateSetStart\", mLauncherStateCls, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                if (param.args[0].getClass().getSimpleName().equals(\"LauncherState\") && !isFolderShowing && !isShowEditPanel) {\n                    mDockView.setVisibility(View.VISIBLE);\n                } else {\n                    mDockView.setVisibility(View.GONE);\n                }\n            }\n        });\n\n\n        /*findAndHookMethod(mDeviceConfigCls,\"calcHotSeatsMarginTop\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Context context = (Context) param.args[0];\n                param.setResult(DisplayUtils.dip2px(context, XposedInit.mPrefsMap.getInt(\"home_dock_margin_top\",25)));\n            }\n        });\n\n        findAndHookMethod(mDeviceConfigCls,\"calcHotSeatsMarginBottom\", Context.class, boolean.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Context context = (Context) param.args[0];\n                param.setResult(DisplayUtils.dip2px(context, XposedInit.mPrefsMap.getInt(\"home_dock_icon_margin_bottom\",90)));\n            }\n        });*/\n    }\n\n\n    public GradientDrawable getDockBackground(Context context) {\n        GradientDrawable mDockBackground = new GradientDrawable();\n        mDockBackground.setShape(GradientDrawable.RECTANGLE);\n        mDockBackground.setColor(Color.argb(60, 255, 255, 255));\n        mDockBackground.setCornerRadius(DisplayUtils.dip2px(context, 22));\n        return mDockBackground;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/dock/FoldDeviceDock.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.dock\n\nimport android.content.Context\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport de.robv.android.xposed.XC_MethodHook\n\nobject FoldDeviceDock : BaseHook() {\n    override fun init() {\n\n        // if (!mPrefsMap.getBoolean(\"home_fold_dock\")) return\n        var hook1: XC_MethodHook.Unhook? = null\n        var hook2: XC_MethodHook.Unhook? = null\n        var hook3: XC_MethodHook.Unhook? = null\n\n        val mHotSeatsClass = loadClass(\"com.miui.home.launcher.hotseats.HotSeats\")\n        mHotSeatsClass.methodFinder().first {\n            name == \"initContent\"\n        }.createHook {\n            before {\n                hook1 = \"com.miui.home.launcher.DeviceConfig\".hookBeforeMethod(\n                    \"isFoldDevice\"\n                ) { hookParam ->\n                    hookParam.result = true\n                }\n            }\n            after {\n                hook1?.unhook()\n            }\n        }\n\n        try {\n            mHotSeatsClass.methodFinder().first {\n                name == \"updateContent\"\n            }\n        } catch (e: Exception) {\n            mHotSeatsClass.methodFinder().first {\n                name == \"updateContentView\"\n            }\n        }.createHook {\n            before {\n                hook2 = \"com.miui.home.launcher.Application\".hookBeforeMethod(\n                    \"isInFoldLargeScreen\"\n                ) { hookParam ->\n                    hookParam.result = true\n                }\n            }\n            after {\n                hook2?.unhook()\n            }\n        }\n\n        mHotSeatsClass.methodFinder().first {\n            name == \"isNeedUpdateItemInfo\"\n        }.createHook {\n            before {\n                hook3 = \"com.miui.home.launcher.Application\".hookBeforeMethod(\n                    \"isInFoldLargeScreen\"\n                ) { hookParam -> hookParam.result = true }\n            }\n            after {\n                hook3?.unhook()\n            }\n        }\n\n        \"com.miui.home.launcher.DeviceConfig\".hookAfterMethod(\n            \"getHotseatMaxCount\"\n        ) {\n            it.result = mPrefsMap.getInt(\"home_fold_dock_hotseat\", 3)\n        }\n\n        \"com.miui.home.launcher.hotseats.HotSeatsListRecentsAppProvider\".hookBeforeMethod(\n            \"getLimitCount\"\n        ) {\n            it.result = mPrefsMap.getInt(\"home_fold_dock_run\", 2)\n        }\n\n        \"com.miui.home.launcher.allapps.LauncherMode\".hookBeforeMethod(\n            \"isHomeSupportSearchBar\",\n            Context::class.java\n        ) {\n            it.result = false\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/dock/FoldDock.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.dock;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class FoldDock extends BaseHook {\n\n    Class<?> mHotSeatsList;\n    Class<?> mHotSeatsListRecentsAppProvider;\n\n    Class<?> mDeviceConfig;\n    Class<?> mApplication;\n\n    @Override\n    public void init() {\n        mHotSeatsList = findClassIfExists(\"com.miui.home.launcher.hotseats.HotSeatsList\");\n        mHotSeatsListRecentsAppProvider = findClassIfExists(\"com.miui.home.launcher.hotseats.HotSeatsListRecentsAppProvider\");\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n        mApplication = findClassIfExists(\"com.miui.home.launcher.Application\");\n\n        findAndHookMethod(mHotSeatsListRecentsAppProvider, \"getLimitCount\", XC_MethodReplacement.returnConstant(0));\n\n        findAndHookMethod(mDeviceConfig, \"getHotseatMaxCount\", XC_MethodReplacement.returnConstant(5));\n\n\n        findAndHookMethod(\"com.miui.home.launcher.hotseats.HotSeats\", \"initContent\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                findAndHookMethod(mDeviceConfig, \"isFoldDevice\",\n                    XC_MethodReplacement.returnConstant(true));\n            }\n\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n\n                findAndHookMethod(mDeviceConfig, \"isFoldDevice\",\n                    XC_MethodReplacement.returnConstant(false));\n            }\n        });\n        findAndHookMethod(\"com.miui.home.launcher.hotseats.HotSeats\", \"updateContentView\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                findAndHookMethod(mApplication, \"isInFoldLargeScreen\",\n                    XC_MethodReplacement.returnConstant(true));\n            }\n\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                findAndHookMethod(mApplication, \"isInFoldLargeScreen\",\n                    XC_MethodReplacement.returnConstant(false));\n            }\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.allapps.LauncherMode\", \"isHomeSupportSearchBar\", Context.class, XC_MethodReplacement.returnConstant(false));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/dock/HideSeekPoint.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.dock\n\nimport android.view.View\nimport android.view.ViewGroup\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject HideSeekPoint : BaseHook() {\n    override fun init() {\n\n        // if (!mPrefsMap.getBoolean(\"home_hide_seek_point\")) return\n        \"com.miui.home.launcher.ScreenView\".hookAfterMethod(\n            \"updateSeekPoints\", Int::class.javaPrimitiveType\n        ) {\n            showSeekBar(it.thisObject as View)\n        }\n        \"com.miui.home.launcher.ScreenView\".hookAfterMethod(\n            \"addView\", View::class.java, Int::class.javaPrimitiveType, ViewGroup.LayoutParams::class.java\n        ) {\n            showSeekBar(it.thisObject as View)\n        }\n        \"com.miui.home.launcher.ScreenView\".hookAfterMethod(\n            \"removeScreen\", Int::class.javaPrimitiveType\n        ) {\n            showSeekBar(it.thisObject as View)\n        }\n        \"com.miui.home.launcher.ScreenView\".hookAfterMethod(\n            \"removeScreensInLayout\", Int::class.javaPrimitiveType, Int::class.javaPrimitiveType\n        ) {\n            showSeekBar(it.thisObject as View)\n        }\n    }\n\n    private fun showSeekBar(view: View) {\n        if (\"Workspace\" != view.javaClass.simpleName) return\n        val mScreenSeekBar = view.getObjectField(\"mScreenSeekBar\") as View\n        val isInEditingMode = view.callMethod(\"isInNormalEditingMode\") as Boolean\n        if (!isInEditingMode) {\n            mScreenSeekBar.animate().cancel()\n            mScreenSeekBar.visibility = View.GONE\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/dock/ShowDockIconTitle.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.dock\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\n\nobject ShowDockIconTitle : BaseHook() {\n    override fun init() {\n\n        \"com.miui.home.launcher.DeviceConfig\".hookBeforeMethod(\"isHotseatsAppTitleHided\") {\n            it.result = false\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/drawer/AllAppsContainerViewBlur.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.drawer\n\nimport android.app.Application\nimport android.content.Context\nimport android.os.Build\nimport android.view.View\nimport android.widget.FrameLayout\nimport android.widget.RelativeLayout\nimport android.widget.ViewSwitcher\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.getCornerRadiusTop\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport com.zhenxiang.blur.BlurFrameLayout\nimport com.zhenxiang.blur.model.CornersRadius\n\n\nobject AllAppsContainerViewBlur : BaseHook() {\n    override fun init() {\n        Application::class.java.hookBeforeMethod(\"attach\", Context::class.java) {\n            EzXHelper.initHandleLoadPackage(lpparam)\n            EzXHelper.setLogTag(TAG)\n            EzXHelper.setToastTag(TAG)\n            EzXHelper.initAppContext(it.args[0] as Context)\n\n            loadClass(\"com.miui.home.launcher.allapps.BaseAllAppsContainerView\").methodFinder().filter {\n                name == \"onFinishInflate\"\n            }.toList().createHooks {\n                after { hookParam ->\n                    val mCategoryContainer = hookParam.thisObject.getObjectField(\"mCategoryContainer\") as ViewSwitcher\n                    val appsView = mCategoryContainer.parent as RelativeLayout\n                    val blur = BlurFrameLayout(mCategoryContainer.context)\n                    val radius = getCornerRadiusTop().toFloat()\n                    if (Build.VERSION.SDK_INT >= 31) {\n                        blur.blurController.apply {\n                            cornerRadius = CornersRadius.custom(radius, radius, 0f, 0f)\n                        }\n                    }\n                    val view = View(mCategoryContainer.context)\n                    blur.addView(view)\n                    (view.layoutParams as FrameLayout.LayoutParams).apply {\n                        width = FrameLayout.LayoutParams.MATCH_PARENT\n                        height = FrameLayout.LayoutParams.MATCH_PARENT\n                    }\n                    appsView.addView(blur, 0)\n\n                    loadClass(\"com.miui.home.launcher.allapps.BaseAllAppsContainerView\").methodFinder().filter {\n                        name == \"onResume\"\n                    }.toList().createHooks {\n                        after {\n                            blur.refreshDrawableState()\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/drawer/AppDrawer.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.drawer\n\nimport android.view.View\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethodAs\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.getObjectFieldAs\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject AppDrawer : BaseHook() {\n    override fun init() {\n        if (mPrefsMap.getBoolean(\"home_drawer_all\")) {\n            try {\n                loadClassOrNull(\"com.miui.home.launcher.allapps.category.BaseAllAppsCategoryListContainer\")!!\n                    .methodFinder()\n                    .first {\n                        name == \"buildSortCategoryList\"\n                    }\n            } catch (e: Exception) {\n                loadClass(\"com.miui.home.launcher.allapps.category.AllAppsCategoryListContainer\").methodFinder()\n                    .first {\n                        name == \"buildSortCategoryList\"\n                    }\n            }.createHook {\n                after {\n                    val list = it.result as ArrayList<*>\n                    if (list.size > 1) {\n                        list.removeAt(0)\n                        it.result = list\n                    }\n                }\n            }\n        }\n\n        if (mPrefsMap.getBoolean(\"home_drawer_editor\")) {\n            \"com.miui.home.launcher.allapps.AllAppsGridAdapter\".hookAfterMethod(\n                \"onBindViewHolder\",\n                \"com.miui.home.launcher.allapps.AllAppsGridAdapter.ViewHolder\".findClass(),\n                Int::class.javaPrimitiveType\n            ) {\n                if (it.args[0].callMethodAs<Int>(\"getItemViewType\") == 64) {\n                    it.args[0].getObjectFieldAs<View>(\"itemView\").visibility = View.INVISIBLE\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/drawer/PinyinArrangement.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.drawer;\n\nimport android.app.Activity;\n\nimport com.github.promeg.pinyinhelper.Pinyin;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.Locale;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class PinyinArrangement extends BaseHook {\n    Locale locale;\n    Activity activity;\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.compat.AlphabeticIndexCompat\",\n            \"computeSectionName\", CharSequence.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    CharSequence charSequence = (CharSequence) param.args[0];\n                    String bucketLabel;\n                    String trim = (String) XposedHelpers.callStaticMethod(findClass(\"com.miui.home.launcher.common.Utilities\"), \"trim\", charSequence);\n                    if (charSequence.length() > 0 && Pinyin.isChinese(charSequence.charAt(0))) {\n                        bucketLabel = String.valueOf(Pinyin.toPinyin(charSequence.toString(), \"\").charAt(0));\n                    } else {\n                        Object o = XposedHelpers.getObjectField(param.thisObject, \"mBaseIndex\");\n                        bucketLabel = (String) XposedHelpers.callMethod(o, \"getBucketLabel\", XposedHelpers.callMethod(o, \"getBucketIndex\", trim));\n                    }\n                    // logE(\"bucketLabel: \" + bucketLabel + \" trim1: \" + trim);\n                    String trim2 = (String) XposedHelpers.callStaticMethod(findClass(\"com.miui.home.launcher.common.Utilities\"), \"trim\", bucketLabel);\n                    // logE(\"trim2: \" + trim2);\n                    if (!trim2.isEmpty() || trim.length() <= 0) {\n                        param.setResult(bucketLabel);\n                        return;\n                    }\n                    int codePointAt = trim.codePointAt(0);\n                    param.setResult(Character.isDigit(codePointAt) ? \"…\" : Character.isLetter(codePointAt) ? (String) XposedHelpers.getObjectField(param.thisObject, \"mDefaultMiscLabel\") : \"∙\");\n                }\n            }\n        );\n\n        hookAllMethods(\"com.miui.home.launcher.allapps.BaseAlphabeticalAppsList\",\n            \"onAppsUpdated\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    activity = (Activity) XposedHelpers.getObjectField(param.thisObject, \"mLauncher\");\n                    locale = activity.getResources().getConfiguration().locale;\n                    activity.getResources().getConfiguration().setLocale(Locale.SIMPLIFIED_CHINESE);\n                }\n\n                @Override\n                protected void after(MethodHookParam param) {\n                    activity.getResources().getConfiguration().setLocale(locale);\n                }\n            }\n        );\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/BigFolderIcon.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class BigFolderIcon extends BaseHook {\n\n    Class<?> mFolderIcon;\n\n    @Override\n    public void init() {\n\n        mFolderIcon = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon2x2_4\");\n\n        findAndHookMethod(mFolderIcon, \"getPreviewCount\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(5);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/BigFolderIconBlur.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BigFolderIconBlur extends BaseHook {\n\n    boolean isShowEditPanel;\n    Class<?> mLauncher;\n    Class<?> mFolderInfo;\n    Class<?> mFolderIcon;\n    Class<?> mLauncherState;\n    Class<?> mDragView;\n\n    Class<?> mFolderIcon2x2;\n    Class<?> mFolderIcon2x2_4;\n    Class<?> mFolderIcon2x2_9;\n\n    @Override\n    public void init() {\n        mLauncher = findClassIfExists(\"com.miui.home.launcher.Launcher\");\n        mFolderInfo = findClassIfExists(\"com.miui.home.launcher.FolderInfo\");\n        mFolderIcon = findClassIfExists(\"com.miui.home.launcher.FolderIcon\");\n        mLauncherState = findClassIfExists(\"com.miui.home.launcher.LauncherState\");\n        mDragView = findClassIfExists(\"com.miui.home.launcher.DragView\");\n        mFolderIcon2x2 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon2x2\");\n\n        if (isPad()) {\n            mFolderIcon2x2_4 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon4x4_16\");\n            mFolderIcon2x2_9 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon3x3_9\");\n        } else {\n            mFolderIcon2x2_4 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon2x2_4\");\n            mFolderIcon2x2_9 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon2x2_9\");\n        }\n\n        hookAllConstructors(mFolderIcon, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                Object mDockBlur = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDockBlur\");\n                if (mDockBlur != null) return;\n                mDockBlur = new FrameLayout(mContext);\n                XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mDockBlur\", mDockBlur);\n            }\n        });\n\n        MethodHook mBigFolderIconBlur = new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                int mFolderWidth = DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_big_folder_icon_bg_width\", 145));\n                int mFolderHeight = DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_big_folder_icon_bg_height\", 145));\n                ImageView mIconImageView = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"mIconImageView\");\n                FrameLayout mIconContainer = (FrameLayout) mIconImageView.getParent();\n                FrameLayout mDockBlur = (FrameLayout) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDockBlur\");\n                FrameLayout view = new FrameLayout(mIconImageView.getContext());\n\n                mIconImageView.setVisibility(View.GONE);\n                mDockBlur.addView(view);\n\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                    new BlurUtils(mDockBlur, \"home_big_folder_icon_bg_custom\");\n                }\n\n                mIconContainer.addView(mDockBlur, 0);\n                FrameLayout.LayoutParams lp1 = (FrameLayout.LayoutParams) mDockBlur.getLayoutParams();\n                lp1.gravity = Gravity.CENTER;\n\n                if(isPad()){\n                    lp1.width = mFolderWidth * 2;\n                    lp1.height = mFolderHeight *2;\n                }else {\n                    lp1.width = mFolderWidth;\n                    lp1.height = mFolderHeight;\n                }\n\n                findAndHookMethod(mLauncher, \"showEditPanel\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        isShowEditPanel = (boolean) param.args[0];\n                        if (isShowEditPanel) {\n                            mDockBlur.setVisibility(View.GONE);\n                            mIconImageView.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                            mIconImageView.setVisibility(View.GONE);\n                        }\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"openFolder\", mFolderInfo, View.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        mDockBlur.setVisibility(View.GONE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"closeFolder\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        if (!isShowEditPanel) mDockBlur.setVisibility(View.VISIBLE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"onStateSetStart\", mLauncherState, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        if (param.args[0].getClass().getSimpleName().equals(\"LauncherState\")) {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.GONE);\n                        }\n                    }\n                });\n            }\n        };\n\n\n        Method FolderIcon2x2_4_OnFinishInflate = XposedHelpers.findMethodExactIfExists(mFolderIcon2x2_4, \"onFinishInflate\", Void.TYPE);\n        Method FolderIcon2x2_9_OnFinishInflate = XposedHelpers.findMethodExactIfExists(mFolderIcon2x2_9, \"onFinishInflate\", Void.TYPE);\n\n        if (FolderIcon2x2_4_OnFinishInflate != null && FolderIcon2x2_9_OnFinishInflate != null) {\n            findAndHookMethod(mFolderIcon2x2_4, \"onFinishInflate\", mBigFolderIconBlur);\n            findAndHookMethod(mFolderIcon2x2_9, \"onFinishInflate\", mBigFolderIconBlur);\n        } else if (mFolderIcon2x2 != null) {\n            findAndHookMethod(mFolderIcon2x2, \"onFinishInflate\", mBigFolderIconBlur);\n        }\n\n        hookAllConstructors(mDragView, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                View mDragView = (View) param.thisObject;\n                mDragView.setLayerType(View.LAYER_TYPE_HARDWARE, null);\n\n                Object mDragInfo = XposedHelpers.getObjectField(param.thisObject, \"mDragInfo\");\n                int itemType = (int) XposedHelpers.getObjectField(mDragInfo, \"itemType\");\n                Object mLauncher = XposedHelpers.getObjectField(param.thisObject, \"mLauncher\");\n                boolean isFolderShowing = (boolean) XposedHelpers.callMethod(mLauncher, \"isFolderShowing\");\n\n                if (!isFolderShowing && itemType == 21) {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                        new BlurUtils(mDragView, \"home_big_folder_icon_bg_custom\");\n                    }\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/BigFolderIconBlur1x2.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BigFolderIconBlur1x2 extends BaseHook {\n\n    Class<?> mFolderIcon1x2;\n\n    boolean isShowEditPanel;\n    Class<?> mLauncher;\n    Class<?> mFolderInfo;\n    Class<?> mFolderIcon;\n    Class<?> mLauncherState;\n    Class<?> mDragView;\n\n    @Override\n    public void init() {\n        if (isPad()) {\n            mFolderIcon1x2 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon2x2_4\");\n        } else {\n            mFolderIcon1x2 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon1x2\");\n        }\n\n        mLauncher = findClassIfExists(\"com.miui.home.launcher.Launcher\");\n        mFolderInfo = findClassIfExists(\"com.miui.home.launcher.FolderInfo\");\n        mFolderIcon = findClassIfExists(\"com.miui.home.launcher.FolderIcon\");\n        mLauncherState = findClassIfExists(\"com.miui.home.launcher.LauncherState\");\n        mDragView = findClassIfExists(\"com.miui.home.launcher.DragView\");\n\n        MethodHook mBigFolderIconBlur = new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                int mFolderWidth = DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_big_folder_icon_bg_width_1x2\", 62));\n                int mFolderHeight = DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_big_folder_icon_bg_height_1x2\", 145));\n                ImageView mIconImageView = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"mIconImageView\");\n                FrameLayout mIconContainer = (FrameLayout) mIconImageView.getParent();\n                FrameLayout mDockBlur = (FrameLayout) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDockBlur\");\n                FrameLayout view = new FrameLayout(mIconImageView.getContext());\n\n                mIconImageView.setVisibility(View.GONE);\n                mDockBlur.addView(view);\n\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                    new BlurUtils(mDockBlur, \"home_big_folder_icon_bg_1x2_custom\");\n                }\n\n                mIconContainer.addView(mDockBlur, 0);\n                FrameLayout.LayoutParams lp1 = (FrameLayout.LayoutParams) mDockBlur.getLayoutParams();\n                lp1.gravity = Gravity.CENTER;\n                lp1.height = mFolderHeight;\n                lp1.width = mFolderWidth;\n                findAndHookMethod(mLauncher, \"showEditPanel\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        isShowEditPanel = (boolean) param.args[0];\n                        if (isShowEditPanel) {\n                            mDockBlur.setVisibility(View.GONE);\n                            mIconImageView.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                            mIconImageView.setVisibility(View.GONE);\n                        }\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"openFolder\", mFolderInfo, View.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        mDockBlur.setVisibility(View.GONE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"closeFolder\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        if (!isShowEditPanel) mDockBlur.setVisibility(View.VISIBLE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"onStateSetStart\", mLauncherState, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        if (param.args[0].getClass().getSimpleName().equals(\"LauncherState\")) {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.GONE);\n                        }\n                    }\n                });\n            }\n        };\n\n        findAndHookMethod(mFolderIcon1x2, \"onFinishInflate\", mBigFolderIconBlur);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/BigFolderIconBlur2x1.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BigFolderIconBlur2x1 extends BaseHook {\n\n    Class<?> mFolderIcon2x1;\n\n    boolean isShowEditPanel;\n    Class<?> mLauncher;\n    Class<?> mFolderInfo;\n    Class<?> mFolderIcon;\n    Class<?> mLauncherState;\n    Class<?> mDragView;\n\n    @Override\n    public void init() {\n        if (isPad()) {\n            mFolderIcon2x1 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon4x2_8\");\n        } else {\n            mFolderIcon2x1 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon2x1\");\n        }\n\n        mLauncher = findClassIfExists(\"com.miui.home.launcher.Launcher\");\n        mFolderInfo = findClassIfExists(\"com.miui.home.launcher.FolderInfo\");\n        mFolderIcon = findClassIfExists(\"com.miui.home.launcher.FolderIcon\");\n        mLauncherState = findClassIfExists(\"com.miui.home.launcher.LauncherState\");\n        mDragView = findClassIfExists(\"com.miui.home.launcher.DragView\");\n\n        MethodHook mBigFolderIconBlur = new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                int mFolderWidth = DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_big_folder_icon_bg_width_2x1\", 145));\n                int mFolderHeight = DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_big_folder_icon_bg_height_2x1\", 62));\n                ImageView mIconImageView = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"mIconImageView\");\n                FrameLayout mIconContainer = (FrameLayout) mIconImageView.getParent();\n                FrameLayout mDockBlur = (FrameLayout) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDockBlur\");\n                FrameLayout view = new FrameLayout(mIconImageView.getContext());\n\n                mIconImageView.setVisibility(View.GONE);\n                mDockBlur.addView(view);\n\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                    new BlurUtils(mDockBlur, \"home_big_folder_icon_bg_2x1_custom\");\n                }\n\n                mIconContainer.addView(mDockBlur, 0);\n                FrameLayout.LayoutParams lp1 = (FrameLayout.LayoutParams) mDockBlur.getLayoutParams();\n                lp1.gravity = Gravity.CENTER;\n                if (isPad()) {\n                    lp1.width = mFolderWidth * 2;\n                    lp1.height = mFolderHeight * 2;\n                }else {\n                    lp1.width = mFolderWidth;\n                    lp1.height = mFolderHeight;\n                }\n                findAndHookMethod(mLauncher, \"showEditPanel\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        isShowEditPanel = (boolean) param.args[0];\n                        if (isShowEditPanel) {\n                            mDockBlur.setVisibility(View.GONE);\n                            mIconImageView.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                            mIconImageView.setVisibility(View.GONE);\n                        }\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"openFolder\", mFolderInfo, View.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        mDockBlur.setVisibility(View.GONE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"closeFolder\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        if (!isShowEditPanel) mDockBlur.setVisibility(View.VISIBLE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"onStateSetStart\", mLauncherState, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        if (param.args[0].getClass().getSimpleName().equals(\"LauncherState\")) {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.GONE);\n                        }\n                    }\n                });\n            }\n        };\n\n        findAndHookMethod(mFolderIcon2x1, \"onFinishInflate\", mBigFolderIconBlur);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/BigFolderItemMaxCount.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BigFolderItemMaxCount extends BaseHook {\n\n    Class<?> mFolderIcon2x2;\n    Class<?> mFolderIcon2x2_9;\n    Class<?> mFolderIcon2x2_4;\n    Class<?> mBaseFolderIconPreviewContainer2X2;\n\n    int mRealPvChildCount;\n\n    @Override\n    public void init() {\n        mFolderIcon2x2 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon2x2\");\n        mFolderIcon2x2_9 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIconPreviewContainer2X2_9\");\n        mFolderIcon2x2_4 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIconPreviewContainer2X2_4\");\n        mBaseFolderIconPreviewContainer2X2 = findClassIfExists(\"com.miui.home.launcher.folder.BaseFolderIconPreviewContainer2X2\");\n\n        findAndHookMethod(mFolderIcon2x2_9, \"preSetup2x2\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n\n                mRealPvChildCount = (int) XposedHelpers.callMethod(param.thisObject, \"getMRealPvChildCount\");\n                XposedLogUtils.logI(TAG, \"getMRealPvChildCount1：\" + mRealPvChildCount);\n\n                if (mRealPvChildCount < 10) {\n                    XposedHelpers.callMethod(param.thisObject, \"setMItemsMaxCount\", 9);\n                    XposedHelpers.callMethod(param.thisObject, \"setMLargeIconNum\", 9);\n                } else {\n                    XposedHelpers.callMethod(param.thisObject, \"setMItemsMaxCount\", 12);\n                    XposedHelpers.callMethod(param.thisObject, \"setMLargeIconNum\", 8);\n                }\n            }\n        });\n\n        findAndHookMethod(mFolderIcon2x2_4, \"preSetup2x2\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n\n                mRealPvChildCount = (int) XposedHelpers.callMethod(param.thisObject, \"getMRealPvChildCount\");\n                XposedLogUtils.logI(TAG, \"getMRealPvChildCount1：\" + mRealPvChildCount);\n\n                if (mRealPvChildCount < 5) {\n                    XposedHelpers.callMethod(param.thisObject, \"setMItemsMaxCount\", 4);\n                    XposedHelpers.callMethod(param.thisObject, \"setMLargeIconNum\", 4);\n                } else {\n                    XposedHelpers.callMethod(param.thisObject, \"setMItemsMaxCount\", 7);\n                    XposedHelpers.callMethod(param.thisObject, \"setMLargeIconNum\", 3);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/FolderAnimation.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport de.robv.android.xposed.XC_MethodHook\nimport kotlin.math.abs\n\nclass FolderAnimation : BaseHook() {\n    var mLauncher: Class<*>? = null\n    private var value1: Float? = null\n    private var value2: Float? = null\n    private var value3: Float? = null\n    private var value4: Float? = null\n\n    override fun init() {//|x-200|    50-150\n        value1 = abs(mPrefsMap.getInt(\"home_folder_anim_1\", 90).toFloat() - 200) / 100\n        value2 = mPrefsMap.getInt(\"home_folder_anim_2\", 30).toFloat() / 100\n        value3 = abs(mPrefsMap.getInt(\"home_folder_anim_3\", 99).toFloat() - 200) / 100\n        value4 = mPrefsMap.getInt(\"home_folder_anim_4\", 24).toFloat() / 100\n        val mSpringAnimator = findClassIfExists(\"com.miui.home.launcher.animate.SpringAnimator\")\n        var hook1: XC_MethodHook.Unhook? = null\n        var hook2: XC_MethodHook.Unhook? = null\n\n        for (i in 47..60) {\n            val launcherClass = findClassIfExists(\"com.miui.home.launcher.Launcher$$i\")\n            if (launcherClass != null) {\n                for (field in launcherClass.declaredFields) {\n                    if (field.name == \"val\\$folderInfo\") {\n                        val mLauncherClass =\n                            loadClassOrNull(\"com.miui.home.launcher.Launcher$$i\") ?: continue\n\n                        for (child in mLauncherClass.declaredFields) {\n                            if (child.name != \"val\\$folderInfo\")\n                                continue\n\n                            mLauncherClass.methodFinder().first {\n                                name == \"run\"\n                            }.createHook {\n                                before {\n                                    hook1 = mSpringAnimator.methodFinder().first {\n                                        name == \"setDampingResponse\"\n                                            && parameterTypes[0] == Float::class.javaPrimitiveType\n                                            && parameterTypes[1] == Float::class.javaPrimitiveType\n                                    }.createHook {\n                                        before {\n                                            it.args[0] = value1\n                                            it.args[1] = value2\n                                        }\n                                    }\n                                }\n                                after {\n                                    hook1?.unhook()\n                                }\n                            }\n                            break\n                        }\n                    }\n                }\n            }\n        }\n\n        \"com.miui.home.launcher.Launcher\".hookBeforeMethod(\"closeFolder\", Boolean::class.java) {\n            if (it.args[0] == true) {\n                hook2 = mSpringAnimator.hookBeforeMethod(\n                    \"setDampingResponse\", Float::class.javaPrimitiveType, Float::class.javaPrimitiveType\n                ) { hookParam ->\n                    hookParam.args[0] = value3\n                    hookParam.args[1] = value4\n                }\n            }\n        }\n        \"com.miui.home.launcher.Launcher\".hookAfterMethod(\"closeFolder\", Boolean::class.java) {\n            hook2?.unhook()\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/FolderAutoClose.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder\n\nimport android.view.View\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.getBooleanField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject FolderAutoClose : BaseHook() {\n    override fun init() {\n        \"com.miui.home.launcher.Launcher\".hookAfterMethod(\n            \"launch\", \"com.miui.home.launcher.ShortcutInfo\", View::class.java\n        ) {\n            val mHasLaunchedAppFromFolder = it.thisObject.getBooleanField(\"mHasLaunchedAppFromFolder\")\n            if (mHasLaunchedAppFromFolder) it.thisObject.callMethod(\"closeFolder\")\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/FolderBlur.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder\n\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.view.MotionEvent\nimport android.view.View\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.*\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject FolderBlur : BaseHook() {\n    @SuppressLint(\"SuspiciousIndentation\")\n    override fun init() {\n        // 修复文件夹背景模糊与始终模糊壁纸冲突\n        if (mPrefsMap.getBoolean(\"home_other_always_blur_launcher_wallpaper\")) return\n\n        val folderInfo = findClassIfExists(\"com.miui.home.launcher.FolderInfo\")\n        val launcherClass = findClassIfExists(\"com.miui.home.launcher.Launcher\")\n        val blurUtilsClass = findClassIfExists(\"com.miui.home.launcher.common.BlurUtils\")\n        val navStubViewClass = findClassIfExists(\"com.miui.home.recents.NavStubView\")\n        val cancelShortcutMenuReasonClass =\n            findClassIfExists(\"com.miui.home.launcher.shortcuts.CancelShortcutMenuReason\")\n        val applicationClass = findClassIfExists(\"com.miui.home.launcher.Application\")\n        try {\n            launcherClass.hookBeforeMethod(\"isShouldBlur\") {\n                it.result = false\n            }\n            blurUtilsClass.hookBeforeMethod(\"fastBlurWhenOpenOrCloseFolder\", launcherClass, Boolean::class.java) {\n                it.result = null\n            }\n        } catch (e: Exception) {\n            XposedLogUtils.logE(TAG, e)\n        }\n        var isShouldBlur = false\n\n\n        launcherClass.hookAfterMethod(\"openFolder\", folderInfo, View::class.java) {\n            val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            val isInNormalEditing = mLauncher.callMethod(\"isInNormalEditing\") as Boolean\n            if (!isInNormalEditing)\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true)\n        }\n\n        launcherClass.hookAfterMethod(\"isFolderShowing\") {\n            isShouldBlur = it.result as Boolean\n        }\n\n        launcherClass.hookAfterMethod(\"closeFolder\", Boolean::class.java) {\n            isShouldBlur = false\n            val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            val isInNormalEditing = mLauncher.callMethod(\"isInNormalEditing\") as Boolean\n            if (isInNormalEditing)\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n            else\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 0.0f, mLauncher.window, true)\n        }\n\n        launcherClass.hookAfterMethod(\"cancelShortcutMenu\", Int::class.java, cancelShortcutMenuReasonClass) {\n            val mLauncher =\n                applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            if (isShouldBlur)\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n        }\n\n        launcherClass.hookBeforeMethod(\"onGesturePerformAppToHome\") {\n            val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            if (isShouldBlur) {\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n            }\n        }\n\n        blurUtilsClass.hookBeforeAllMethods(\"fastBlurWhenStartOpenOrCloseApp\") {\n            val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            val isInEditing = mLauncher.callMethod(\"isInEditing\") as Boolean\n            if (isShouldBlur) it.result =\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n            else if (isInEditing) it.result =\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n        }\n\n        blurUtilsClass.hookBeforeAllMethods(\"fastBlurWhenFinishOpenOrCloseApp\") {\n            val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            val isInEditing = mLauncher.callMethod(\"isInEditing\") as Boolean\n            if (isShouldBlur) it.result =\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n            else if (isInEditing) it.result =\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n        }\n\n        blurUtilsClass.hookAfterAllMethods(\"fastBlurWhenEnterRecents\") {\n            it.args[0]?.callMethod(\"hideShortcutMenuWithoutAnim\")\n        }\n\n        blurUtilsClass.hookAfterAllMethods(\"fastBlurWhenExitRecents\") {\n            val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            val isInEditing = mLauncher.callMethod(\"isInEditing\") as Boolean\n            if (isShouldBlur) it.result =\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n            else if (isInEditing) it.result =\n                blurUtilsClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 0L)\n        }\n\n        blurUtilsClass.hookBeforeAllMethods(\"fastBlurDirectly\") {\n            val blurRatio = it.args[0] as Float\n            if (isShouldBlur && blurRatio == 0.0f) it.result = null\n        }\n\n\n        if (((mPrefsMap.getStringAsInt(\"home_recent_blur_level\", 6) == 0) && (mPrefsMap.getStringAsInt(\"home_recent_blur_level\", 6) != 5)) ||\n            (mPrefsMap.getStringAsInt(\"home_recent_blur_level\", 6) != 0)\n        ) {\n            navStubViewClass.hookBeforeMethod(\"appTouchResolution\", MotionEvent::class.java) {\n                val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n                if (isShouldBlur) {\n                    blurUtilsClass.callStaticMethod(\"fastBlurDirectly\", 1.0f, mLauncher.window)\n                }\n            }\n        }\n\n    }\n\n}\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/FolderColumns.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder\n\nimport android.view.ViewGroup\nimport android.widget.GridView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.hookAfterAllMethods\nimport de.robv.android.xposed.XposedHelpers\n\nobject FolderColumns : BaseHook() {\n    override fun init() {\n\n        val value = mPrefsMap.getInt(\"home_folder_columns\", 3)\n        if (value == 3) return\n        \"com.miui.home.launcher.Folder\".findClass().hookAfterAllMethods(\n            \"bind\"\n        ) {\n            val columns: Int = value\n            val mContent = XposedHelpers.getObjectField(it.thisObject, \"mContent\") as GridView\n            mContent.numColumns = columns\n            if (mPrefsMap.getBoolean(\"home_folder_width\") && (columns > 3)) {\n                mContent.setPadding(0, 0, 0, 0)\n                val lp = mContent.layoutParams\n                lp.width = ViewGroup.LayoutParams.MATCH_PARENT\n                mContent.layoutParams = lp\n            }\n            if (columns > 3) {\n                val mBackgroundView = XposedHelpers.getObjectField(it.thisObject, \"mBackgroundView\") as ViewGroup\n                mBackgroundView.setPadding(\n                    mBackgroundView.paddingLeft / 3,\n                    mBackgroundView.paddingTop,\n                    mBackgroundView.paddingRight / 3,\n                    mBackgroundView.paddingBottom\n                )\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/FolderShade.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder;\n\nimport android.content.Context;\nimport android.graphics.LinearGradient;\nimport android.graphics.Shader;\nimport android.graphics.drawable.ColorDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.graphics.drawable.PaintDrawable;\nimport android.graphics.drawable.ShapeDrawable;\nimport android.graphics.drawable.shapes.RectShape;\nimport android.os.Handler;\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class FolderShade extends BaseHook {\n\n    private Class<?> mWallpaperUtilsCls = null;\n    private boolean isLight = false;\n\n    @Override\n    public void init() {\n        mWallpaperUtilsCls = XposedHelpers.findClassIfExists(\"com.miui.home.launcher.WallpaperUtils\", lpparam.classLoader);\n\n        MethodHook hook = new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                View folder = (View) param.thisObject;\n                new Thread(() -> {\n                    try {\n                        Context context = folder.getContext();\n                        int opt = Integer.parseInt(PrefsUtils.getSharedStringPrefs(context, \"prefs_key_home_folder_shade\", \"0\"));\n                        int level = PrefsUtils.getSharedIntPrefs(context, \"prefs_key_home_folder_shade_level\", 40);\n\n                        if (mWallpaperUtilsCls != null) {\n                            try {\n                                isLight = (boolean) XposedHelpers.callStaticMethod(mWallpaperUtilsCls, \"hasAppliedLightWallpaper\");\n                            } catch (Throwable tr) {\n                                XposedLogUtils.logW(TAG, \"isLight is abnormal\", tr);\n                            }\n                        }\n\n                        Drawable bkg;\n                        if (opt == 1) {\n                            int bgColor = (isLight ? 0x00ffffff : 0x00000000) | (Math.round(255 * level / 100f) * 0x1000000);\n                            bkg = new ColorDrawable(bgColor);\n                        } else if (opt == 2) {\n                            bkg = getPaintDrawable(level);\n                        } else {\n                            bkg = null;\n                        }\n                        new Handler(context.getMainLooper()).post(() -> {\n                            XposedInit.mPrefsMap.put(\"prefs_key_home_folder_shade\", String.valueOf(opt));\n                            XposedInit.mPrefsMap.put(\"prefs_key_home_folder_shade_level\", level);\n                            folder.setBackground(bkg);\n                        });\n                    } catch (Throwable t) {\n                        XposedLogUtils.logW(TAG, \"\", t);\n                    }\n                }).start();\n            }\n        };\n\n        hookAllConstructors(\"com.miui.home.launcher.FolderCling\", hook);\n        findAndHookMethod(\"com.miui.home.launcher.FolderCling\", \"onWallpaperColorChanged\", hook);\n        findAndHookMethod(\"com.miui.home.launcher.FolderCling\", \"updateLayout\", boolean.class, hook);\n\n        findAndHookMethod(\"com.miui.home.launcher.Folder\", \"setBackgroundAlpha\", float.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                int opt = mPrefsMap.getStringAsInt(\"home_folder_shade\", 0);\n                Object mLauncher = XposedHelpers.getObjectField(param.thisObject, \"mLauncher\");\n                View folderCling = (View) XposedHelpers.callMethod(mLauncher, \"getFolderCling\");\n                if (opt == 1 || mLauncher == null || folderCling == null) return;\n                Drawable bkg = folderCling.getBackground();\n                if (bkg != null) bkg.setAlpha(Math.round((float) param.args[0] * 255));\n            }\n        });\n    }\n\n    @NonNull\n    private PaintDrawable getPaintDrawable(int level) {\n        PaintDrawable pd = new PaintDrawable();\n        pd.setShape(new RectShape());\n        pd.setShaderFactory(new ShapeDrawable.ShaderFactory() {\n            @Override\n            public Shader resize(int width, int height) {\n                int bgColor1 = (isLight ? 0x00ffffff : 0x00000000) | (Math.round(255 / 6f * level / 100f) * 0x1000000);\n                int bgColor2 = (isLight ? 0x00ffffff : 0x00000000) | (Math.round(255 * level / 100f) * 0x1000000);\n                return new LinearGradient(\n                    0, 0, 0, height,\n                    new int[]{bgColor1, bgColor2, bgColor2, bgColor1},\n                    new float[]{0.0f, 0.25f, 0.65f, 1.0f},\n                    Shader.TileMode.CLAMP\n                );\n            }\n        });\n        return pd;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/FolderVerticalPadding.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder\n\nimport android.widget.GridView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.dp2px\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.hookAfterAllMethods\nimport de.robv.android.xposed.XposedHelpers\n\nobject FolderVerticalPadding : BaseHook() {\n    override fun init() {\n\n        val verticalPadding = mPrefsMap.getInt(\"home_folder_vertical_padding\", 0)\n        if (verticalPadding <= 0) return\n        \"com.miui.home.launcher.Folder\".findClass().hookAfterAllMethods(\n            \"bind\"\n        ) {\n            val mContent = XposedHelpers.getObjectField(it.thisObject, \"mContent\") as GridView\n            mContent.verticalSpacing = dp2px(verticalPadding.toFloat())\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/folder/SmallFolderIconBlur.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.folder;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SmallFolderIconBlur extends BaseHook {\n\n    boolean isShowEditPanel;\n    Class<?> mLauncher;\n    Class<?> mFolderInfo;\n    Class<?> mFolderIcon;\n    Class<?> mFolderIcon1x1;\n    Class<?> mLauncherState;\n    Class<?> mDragView;\n\n    int mFolderIconSize;\n    ImageView mIconImageView;\n\n    @Override\n    public void init() {\n\n        mLauncher = findClassIfExists(\"com.miui.home.launcher.Launcher\");\n        mFolderInfo = findClassIfExists(\"com.miui.home.launcher.FolderInfo\");\n        mFolderIcon = findClassIfExists(\"com.miui.home.launcher.FolderIcon\");\n        mFolderIcon1x1 = findClassIfExists(\"com.miui.home.launcher.folder.FolderIcon1x1\");\n        mLauncherState = findClassIfExists(\"com.miui.home.launcher.LauncherState\");\n        mDragView = findClassIfExists(\"com.miui.home.launcher.DragView\");\n\n        hookAllConstructors(mFolderIcon, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                try {\n                    mIconImageView = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"mImageView\");\n                } catch (Exception e) {\n                    mIconImageView = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"mIconImageView\");\n                }\n\n                FrameLayout mDockBlur = (FrameLayout) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDockBlur\");\n                if (mDockBlur != null) return;\n                mDockBlur = new FrameLayout(mContext);\n                XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mDockBlur\", mDockBlur);\n            }\n        });\n\n        MethodHook mDockBlur = new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                try {\n                    mIconImageView = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"mImageView\");\n                } catch (Exception e) {\n                    mIconImageView = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"mIconImageView\");\n                }\n\n                Context mContext = mIconImageView.getContext();\n                mFolderIconSize = DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_small_folder_icon_bg_size\", 56));\n\n                FrameLayout mIconContainer = (FrameLayout) mIconImageView.getParent();\n                FrameLayout mDockBlur = (FrameLayout) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDockBlur\");\n                FrameLayout view = new FrameLayout(mContext);\n\n                mIconImageView.setVisibility(View.GONE);\n                mDockBlur.addView(view);\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                    new BlurUtils(mDockBlur, \"home_small_folder_icon_bg_custom\");\n                }\n                mIconContainer.addView(mDockBlur, 0);\n                FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mDockBlur.getLayoutParams();\n                lp.gravity = Gravity.CENTER;\n                lp.height = mFolderIconSize;\n                lp.width = mFolderIconSize;\n\n                findAndHookMethod(mLauncher, \"showEditPanel\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        isShowEditPanel = (boolean) param.args[0];\n                        if (isShowEditPanel) {\n                            mDockBlur.setVisibility(View.GONE);\n                            mIconImageView.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                            mIconImageView.setVisibility(View.GONE);\n                        }\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"openFolder\", mFolderInfo, View.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        mDockBlur.setVisibility(View.GONE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"closeFolder\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        if (!isShowEditPanel) mDockBlur.setVisibility(View.VISIBLE);\n                    }\n                });\n\n                findAndHookMethod(mLauncher, \"onStateSetStart\", mLauncherState, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        if (param.args[0].getClass().getSimpleName().equals(\"LauncherState\")) {\n                            mDockBlur.setVisibility(View.VISIBLE);\n                        } else {\n                            mDockBlur.setVisibility(View.GONE);\n                        }\n                    }\n                });\n            }\n        };\n\n\n        try {\n            findAndHookMethod(mFolderIcon1x1, \"onFinishInflate\", mDockBlur);\n        } catch (Exception e) {\n            findAndHookMethod(mFolderIcon, \"onFinishInflate\", mDockBlur);\n        }\n\n        /*hookAllMethods(mDragView, \"showWithAnim\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View dragView = (View) param.thisObject;\n                dragView.setLayerType(View.LAYER_TYPE_HARDWARE, null);\n                Object mDragInfo = XposedHelpers.getObjectField(param.thisObject, \"mDragInfo\");\n            }\n        });*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/gesture/DoubleTap.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.gesture;\n\nimport android.content.Context;\nimport android.os.SystemClock;\nimport android.view.MotionEvent;\nimport android.view.ViewConfiguration;\n\nimport com.sevtinge.cemiuiler.module.app.GlobalActions;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DoubleTap extends BaseHook {\n\n    Class<?> mWorkspace;\n\n    @Override\n    public void init() {\n        mWorkspace = findClassIfExists(\"com.miui.home.launcher.Workspace\");\n\n        hookAllConstructors(mWorkspace, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Object mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDoubleTapControllerEx\");\n                if (mDoubleTapControllerEx != null) return;\n                mDoubleTapControllerEx = new DoubleTapController((Context) param.args[0], \"prefs_key_home_gesture_double_tap\");\n                XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mDoubleTapControllerEx\", mDoubleTapControllerEx);\n            }\n        });\n\n        findAndHookMethod(mWorkspace, \"dispatchTouchEvent\", MotionEvent.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                DoubleTapController mDoubleTapControllerEx = (DoubleTapController) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mDoubleTapControllerEx\");\n                if (mDoubleTapControllerEx == null) return;\n                if (!mDoubleTapControllerEx.isDoubleTapEvent((MotionEvent) param.args[0])) return;\n                int mCurrentScreenIndex = XposedHelpers.getIntField(param.thisObject, lpparam.packageName.equals(\"com.miui.home\") ? \"mCurrentScreenIndex\" : \"mCurrentScreen\");\n                Object cellLayout = XposedHelpers.callMethod(param.thisObject, \"getCellLayout\", mCurrentScreenIndex);\n                if ((boolean) XposedHelpers.callMethod(cellLayout, \"lastDownOnOccupiedCell\")) return;\n                if ((boolean) XposedHelpers.callMethod(param.thisObject, \"isInNormalEditingMode\")) return;\n                mDoubleTapControllerEx.onDoubleTapEvent();\n            }\n        });\n    }\n\n\n    public static class DoubleTapController {\n\n        private float mActionDownRawX;\n        private float mActionDownRawY;\n        private int mClickCount;\n        public final Context mContext;\n        private final String mActionKey;\n        private float mFirstClickRawX;\n        private float mFirstClickRawY;\n        private long mLastClickTime;\n        private final int mTouchSlop;\n\n        DoubleTapController(Context context, String actionKey) {\n            this.mContext = context;\n            this.mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2;\n            this.mActionKey = actionKey;\n        }\n\n        boolean isDoubleTapEvent(MotionEvent motionEvent) {\n            int action = motionEvent.getActionMasked();\n            if (action == MotionEvent.ACTION_DOWN) {\n                this.mActionDownRawX = motionEvent.getRawX();\n                this.mActionDownRawY = motionEvent.getRawY();\n                return false;\n            } else if (action != MotionEvent.ACTION_UP) {\n                return false;\n            } else {\n                float rawX = motionEvent.getRawX();\n                float rawY = motionEvent.getRawY();\n                if (Math.abs(rawX - this.mActionDownRawX) <= ((float) this.mTouchSlop) && Math.abs(rawY - this.mActionDownRawY) <= ((float) this.mTouchSlop)) {\n                    long MAX_DURATION = 500;\n                    if (SystemClock.elapsedRealtime() - this.mLastClickTime > MAX_DURATION || rawY - this.mFirstClickRawY > (float) this.mTouchSlop || rawX - this.mFirstClickRawX > (float) this.mTouchSlop) {\n                        this.mClickCount = 0;\n                    }\n                    this.mClickCount++;\n                    if (this.mClickCount == 1) {\n                        this.mFirstClickRawX = rawX;\n                        this.mFirstClickRawY = rawY;\n                        this.mLastClickTime = SystemClock.elapsedRealtime();\n                        return false;\n                    } else if (Math.abs(rawY - this.mFirstClickRawY) <= ((float) this.mTouchSlop) && Math.abs(rawX - this.mFirstClickRawX) <= ((float) this.mTouchSlop) && SystemClock.elapsedRealtime() - this.mLastClickTime <= MAX_DURATION) {\n                        this.mClickCount = 0;\n                        return true;\n                    }\n                }\n                this.mClickCount = 0;\n                return false;\n            }\n        }\n\n        void onDoubleTapEvent() {\n            GlobalActions.handleAction(mContext, mActionKey);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/gesture/DoubleTapController.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.gesture\n\nimport android.content.Context\nimport android.os.SystemClock\nimport android.view.MotionEvent\nimport android.view.ViewConfiguration\n\nclass DoubleTapController internal constructor(mContext: Context) {\n\n    private val maxDuration: Long = 500\n    private var mActionDownRawX: Float = 0f\n    private var mActionDownRawY: Float = 0f\n    private var mClickCount: Int = 0\n    private var mFirstClickRawX: Float = 0f\n    private var mFirstClickRawY: Float = 0f\n    private var mLastClickTime: Long = 0\n    private val mTouchSlop: Int = ViewConfiguration.get(mContext).scaledTouchSlop * 2\n\n    fun isDoubleTapEvent(motionEvent: MotionEvent): Boolean {\n        val action = motionEvent.actionMasked\n        return when {\n            action == MotionEvent.ACTION_DOWN -> {\n                mActionDownRawX = motionEvent.rawX\n                mActionDownRawY = motionEvent.rawY\n                false\n            }\n\n            action != MotionEvent.ACTION_UP -> false\n            else -> {\n                val rawX = motionEvent.rawX\n                val rawY = motionEvent.rawY\n                if (kotlin.math.abs(rawX - mActionDownRawX) <= mTouchSlop.toFloat() && kotlin.math.abs(\n                        rawY - mActionDownRawY\n                    ) <= mTouchSlop.toFloat()\n                ) {\n                    if (SystemClock.elapsedRealtime() - mLastClickTime > maxDuration || rawY - mFirstClickRawY > mTouchSlop.toFloat() || rawX - mFirstClickRawX > mTouchSlop.toFloat()) mClickCount =\n                        0\n                    mClickCount++\n                    if (mClickCount == 1) {\n                        mFirstClickRawX = rawX\n                        mFirstClickRawY = rawY\n                        mLastClickTime = SystemClock.elapsedRealtime()\n                        return false\n                    } else if (kotlin.math.abs(rawY - mFirstClickRawY) <= mTouchSlop.toFloat() && kotlin.math.abs(\n                            rawX - mFirstClickRawX\n                        ) <= mTouchSlop.toFloat() && SystemClock.elapsedRealtime() - mLastClickTime <= maxDuration\n                    ) {\n                        mClickCount = 0\n                        return true\n                    }\n                }\n                mClickCount = 0\n                false\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/gesture/HotSeatSwipe.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.gesture;\n\nimport android.content.Context;\nimport android.view.GestureDetector;\nimport android.view.MotionEvent;\nimport android.view.ViewGroup;\n\nimport com.sevtinge.cemiuiler.module.app.GlobalActions;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class HotSeatSwipe extends BaseHook {\n\n    private GestureDetector mDetectorHorizontal;\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.hotseats.HotSeats\", \"dispatchTouchEvent\", MotionEvent.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                MotionEvent ev = (MotionEvent) param.args[0];\n                if (ev == null) return;\n\n                ViewGroup hotSeat = (ViewGroup) param.thisObject;\n                Context helperContext = hotSeat.getContext();\n                if (helperContext == null) return;\n                if (mDetectorHorizontal == null)\n                    mDetectorHorizontal = new GestureDetector(helperContext, new SwipeListenerHorizontal(hotSeat));\n                mDetectorHorizontal.onTouchEvent(ev);\n            }\n        });\n    }\n\n\n    private static class SwipeListenerHorizontal extends GestureDetector.SimpleOnGestureListener {\n\n        private final int SWIPE_MIN_DISTANCE_HORIZ;\n        private final int SWIPE_THRESHOLD_VELOCITY;\n\n        final Context helperContext;\n\n        SwipeListenerHorizontal(Object cellLayout) {\n            helperContext = ((ViewGroup) cellLayout).getContext();\n            float density = helperContext.getResources().getDisplayMetrics().density;\n            SWIPE_MIN_DISTANCE_HORIZ = Math.round(75 * density);\n            SWIPE_THRESHOLD_VELOCITY = Math.round(33 * density);\n        }\n\n        @Override\n        public boolean onDown(MotionEvent e) {\n            return false;\n        }\n\n        @Override\n        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {\n            if (e1 == null || e2 == null) return false;\n\n            if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE_HORIZ && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)\n                return GlobalActions.handleAction(helperContext, \"prefs_key_home_gesture_right_swipe\");\n\n            if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE_HORIZ && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)\n                return GlobalActions.handleAction(helperContext, \"prefs_key_home_gesture_left_swipe\");\n\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/gesture/QuickBack.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.gesture;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class QuickBack extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.recents.GestureStubView\",\n            \"isDisableQuickSwitch\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(false);\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/gesture/ShakeDevice.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.gesture;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.hardware.Sensor;\nimport android.hardware.SensorManager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.ShakeManager;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ShakeDevice extends BaseHook {\n    @Override\n    public void init() {\n        final String shakeMgrKey = \"MIUIZER_SHAKE_MGR\";\n\n        findAndHookMethod(\"com.miui.home.launcher.Launcher\", \"onResume\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                ShakeManager shakeMgr = (ShakeManager) XposedHelpers.getAdditionalInstanceField(param.thisObject, shakeMgrKey);\n                if (shakeMgr == null) {\n                    shakeMgr = new ShakeManager((Context) param.thisObject);\n                    XposedHelpers.setAdditionalInstanceField(param.thisObject, shakeMgrKey, shakeMgr);\n                }\n                Activity launcherActivity = (Activity) param.thisObject;\n                SensorManager sensorMgr = (SensorManager) launcherActivity.getSystemService(Context.SENSOR_SERVICE);\n                shakeMgr.reset();\n                sensorMgr.registerListener(shakeMgr, sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);\n            }\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.Launcher\", \"onPause\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                if (XposedHelpers.getAdditionalInstanceField(param.thisObject, shakeMgrKey) == null) return;\n                Activity launcherActivity = (Activity) param.thisObject;\n                SensorManager sensorMgr = (SensorManager) launcherActivity.getSystemService(Context.SENSOR_SERVICE);\n                sensorMgr.unregisterListener((ShakeManager) XposedHelpers.getAdditionalInstanceField(param.thisObject, shakeMgrKey));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/gesture/SwipeAndStop.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.gesture;\n\nimport static com.sevtinge.cemiuiler.utils.Helpers.findAndHookMethodUseUnhook;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.module.app.GlobalActions;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SwipeAndStop extends BaseHook {\n    @Override\n    public void init() {\n            Class<?> VibratorCls = findClassIfExists(\"android.os.Vibrator\", lpparam.classLoader);\n            hookAllMethods(\"com.miui.home.recents.GestureBackArrowView\", \"setReadyFinish\", new MethodHook() {\n                private Unhook vibratorHook = null;\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    vibratorHook = findAndHookMethodUseUnhook(VibratorCls, \"vibrate\", long.class, XC_MethodReplacement.DO_NOTHING);\n                }\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    if (vibratorHook != null) {\n                        vibratorHook.unhook();\n                    }\n                }\n            });\n\n        findAndHookMethod(\"com.miui.home.recents.GestureStubView\", \"disableQuickSwitch\", boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.args[0] = false;\n            }\n        });\n        findAndHookMethod(\"com.miui.home.recents.GestureStubView\", \"isDisableQuickSwitch\", XC_MethodReplacement.returnConstant(false));\n        findAndHookMethod(\"com.miui.home.recents.GestureStubView\",\"getNextTask\", Context.class, boolean.class, int.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                boolean switchApp = (boolean) param.args[1];\n                if (switchApp) {\n                    Context mContext = (Context) param.args[0];\n                    Bundle bundle = new Bundle();\n                    bundle.putInt(\"inDirection\", (int)param.args[2]);\n                    if (GlobalActions.handleAction(mContext, \"pref_key_controls_fsg_swipeandstop\")) {\n                        Class<?> Task = findClassIfExists(\"com.android.systemui.shared.recents.model.Task\", lpparam.classLoader);\n                        param.setResult(XposedHelpers.newInstance(Task));\n                        return;\n                    }\n                }\n                param.setResult(null);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/HotSeatsHeight.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\npublic class HotSeatsHeight extends BaseHook {\n\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        findAndHookMethod(mDeviceConfig, \"calcHotSeatsHeight\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Context context = (Context) param.args[0];\n                param.setResult(DisplayUtils.dip2px(context, mPrefsMap.getInt(\"home_layout_hotseats_height\", 60)));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/HotSeatsMarginBottom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\npublic class HotSeatsMarginBottom extends BaseHook {\n\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        findAndHookMethod(mDeviceConfig, \"calcHotSeatsMarginBottom\", Context.class, boolean.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Context context = (Context) param.args[0];\n                param.setResult(DisplayUtils.dip2px(context, mPrefsMap.getInt(\"home_layout_hotseats_margin_bottom\", 60)));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/HotSeatsMarginTop.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\npublic class HotSeatsMarginTop extends BaseHook {\n\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        findAndHookMethod(mDeviceConfig, \"calcHotSeatsMarginTop\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Context context = (Context) param.args[0];\n                param.setResult(DisplayUtils.dip2px(context, mPrefsMap.getInt(\"home_layout_hotseats_margin_top\", 60)));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/SearchBarMarginBottom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\npublic class SearchBarMarginBottom extends BaseHook {\n\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        findAndHookMethod(mDeviceConfig, \"calcSearchBarMarginBottom\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Context context = (Context) param.args[0];\n                param.setResult(DisplayUtils.dip2px(context, mPrefsMap.getInt(\"home_layout_searchbar_margin_bottom\", 0)));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/ShowClock.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class ShowClock extends BaseHook {\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.Workspace\", \"isScreenHasClockGadget\", long.class, XC_MethodReplacement.returnConstant(false));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/UnlockGrids.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport java.util.ArrayList;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class UnlockGrids extends BaseHook {\n\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n\n        /*\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        hookAllMethodsSilently(\"com.miui.home.launcher.compat.LauncherCellCountCompatDevice\", \"shouldUseDeviceValue\", XC_MethodReplacement.returnConstant(false));\n\n        findAndHookMethod(\"com.miui.home.settings.MiuiHomeSettings\", \"onCreatePreferences\", Bundle.class, String.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.callMethod(XposedHelpers.getObjectField(param.thisObject, \"mScreenCellsConfig\"), \"setVisible\", true);\n            }\n        });\n\n        findAndHookMethod(mDeviceConfig, \"loadCellsCountConfig\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                int sCellCountY = (int) XposedHelpers.getStaticObjectField(mDeviceConfig, \"sCellCountY\");\n                if (sCellCountY > 6) {\n                    int cellHeight = (int) XposedHelpers.callStaticMethod(mDeviceConfig, \"getCellHeight\");\n                    XposedHelpers.setStaticObjectField(mDeviceConfig, \"sFolderCellHeight\", cellHeight);\n                }\n            }\n        });\n\n        UnlockGridsRes();\n\n         */\n\n\n        hookAllMethodsSilently(\"com.miui.home.launcher.compat.LauncherCellCountCompatDevice\", \"shouldUseDeviceValue\", XC_MethodReplacement.returnConstant(false));\n        findAndHookMethod(\"com.miui.home.settings.MiuiHomeSettings\", \"onCreatePreferences\", Bundle.class, String.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.callMethod(XposedHelpers.getObjectField(param.thisObject, \"mScreenCellsConfig\"), \"setVisible\", true);\n            }\n        });\n        Class<?> DeviceConfigClass = XposedHelpers.findClass(\"com.miui.home.launcher.DeviceConfig\", lpparam.classLoader);\n        Helpers.findAndHookMethod(DeviceConfigClass, \"loadCellsCountConfig\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                int sCellCountY = (int) XposedHelpers.getStaticObjectField(DeviceConfigClass, \"sCellCountY\");\n                if (sCellCountY > 6) {\n                    int cellHeight = (int) XposedHelpers.callStaticMethod(DeviceConfigClass, \"getCellHeight\");\n                    XposedHelpers.setStaticObjectField(DeviceConfigClass, \"sFolderCellHeight\", cellHeight);\n                }\n            }\n        });\n        findAndHookMethod(\"com.miui.home.launcher.ScreenUtils\", \"getScreenCellsSizeOptions\", Context.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                ArrayList<CharSequence> arrayList = new ArrayList<>();\n                int cellCountXMin = 3;\n                int cellCountXMax = 16;\n                int cellCountYMin = 4;\n                int cellCountYMax = 18;\n                while (cellCountXMin <= cellCountXMax) {\n                    for (int i = cellCountYMin; i <= cellCountYMax; i++) {\n                        arrayList.add(cellCountXMin + \"x\" + i);\n                    }\n                    cellCountXMin++;\n                }\n                param.setResult(arrayList);\n            }\n        });\n\n        Helpers.findAndHookMethod(\"com.miui.home.launcher.compat.LauncherCellCountCompatNoWord\", lpparam.classLoader, \"setLoadResCellConfig\", boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.args[0] = true;\n            }\n        });\n\n        Helpers.hookAllMethods(\"com.miui.home.launcher.DeviceConfig\", lpparam.classLoader, \"isCellSizeChangedByTheme\", new MethodHook() {\n            XC_MethodHook.Unhook nowordHook;\n\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                nowordHook = Helpers.findAndHookMethodUseUnhook(\"com.miui.home.launcher.common.Utilities\", lpparam.classLoader, \"isNoWordModel\", XC_MethodReplacement.returnConstant(false));\n            }\n\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                if (nowordHook != null) nowordHook.unhook();\n                nowordHook = null;\n            }\n        });\n\n        UnlockGridsRes();\n    }\n\n    public void UnlockGridsRes() {\n        mResHook.setObjectReplacement(\"com.miui.home\", \"integer\", \"config_cell_count_x\", 3);\n        mResHook.setObjectReplacement(\"com.miui.home\", \"integer\", \"config_cell_count_y\", 4);\n        mResHook.setObjectReplacement(\"com.miui.home\", \"integer\", \"config_cell_count_x_min\", 3);\n        mResHook.setObjectReplacement(\"com.miui.home\", \"integer\", \"config_cell_count_y_min\", 4);\n        mResHook.setObjectReplacement(\"com.miui.home\", \"integer\", \"config_cell_count_x_max\", 16);\n        mResHook.setObjectReplacement(\"com.miui.home\", \"integer\", \"config_cell_count_y_max\", 18);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/UnlockGridsNoWord.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class UnlockGridsNoWord extends BaseHook {\n\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        findAndHookMethod(mDeviceConfig, \"isThemeCoverCellConfig\", XC_MethodReplacement.returnConstant(true));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/layout/WorkspacePadding.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.layout;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\npublic class WorkspacePadding extends BaseHook {\n\n    Context mContext;\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        findAndHookMethod(mDeviceConfig, \"Init\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                mContext = (Context) param.args[0];\n            }\n        });\n\n        if (mPrefsMap.getBoolean(\"home_layout_workspace_padding_bottom_enable\")) {\n            findAndHookMethod(mDeviceConfig, \"getWorkspaceCellPaddingBottom\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_layout_workspace_padding_bottom\", 0)));\n                }\n            });\n        }\n\n        if (mPrefsMap.getBoolean(\"home_layout_workspace_padding_top_enable\")) {\n            try {\n                // 新版本桌面，先标记，后续再做进一步修改\n                findAndHookMethod(mDeviceConfig, \"getWorkspaceCellPaddingTop\", Context.class, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        param.setResult(DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_layout_workspace_padding_top\", 0)));\n                    }\n                });\n            } catch (Throwable t) {\n                findAndHookMethod(mDeviceConfig, \"getWorkspaceCellPaddingTop\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        param.setResult(DisplayUtils.dip2px(mContext, mPrefsMap.getInt(\"home_layout_workspace_padding_top\", 0)));\n                    }\n                });\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/mipad/EnableHideGestureLine.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.mipad\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject EnableHideGestureLine : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.home.recents.settings.NavigationBarTypePreferenceFragment\").methodFinder().first{\n            name == \"updatePreferenceVisibility\"\n        }.createHook{\n            before{\n                it.result = true\n            }\n        }\n\n\n        loadClass(\"com.miui.home.recents.BaseRecentsImpl\").methodFinder().first{\n            name == \"initHideGestureLine\"\n        }.createHook{\n            before{\n                it.result = null\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/mipad/EnableMoreSetting.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.mipad\n\nimport android.view.View\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectField\n\nobject EnableMoreSetting : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.home.settings.MiuiHomeSettings\").methodFinder().first{\n            name == \"checkDevice\"\n        }.createHook{\n            returnConstant(true)\n        }\n\n        loadClass(\"com.miui.home.launcher.DeviceConfig\").methodFinder().first{\n            name == \"needShowCellsEntry\"\n        }.createHook{\n            returnConstant(true)\n        }\n\n        loadClass(\"com.miui.home.launcher.LauncherMenu\").methodFinder().first{\n            name == \"onShow\"\n        }.createHook{\n            after{\n                val mDefaultScreenPreview = it.thisObject.getObjectField(\"mDefaultScreenPreview\") as View\n                mDefaultScreenPreview.visibility = View.VISIBLE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/mipad/SetGestureNeedFingerNum.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.mipad\n\nimport android.view.MotionEvent\nimport com.github.kyuubiran.ezxhelper.ClassUtils.getStaticObjectOrNullAs\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject SetGestureNeedFingerNum : BaseHook() {\n    override fun init() {\n        val clazzGestureOperationHelper =\n            loadClass(\"com.miui.home.recents.GestureOperationHelper\")\n        clazzGestureOperationHelper.methodFinder()\n            .filterByName(\"isThreePointerSwipeLeftOrRightInScreen\")\n            .filterByParamTypes(MotionEvent::class.java, Int::class.java)\n            .first().createHook {\n                before { param ->\n                    val motionEvent = param.args[0] as MotionEvent\n                    val swipeFlag = param.args[1] as Int\n                    val flagSwipeLeft =\n                        getStaticObjectOrNullAs<Int>(clazzGestureOperationHelper, \"SWIPE_DIRECTION_LEFT\")\n                    val flagSwipeRight =\n                        getStaticObjectOrNullAs<Int>(clazzGestureOperationHelper, \"SWIPE_DIRECTION_RIGHT\")\n                    val flagsSwipeLeftAndRight = setOf(flagSwipeLeft, flagSwipeRight)\n                    val z =\n                        if (motionEvent.device == null) true\n                        else motionEvent.device.sources and 4098 == 4098\n                    param.result =\n                        z && (swipeFlag in flagsSwipeLeftAndRight) && motionEvent.pointerCount == 4\n                }\n            }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/navigation/BackGestureAreaHeight.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.navigation;\n\nimport android.view.WindowManager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class BackGestureAreaHeight extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethodSilently(\"com.miui.home.recents.GestureStubView\",  \"getGestureStubWindowParam\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                WindowManager.LayoutParams lp = (WindowManager.LayoutParams)param.getResult();\n                int pct = mPrefsMap.getInt(\"home_navigation_back_area_height\", 60);  //记得改key\n                lp.height = Math.round(lp.height / 60.0f * pct);\n                param.setResult(lp);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/navigation/BackGestureAreaWidth.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.navigation;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BackGestureAreaWidth extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethodSilently(\"com.miui.home.recents.GestureStubView\", \"initScreenSizeAndDensity\", int.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                int pct = mPrefsMap.getInt(\"home_navigation_back_area_width\", 100);\n                if (pct == 100) return;\n                int mGestureStubDefaultSize = XposedHelpers.getIntField(param.thisObject, \"mGestureStubDefaultSize\");\n                int mGestureStubSize  = XposedHelpers.getIntField(param.thisObject, \"mGestureStubSize\");\n                mGestureStubDefaultSize = Math.round(mGestureStubDefaultSize * pct / 100f);\n                mGestureStubSize = Math.round(mGestureStubSize * pct / 100f);\n                XposedHelpers.setIntField(param.thisObject, \"mGestureStubDefaultSize\", mGestureStubDefaultSize);\n                XposedHelpers.setIntField(param.thisObject, \"mGestureStubSize\", mGestureStubSize);\n            }\n        });\n\n        findAndHookMethodSilently(\"com.miui.home.recents.GestureStubView\", \"setSize\", int.class, new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                int pct = mPrefsMap.getInt(\"home_navigation_back_area_width\", 100);\n                if (pct == 100) return;\n                int mGestureStubDefaultSize = XposedHelpers.getIntField(param.thisObject, \"mGestureStubDefaultSize\");\n                if ((int)param.args[0] == mGestureStubDefaultSize) return;\n                param.args[0] = Math.round((int)param.args[0] * pct / 100f);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/AlwaysBlurWallpaper.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject AlwaysBlurWallpaper : BaseHook() {\n    override fun init() {\n\n        // if (!mPrefsMap.getBoolean(\"home_blur_wallpaper\")) return\n        val value = mPrefsMap.getInt(\"home_blur_radius\", 100)\n\n        loadClass(\"com.miui.home.launcher.common.BlurUtils\").methodFinder().first {\n            name == \"fastBlur\" && parameterCount == 4\n        }.createHook {\n            before {\n                it.args[0] = value.toFloat() / 100\n                it.args[2] = true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/AlwaysShowStatusClock.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject AlwaysShowStatusClock : BaseHook() {\n    override fun init() {\n\n        // if (!mPrefsMap.getBoolean(\"home_show_status_clock\")) return\n        val mWorkspaceClass = loadClass(\"com.miui.home.launcher.Workspace\")\n        val methodNames =\n            listOf(\"isScreenHasClockGadget\", \"isScreenHasClockWidget\", \"isClockWidget\")\n\n        methodNames.forEach { methodName ->\n            val result = runCatching {\n                mWorkspaceClass.methodFinder().first {\n                    name == methodName\n                }.createHook {\n                    before { it.result = false }\n                }\n            }\n            if (result.isSuccess) return@forEach\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/BlurRadius.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.hookBeforeAllMethods\n\nobject BlurRadius : BaseHook() {\n    override fun init() {\n\n        val value = mPrefsMap.getInt(\"home_other_blur_radius\", 100).toFloat() / 100\n        if (value == 1f) return\n        val blurUtilsClass = \"com.miui.home.launcher.common.BlurUtils\".findClass()\n        blurUtilsClass.hookBeforeAllMethods(\"fastBlur\") {\n            it.args[0] = it.args[0] as Float * value\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/BlurWhenShowShortcutMenu.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport android.animation.Animator\nimport android.animation.AnimatorListenerAdapter\nimport android.animation.ValueAnimator\nimport android.graphics.RenderEffect\nimport android.graphics.Shader\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.GradientDrawable\nimport android.graphics.drawable.ShapeDrawable\nimport android.os.Build\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport androidx.annotation.RequiresApi\nimport androidx.core.view.ViewCompat.animate\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.HookUtils\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\nimport de.robv.android.xposed.XposedHelpers\nimport kotlin.math.sqrt\n\nobject BlurWhenShowShortcutMenu : BaseHook() {\n\n    override fun init() {\n\n        val shortcutMenuBackgroundAlpha = mPrefsMap.getInt(\"home_other_shortcut_background_blur_custom\", 200)\n        val shortcutMenuLayerClass: Class<*> = findClassIfExists(\"com.miui.home.launcher.ShortcutMenuLayer\")\n        val shortcutMenuClass: Class<*> = findClassIfExists(\"com.miui.home.launcher.shortcuts.ShortcutMenu\")\n        val blurUtilsClass: Class<*> = findClassIfExists(\"com.miui.home.launcher.common.BlurUtils\")\n        val applicationClass: Class<*> = findClassIfExists(\"com.miui.home.launcher.Application\")\n        val utilitiesClass: Class<*> = findClassIfExists(\"com.miui.home.launcher.common.Utilities\")\n        val dragViewClass: Class<*> = findClassIfExists(\"com.miui.home.launcher.DragView\")\n\n        val allBluredDrawable: MutableList<Drawable> = ArrayList()\n\n        val singleLayerAlpha =\n            ((1.0 - sqrt(1.0 - (shortcutMenuBackgroundAlpha / 255.0))) * 255.0).toInt()\n\n        var isShortcutMenuLayerBlurred = false\n        var targetView: ViewGroup? = null\n        var dragView: View? = null\n        var blurBackground = true\n\n        fun showBlurDrawable() {\n            allBluredDrawable.forEach { drawable ->\n                XposedHelpers.callMethod(drawable, \"setVisible\", true, false)\n            }\n        }\n\n        fun hideBlurDrawable() {\n            allBluredDrawable.forEach { drawable ->\n                XposedHelpers.callMethod(drawable, \"setVisible\", false, false)\n            }\n        }\n\n        XposedBridge.hookAllMethods(\n            shortcutMenuLayerClass,\n            \"showShortcutMenu\",\n            object : XC_MethodHook() {\n                @RequiresApi(Build.VERSION_CODES.S)\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    val dragObject = param.args[0]\n                    val dragViewInfo = XposedHelpers.callMethod(dragObject, \"getDragInfo\")\n                    val iconIsInFolder =\n                        XposedHelpers.callMethod(dragViewInfo, \"isInFolder\") as Boolean\n\n                    val mLauncher = XposedHelpers.callStaticMethod(applicationClass, \"getLauncher\")\n                    val systemUiController =\n                        XposedHelpers.callMethod(mLauncher, \"getSystemUiController\")\n                    val mWindow = HookUtils.getValueByField(systemUiController, \"mWindow\")\n                    val targetBlurView = XposedHelpers.callMethod(mLauncher, \"getScreen\") as View\n                    // 修复文件夹内各种模糊冲突异常\n                    blurBackground = if (iconIsInFolder) !mPrefsMap.getBoolean(\"home_folder_blur\") else true\n                    val renderEffectArray = arrayOfNulls<RenderEffect>(51)\n                    for (index in 0..50) {\n                        renderEffectArray[index] = RenderEffect.createBlurEffect(\n                            (index + 1).toFloat(),\n                            (index + 1).toFloat(),\n                            Shader.TileMode.MIRROR\n                        )\n                    }\n\n                    val valueAnimator = ValueAnimator.ofInt(0, 50)\n                    valueAnimator.addUpdateListener { animator ->\n                        val value = animator.animatedValue as Int\n                        targetBlurView.setRenderEffect(renderEffectArray[value])\n                        // 修复始终模糊壁纸冲突导致的各种模糊异常\n                        if (blurBackground && !mPrefsMap.getBoolean(\"home_other_always_blur_launcher_wallpaper\")) {\n                            XposedHelpers.callStaticMethod(\n                                blurUtilsClass,\n                                \"fastBlurDirectly\",\n                                value / 50f,\n                                mWindow\n                            )\n                        }\n                    }\n                    dragView =\n                        XposedHelpers.callMethod(dragObject, \"getDragView\") as View\n                    targetView = XposedHelpers.callMethod(dragView, \"getContent\") as ViewGroup\n                    valueAnimator.duration = 200\n                    valueAnimator.start()\n                    hideBlurDrawable()\n                    isShortcutMenuLayerBlurred = true\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            shortcutMenuLayerClass,\n            \"onDragStart\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (isShortcutMenuLayerBlurred) {\n                        if (targetView != null) {\n                            targetView!!.transitionAlpha = 0f\n                        }\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            shortcutMenuLayerClass,\n            \"onDragEnd\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (isShortcutMenuLayerBlurred) {\n                        val isLocked = XposedHelpers.callStaticMethod(\n                            utilitiesClass,\n                            \"isScreenCellsLocked\"\n                        ) as Boolean\n                        if (isLocked && dragView != null) {\n                            animate(dragView!!).scaleX(1f).scaleY(1f).setDuration(200).start()\n                        }\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(dragViewClass, \"remove\", object : XC_MethodHook() {\n            override fun beforeHookedMethod(param: MethodHookParam) {\n                if (isShortcutMenuLayerBlurred) {\n                    param.result = null\n                }\n            }\n        })\n\n        XposedBridge.hookAllMethods(\n            shortcutMenuClass,\n            \"reset\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (isShortcutMenuLayerBlurred) {\n                        isShortcutMenuLayerBlurred = false\n                        if (targetView != null) {\n                            targetView!!.transitionAlpha = 1f\n                        }\n                        val mLauncher =\n                            XposedHelpers.callStaticMethod(applicationClass, \"getLauncher\")\n                        val systemUiController =\n                            XposedHelpers.callMethod(mLauncher, \"getSystemUiController\")\n                        val mWindow = HookUtils.getValueByField(systemUiController, \"mWindow\")\n\n                        if (blurBackground) {\n                            XposedHelpers.callStaticMethod(\n                                blurUtilsClass, \"fastBlurDirectly\", 0f, mWindow\n                            )\n                        }\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            shortcutMenuLayerClass,\n            \"hideShortcutMenu\",\n            object : XC_MethodHook() {\n                @RequiresApi(Build.VERSION_CODES.S)\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (isShortcutMenuLayerBlurred) {\n                        val editStateChangeReason = param.args[0]\n                        val shortcutMenuLayer = param.thisObject as FrameLayout\n                        val mLauncher =\n                            XposedHelpers.callStaticMethod(applicationClass, \"getLauncher\")\n                        val systemUiController =\n                            XposedHelpers.callMethod(mLauncher, \"getSystemUiController\")\n                        val mWindow = HookUtils.getValueByField(systemUiController, \"mWindow\")\n\n                        val targetBlurView =\n                            XposedHelpers.callMethod(mLauncher, \"getScreen\") as View\n\n                        val valueAnimator = ValueAnimator.ofInt(50, 0)\n                        val renderEffectArray = arrayOfNulls<RenderEffect>(51)\n                        for (index in 0..50) {\n                            renderEffectArray[index] = RenderEffect.createBlurEffect(\n                                (index + 1).toFloat(),\n                                (index + 1).toFloat(),\n                                Shader.TileMode.MIRROR\n                            )\n                        }\n                        valueAnimator.addUpdateListener { animator ->\n                            val value = animator.animatedValue as Int\n                            targetBlurView.setRenderEffect(renderEffectArray[value])\n                            // 修复始终模糊壁纸模糊丢失\n                            if (blurBackground && !mPrefsMap.getBoolean(\"home_other_always_blur_launcher_wallpaper\")) {\n                                XposedHelpers.callStaticMethod(\n                                    blurUtilsClass, \"fastBlurDirectly\", value / 50f, mWindow\n                                )\n                            }\n                        }\n                        valueAnimator.addListener(object : AnimatorListenerAdapter() {\n                            override fun onAnimationEnd(animation: Animator) {\n                                shortcutMenuLayer.background = null\n                                showBlurDrawable()\n                                targetView!!.transitionAlpha = 1f\n                                targetBlurView.setRenderEffect(null)\n                                isShortcutMenuLayerBlurred = false\n                                if (editStateChangeReason != null && editStateChangeReason.toString() != \"drag_over_threshold\") {\n                                    XposedHelpers.callMethod(dragView, \"remove\")\n                                }\n                            }\n                        })\n                        valueAnimator.duration = 200\n                        valueAnimator.start()\n\n                        if (editStateChangeReason != null) {\n                            XposedLogUtils.logI(editStateChangeReason.toString())\n                        } else {\n                            isShortcutMenuLayerBlurred = false\n                            XposedHelpers.callMethod(dragView, \"remove\")\n                        }\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            blurUtilsClass,\n            \"fastBlurDirectly\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    val blurRatio = param.args[0] as Float\n                    if (isShortcutMenuLayerBlurred && blurRatio == 0.0f) {\n                        param.result = null\n                    }\n                }\n            })\n\n\n        if (shortcutMenuBackgroundAlpha != 255) {\n            XposedBridge.hookAllMethods(\n                shortcutMenuClass,\n                \"setMenuBg\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        if (!isShortcutMenuLayerBlurred) {\n                            return\n                        }\n\n                        val mAppShortcutMenu: ViewGroup\n                        val mAppShortcutMenuBackground: GradientDrawable\n\n                        val mSystemShortcutMenu: ViewGroup\n                        val mSystemShortcutMenuBackground: GradientDrawable\n                        /*\n                             val mWidgetShortcutMenu: ViewGroup\n                             val mWidgetShortcutMenuBackground: GradientDrawable\n                        */\n                        val mAppPersonaliseShortcutMenu: ViewGroup\n                        val mAppPersonaliseShortcutMenuBackground: GradientDrawable\n\n                        val mFolderShortcutMenu: ViewGroup\n                        val mFolderShortcutMenuBackground: GradientDrawable\n\n                        try {\n                            mAppShortcutMenu = param.thisObject.getObjectField(\"mAppShortcutMenu\") as ViewGroup\n                            mAppShortcutMenuBackground =\n                                mAppShortcutMenu.background as GradientDrawable\n                            mAppShortcutMenuBackground.alpha = singleLayerAlpha\n                            for (index in 0..mAppShortcutMenu.childCount) {\n                                val child = mAppShortcutMenu.getChildAt(index)\n                                if (child != null && child.background != null) {\n                                    if (child.background is Drawable) {\n                                        val childBackground = child.background as Drawable\n                                        childBackground.alpha = singleLayerAlpha\n                                    }\n                                }\n                            }\n                        } catch (e: Exception) {\n                            XposedLogUtils.logI(\"BlurWhenShowShortcutMenu get mAppShortcutMenu failed by: $e\")\n                        }\n                        try {\n                            mSystemShortcutMenu = param.thisObject.getObjectField(\"mSystemShortcutMenu\") as ViewGroup\n                            mSystemShortcutMenuBackground =\n                                mSystemShortcutMenu.background as GradientDrawable\n                            mSystemShortcutMenuBackground.alpha = singleLayerAlpha\n                            for (index in 0..mSystemShortcutMenu.childCount) {\n                                val child = mSystemShortcutMenu.getChildAt(index)\n                                if (child != null && child.background != null) {\n                                    if (child.background is Drawable) {\n                                        val childBackground = child.background as Drawable\n                                        childBackground.alpha = singleLayerAlpha\n                                    }\n                                }\n                            }\n                        } catch (e: Exception) {\n                            XposedLogUtils.logI(\"BlurWhenShowShortcutMenu get mSystemShortcutMenu failed by: $e\")\n                        }\n                        try {\n                            mAppPersonaliseShortcutMenu =\n                                param.thisObject.getObjectField(\"mAppPersonaliseShortcutMenu\") as ViewGroup\n                            mAppPersonaliseShortcutMenuBackground =\n                                mAppPersonaliseShortcutMenu.background as GradientDrawable\n                            mAppPersonaliseShortcutMenuBackground.alpha = singleLayerAlpha\n                            for (index in 0..mAppPersonaliseShortcutMenu.childCount) {\n                                val child = mAppPersonaliseShortcutMenu.getChildAt(index)\n                                if (child != null && child.background != null) {\n                                    if (child.background is Drawable) {\n                                        val childBackground = child.background as Drawable\n                                        childBackground.alpha = singleLayerAlpha\n                                    }\n                                }\n                            }\n                        } catch (e: Exception) {\n                            XposedLogUtils.logI(\"BlurWhenShowShortcutMenu get mAppPersonaliseShortcutMenu failed by: $e\")\n                        }\n                        try {\n                            mFolderShortcutMenu = param.thisObject.getObjectField(\"mFolderShortcutMenu\") as ViewGroup\n                            mFolderShortcutMenuBackground =\n                                mFolderShortcutMenu.background as GradientDrawable\n                            mFolderShortcutMenuBackground.alpha = singleLayerAlpha\n                            for (index in 0..mFolderShortcutMenu.childCount) {\n                                val child = mFolderShortcutMenu.getChildAt(index)\n                                if (child != null && child.background != null) {\n                                    if (child.background is Drawable) {\n                                        val childBackground = child.background as Drawable\n                                        childBackground.alpha = singleLayerAlpha\n                                    }\n                                }\n                            }\n                        } catch (e: Exception) {\n                            XposedLogUtils.logI(\"BlurWhenShowShortcutMenu get mFolderShortcutMenu failed by: $e\")\n                        }\n                        /*try {\n                             mWidgetShortcutMenu = param.thisObject.getObjectField(\"mWidgetShortcutMenu\") as ViewGroup\n                             mWidgetShortcutMenuBackground =\n                                 mWidgetShortcutMenu.background as GradientDrawable\n                             mWidgetShortcutMenuBackground.alpha = singleLayerAlpha\n                             for (index in 0..mWidgetShortcutMenu.childCount) {\n                                 val child = mWidgetShortcutMenu.getChildAt(index)\n                                 if (child != null && child.background != null) {\n                                     if (child.background is Drawable) {\n                                         val childBackground = child.background as Drawable\n                                         childBackground.alpha = singleLayerAlpha\n                                     }\n                                 }\n                             }\n                         } catch (e: Exception) {\n                             XposedBridge.log(\"Cemiuiler: BlurWhenShowShortcutMenu get mWidgetShortcutMenu failed by: $e\")\n                         }*/\n                    }\n                })\n            XposedBridge.hookAllMethods(\n                shortcutMenuClass,\n                \"addArrow\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        if (!isShortcutMenuLayerBlurred) {\n                            return\n                        }\n                        val mArrow = HookUtils.getValueByField(\n                            param.thisObject, \"mArrow\"\n                        ) as View\n                        val mArrowBackground = mArrow.background as ShapeDrawable\n                        mArrowBackground.alpha = shortcutMenuBackgroundAlpha\n                    }\n                })\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/DisableHideGoogle.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport android.content.ComponentName\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\nimport miui.os.Build\n\n@Suppress(\"UNCHECKED_CAST\")\nobject DisableHideGoogle : BaseHook() {\n    override fun init() {\n        if (Build.IS_INTERNATIONAL_BUILD)\n            return\n\n        XposedHelpers.findAndHookConstructor(\n            \"com.miui.home.launcher.AppFilter\",\n            lpparam.classLoader,\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val skippedItem = XposedHelpers.getObjectField(\n                        param.thisObject,\n                        \"mSkippedItems\"\n                    ) as HashSet<ComponentName>\n\n                    skippedItem.removeIf {\n                        it.packageName == \"com.google.android.googlequicksearchbox\"\n                            || it.packageName == \"com.google.android.gms\"\n                    }\n                }\n            }\n        )\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/FixAndroidRS.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedHelpers\n\nobject FixAndroidRS : BaseHook() {\n    override fun init() {\n        val globalSearchUtilClass = \"com.miui.home.launcher.GlobalSearchUtil\"\n        XposedHelpers.findAndHookMethod(globalSearchUtilClass, lpparam.classLoader,\n            \"isSupportPullDownSearch\", object : XC_MethodReplacement() {\n                override fun replaceHookedMethod(param: MethodHookParam?): Any {\n                    return false\n                }\n            })\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/FreeformShortcutMenu.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static de.robv.android.xposed.XC_MethodReplacement.returnConstant;\nimport static de.robv.android.xposed.XposedHelpers.callMethod;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.res.Resources;\nimport android.os.Bundle;\nimport android.view.View;\n\nimport androidx.core.content.ContextCompat;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class FreeformShortcutMenu extends BaseHook {\n\n    Class<?> mActivity;\n    Class<?> mViewDarkModeHelper;\n    Class<?> mSystemShortcutMenu;\n    Class<?> mSystemShortcutMenuItem;\n    Class<?> mAppShortcutMenu;\n    Class<?> mShortcutMenuItem;\n    Class<?> mAppDetailsShortcutMenuItem;\n    Class<?> mActivityUtilsCompat;\n    Class<?> mRecentsAndFSGestureUtils;\n\n    Context mContext;\n\n    XC_MethodHook.Unhook mShortCutMenuItemHook;\n\n    @Override\n    public void init() {\n\n        if (isPad()) {\n            hookAllMethods(\"com.miui.home.launcher.shortcuts.SystemShortcutMenuItem$MultipleSmallWindowShortcutMenuItem\", \"isValid\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    returnConstant(true);\n                }\n            });\n            hookAllMethods(\"com.miui.home.launcher.shortcuts.SystemShortcutMenuItem$SmallWindowShortcutMenuItem\", \"isValid\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    returnConstant(true);\n                }\n            });\n            return;\n        }\n\n        mActivity = Activity.class;\n        mViewDarkModeHelper = findClassIfExists(\"com.miui.home.launcher.util.ViewDarkModeHelper\");\n        mSystemShortcutMenu = findClassIfExists(\"com.miui.home.launcher.shortcuts.SystemShortcutMenu\");\n        mSystemShortcutMenuItem = findClassIfExists(\"com.miui.home.launcher.shortcuts.SystemShortcutMenuItem\");\n        mAppShortcutMenu = findClassIfExists(\"com.miui.home.launcher.shortcuts.AppShortcutMenu\");\n        mShortcutMenuItem = findClassIfExists(\"com.miui.home.launcher.shortcuts.ShortcutMenuItem\");\n        mAppDetailsShortcutMenuItem = findClassIfExists(\"com.miui.home.launcher.shortcuts.SystemShortcutMenuItem$AppDetailsShortcutMenuItem\");\n        mActivityUtilsCompat = findClassIfExists(\"com.miui.launcher.utils.ActivityUtilsCompat\");\n        mRecentsAndFSGestureUtils = findClassIfExists(\"com.miui.home.launcher.RecentsAndFSGestureUtils\");\n\n        try {\n\n            hookAllMethods(mViewDarkModeHelper, \"onConfigurationChanged\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    XposedHelpers.callStaticMethod(mSystemShortcutMenuItem, \"createAllSystemShortcutMenuItems\");\n                }\n            });\n\n            hookAllMethods(mShortcutMenuItem, \"getShortTitle\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    if (param.getResult().equals(\"应用信息\")) {\n                        param.setResult(\"信息\");\n                    }\n                    if (param.getResult().equals(\"新建窗口\")) {\n                        param.setResult(\"多开\");\n                    }\n                }\n            });\n\n            hookAllMethods(mActivity, \"onCreate\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    mContext = (Context) param.thisObject;\n                }\n            });\n\n            findAndHookMethod(mAppDetailsShortcutMenuItem, \"getOnClickListener\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    Resources modRes = Helpers.getModuleRes(mContext);\n                    Object obj = param.thisObject;\n                    CharSequence mShortTitle = (CharSequence) callMethod(obj, \"getShortTitle\");\n\n                    if (mShortTitle.equals(modRes.getString(R.string.share_center))) {\n                        XposedHelpers.callStaticMethod(mRecentsAndFSGestureUtils, \"startWorld\", mContext);\n                    } else if (mShortTitle.equals(modRes.getString(R.string.floating_window))) {\n                        param.setResult(getFreeformOnClickListener(obj, false));\n                    } else if (mShortTitle.equals(modRes.getString(R.string.new_task))) {\n                        param.setResult(getFreeformOnClickListener(obj, true));\n                    }\n                }\n            });\n\n            hookAllMethods(mSystemShortcutMenu, \"getMaxShortcutItemCount\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    param.setResult(6);\n                }\n            });\n\n            hookAllMethods(mAppShortcutMenu, \"getMaxShortcutItemCount\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    param.setResult(6);\n                }\n            });\n\n            hookAllMethods(mSystemShortcutMenuItem, \"createAllSystemShortcutMenuItems\", new MethodHook() {\n                @SuppressLint(\"DiscouragedApi\")\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n\n                    Resources modRes = Helpers.getModuleRes(mContext);\n\n                    List mAllSystemShortcutMenuItems = (List) XposedHelpers.getStaticObjectField(mSystemShortcutMenuItem, \"sAllSystemShortcutMenuItems\");\n\n                    Object mSmallWindowInstance = XposedHelpers.newInstance(mAppDetailsShortcutMenuItem);\n                    Object mNewTasksInstance = XposedHelpers.newInstance(mAppDetailsShortcutMenuItem);\n                    if (mPrefsMap.getBoolean(\"home_other_freeform_shortcut_menu\")) {\n                        callMethod(mSmallWindowInstance, \"setShortTitle\", modRes.getString(R.string.floating_window));\n                        callMethod(mSmallWindowInstance, \"setIconDrawable\", ContextCompat.getDrawable(mContext, mContext.getResources().getIdentifier(\"ic_task_small_window\", \"drawable\", mContext.getPackageName())));\n                    }\n                    if (mPrefsMap.getBoolean(\"home_other_tasks_shortcut_menu\")) {\n                        callMethod(mNewTasksInstance, \"setShortTitle\", modRes.getString(R.string.new_task));\n                        callMethod(mNewTasksInstance, \"setIconDrawable\", ContextCompat.getDrawable(mContext, mContext.getResources().getIdentifier(\"ic_task_add_pair\", \"drawable\", mContext.getPackageName())));\n                    }\n\n                    ArrayList sAllSystemShortcutMenuItems = new ArrayList();\n                    if (mPrefsMap.getBoolean(\"home_other_freeform_shortcut_menu\"))\n                        sAllSystemShortcutMenuItems.add(mSmallWindowInstance);\n                    if (mPrefsMap.getBoolean(\"home_other_tasks_shortcut_menu\"))\n                        sAllSystemShortcutMenuItems.add(mNewTasksInstance);\n                    sAllSystemShortcutMenuItems.addAll(mAllSystemShortcutMenuItems);\n                    XposedHelpers.setStaticObjectField(mSystemShortcutMenuItem, \"sAllSystemShortcutMenuItems\", sAllSystemShortcutMenuItems);\n                }\n            });\n\n        } catch (Throwable th) {\n            XposedLogUtils.logW(TAG, \"FreeformShortcutMenu\", th);\n        }\n    }\n\n\n    private View.OnClickListener getFreeformOnClickListener(Object obj, boolean isNewTaskOnClick) {\n        return view -> {\n            Intent intent = new Intent();\n            Context mContext1 = view.getContext();\n            ComponentName mComponentName = (ComponentName) callMethod(obj, \"getComponentName\", new Object[0]);\n            intent.setAction(\"android.intent.action.MAIN\");\n            intent.addCategory(\"android.intent.category.DEFAULT\");\n            intent.setComponent(mComponentName);\n            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n            if (isNewTaskOnClick) {\n                intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);\n            }\n            Object makeFreeformActivityOptions = XposedHelpers.callStaticMethod(mActivityUtilsCompat, \"makeFreeformActivityOptions\", mContext1, mComponentName.getPackageName());\n\n            if (makeFreeformActivityOptions != null) {\n                mContext1.startActivity(intent, (Bundle) callMethod(makeFreeformActivityOptions, \"toBundle\", new Object[0]));\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/HomeMode.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class HomeMode extends BaseHook {\n\n    Class<?> mDeviceConfig;\n\n    @Override\n    public void init() {\n\n        mDeviceConfig = findClassIfExists(\"com.miui.home.launcher.DeviceConfig\");\n\n        findAndHookMethod(mDeviceConfig, \"isDarkMode\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                int mHomeMode = mPrefsMap.getStringAsInt(\"home_other_home_mode\", 0);\n                boolean isHomeMode = !(mHomeMode == 2);\n                param.setResult(isHomeMode);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/InfiniteScroll.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class InfiniteScroll extends BaseHook {\n\n    @Override\n    public void init() {\n\n        findAndHookMethod(\"com.miui.home.launcher.ScreenView\", \"getSnapToScreenIndex\", int.class, int.class, int.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                if (param.args[0] != param.getResult()) return;\n                int screenCount = (int) XposedHelpers.callMethod(param.thisObject, \"getScreenCount\");\n                if ((int) param.args[2] == -1 && (int) param.args[0] == 0)\n                    param.setResult(screenCount);\n                else if ((int) param.args[2] == 1 && (int) param.args[0] == screenCount - 1)\n                    param.setResult(0);\n            }\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.ScreenView\", \"getSnapUnitIndex\", int.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                int index = (int) param.getResult();\n                int mCurrentScreenIndex = XposedHelpers.getIntField(param.thisObject, lpparam.packageName.equals(\"com.miui.home\") ? \"mCurrentScreenIndex\" : \"mCurrentScreen\");\n                if (mCurrentScreenIndex != index) return;\n                int screenCount = (int) XposedHelpers.callMethod(param.thisObject, \"getScreenCount\");\n                if (index == 0) {\n                    param.setResult(screenCount);\n                } else if (index == screenCount - 1) {\n                    param.setResult(0);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/OverlapMode.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass OverlapMode : BaseHook() {\n    override fun init() {\n        // Fold2 样式负一屏\n        loadClass(\"com.miui.home.launcher.overlay.assistant.AssistantDeviceAdapter\").methodFinder()\n            .first {\n                name == \"inOverlapMode\"\n            }.createHook {\n                returnConstant(true)\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/ShortcutBackgroundBlur.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport android.animation.Animator\nimport android.animation.AnimatorListenerAdapter\nimport android.animation.ValueAnimator\nimport android.app.Activity\nimport android.graphics.Bitmap\nimport android.graphics.Canvas\nimport android.graphics.RenderEffect\nimport android.graphics.Shader\nimport android.graphics.drawable.BitmapDrawable\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.GradientDrawable\nimport android.graphics.drawable.ShapeDrawable\nimport android.os.Build\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport androidx.annotation.RequiresApi\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.*\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\nimport de.robv.android.xposed.XposedHelpers\nimport kotlin.math.sqrt\n\n\nobject ShortcutBackgroundBlur : BaseHook() {\n    @RequiresApi(Build.VERSION_CODES.S)\n    override fun init() {\n\n        // if (!mPrefsMap.getBoolean(\"home_shortcut_blur\")) return\n\n        // From WINI with MIT\n        val shortcutMenuBackgroundAlpha = mPrefsMap.getInt(\"home_other_shortcut_background_blur_custom\", 200)\n        val shortcutMenuLayerClass = findClassIfExists(\"com.miui.home.launcher.ShortcutMenuLayer\")\n        val shortcutMenuClass = findClassIfExists(\"com.miui.home.launcher.shortcuts.ShortcutMenu\")\n        val blurUtilsClass = findClassIfExists(\"com.miui.home.launcher.common.BlurUtils\")\n        val applicationClass = findClassIfExists(\"com.miui.home.launcher.Application\")\n        val utilitiesClass = findClassIfExists(\"com.miui.home.launcher.common.Utilities\")\n        val launcherStateClass = findClassIfExists(\"com.miui.home.launcher.LauncherState\")\n\n        /*\n        两层视图alpha计算公式：2x-x^2=y\n        x为单层视图alpha 0完全透明 1完全不透明\n        y为双层混合后的透明度\n        x与y在图层透明度这种情况下永远为正值\n        将改公式转换为x=f(y)：x=1-√(1-y)\n        */\n        val singleLayerAlpha = ((1.0 - sqrt(1.0 - (shortcutMenuBackgroundAlpha / 255.0))) * 255.0).toInt()\n        XposedLogUtils.logI(\"\" + shortcutMenuBackgroundAlpha)\n        XposedLogUtils.logI(\"\" + singleLayerAlpha)\n\n        val mBlurIconAppName = arrayOf(\"锁屏\", \"手电筒\", \"数据\", \"飞行模式\", \"蓝牙\", \"WLAN 热点\")\n        val allBlurredDrawable: MutableList<Drawable> = ArrayList()\n\n        fun showBlurDrawable() {\n            allBlurredDrawable.forEach { drawable ->\n                XposedHelpers.callMethod(drawable, \"setVisible\", true, false)\n            }\n        }\n\n        fun hideBlurDrawable() {\n            allBlurredDrawable.forEach { drawable ->\n                XposedHelpers.callMethod(drawable, \"setVisible\", false, false)\n            }\n        }\n\n        var isShortcutMenuLayerBlurred = false\n        var dragLayer: ViewGroup? = null\n        var targetView: View? = null\n        var dragLayerBackground: Drawable? = null\n\n        shortcutMenuLayerClass.hookBeforeAllMethods(\"showShortcutMenu\") {\n            hideBlurDrawable()\n            val dragObject = it.args[0]\n            val dragViewInfo = dragObject.callMethod(\"getDragInfo\")\n            val iconIsInFolder = dragViewInfo?.callMethod(\"isInFolder\") as Boolean\n            if (iconIsInFolder) return@hookBeforeAllMethods\n\n            // 文件夹内不模糊\n            val iconIsApplication = dragViewInfo.callMethod(\"isApplicatoin\") as Boolean\n            val iconTitle = dragViewInfo.callMethod(\"getTitle\") as String\n\n            if (!iconIsApplication && !mBlurIconAppName.contains(iconTitle)) return@hookBeforeAllMethods\n\n            val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n            val launcherStatusField = launcherStateClass.getDeclaredField(\"ALL_APPS\")\n            launcherStatusField.isAccessible = true\n            val allAppsStatus = launcherStatusField.get(null)\n            val stateManager = mLauncher.callMethod(\"getStateManager\")\n            val currentState = stateManager?.callMethod(\"getState\")\n            if (currentState == allAppsStatus) return@hookBeforeAllMethods\n\n            val targetBlurView = mLauncher.callMethod(\"getScreen\") as View\n\n            val renderEffectArray = arrayOfNulls<RenderEffect>(51)\n            for (index in 0..50) {\n                renderEffectArray[index] =\n                    RenderEffect.createBlurEffect((index + 1).toFloat(), (index + 1).toFloat(), Shader.TileMode.MIRROR)\n            }\n\n            val valueAnimator = ValueAnimator.ofInt(0, 50)\n            valueAnimator.addUpdateListener { animator ->\n                val value = animator.animatedValue as Int\n                if (!mPrefsMap.getBoolean(\"home_blur_wallpaper\")) {\n                    blurUtilsClass.callStaticMethod(\"fastBlurDirectly\", value / 50f, mLauncher.window)\n                }\n                targetBlurView.setRenderEffect(renderEffectArray[value])\n            }\n            val dragView = dragObject.callMethod(\"getDragView\") as View\n            targetView = dragView.callMethod(\"getContent\") as View\n            dragLayer = targetBlurView.parent as ViewGroup\n            valueAnimator.duration = 200\n            valueAnimator.start()\n            isShortcutMenuLayerBlurred = true\n        }\n\n        shortcutMenuLayerClass.hookBeforeAllMethods(\"onDragStart\") {\n            if (isShortcutMenuLayerBlurred) {\n                val dragObject = it.args[1]\n                val dragView = dragObject.callMethod(\"getDragView\") as View\n                val dragViewParent = dragView.parent as View\n                val bitmap = Bitmap.createBitmap(dragLayer!!.width, dragLayer!!.height, Bitmap.Config.ARGB_8888)\n                val canvas = Canvas(bitmap)\n                val originalScale = dragView.scaleX\n                dragView.scaleX = 1f\n                dragView.scaleY = 1f\n                dragViewParent.draw(canvas)\n                dragView.scaleX = originalScale\n                dragView.scaleY = originalScale\n                dragLayerBackground = BitmapDrawable(dragLayer!!.context.resources, bitmap)\n                targetView?.alpha = 0f\n            }\n        }\n\n        shortcutMenuLayerClass.hookBeforeAllMethods(\"onDragEnd\") {\n            if (isShortcutMenuLayerBlurred) {\n                val isLocked = utilitiesClass.callStaticMethod(\"isScreenCellsLocked\") as Boolean\n                if (isLocked) {\n                    dragLayer?.background = dragLayerBackground\n                } else {\n                    val valueAnimator = ValueAnimator.ofFloat(0f, 1f)\n                    valueAnimator.addListener(object : AnimatorListenerAdapter() {\n                        override fun onAnimationEnd(animation: Animator) {\n                            dragLayer?.background = dragLayerBackground\n                        }\n                    })\n                    valueAnimator.duration = 200\n                    valueAnimator.start()\n                }\n            }\n        }\n\n        shortcutMenuClass.hookBeforeAllMethods(\"reset\") {\n            if (isShortcutMenuLayerBlurred) {\n                isShortcutMenuLayerBlurred = false\n                targetView!!.alpha = 1f\n                val mLauncher = applicationClass.callStaticMethod(\"getLauncher\")\n                val systemUiController = mLauncher?.callMethod(\"getSystemUiController\")\n                val mWindow = systemUiController?.getObjectField(\"mWindow\")\n                blurUtilsClass.callStaticMethod(\"fastBlurDirectly\", 0f, mWindow)\n            }\n        }\n\n        shortcutMenuLayerClass.hookBeforeAllMethods(\"hideShortcutMenu\") {\n            if (isShortcutMenuLayerBlurred) {\n                val shortcutMenuLayer = it.thisObject as FrameLayout\n                val mLauncher = XposedHelpers.callStaticMethod(applicationClass, \"getLauncher\")\n                val systemUiController = XposedHelpers.callMethod(mLauncher, \"getSystemUiController\")\n                val mWindow = systemUiController.getObjectField(\"mWindow\")\n                val targetBlurView = mLauncher.callMethod(\"getScreen\") as View\n                val valueAnimator = ValueAnimator.ofInt(50, 0)\n                val renderEffectArray = arrayOfNulls<RenderEffect>(51)\n                for (index in 0..50) {\n                    renderEffectArray[index] = RenderEffect.createBlurEffect(\n                        (index + 1).toFloat(),\n                        (index + 1).toFloat(),\n                        Shader.TileMode.MIRROR\n                    )\n                }\n                valueAnimator.addUpdateListener { animator ->\n                    val value = animator.animatedValue as Int\n                    targetBlurView.setRenderEffect(renderEffectArray[value])\n                    if (!mPrefsMap.getBoolean(\"home_blur_wallpaper\")) {\n                        blurUtilsClass.callStaticMethod(\"fastBlurDirectly\", value / 50f, mWindow)\n                    }\n                }\n                valueAnimator.addListener(object : AnimatorListenerAdapter() {\n                    override fun onAnimationEnd(animation: Animator) {\n                        shortcutMenuLayer.background = null\n                        showBlurDrawable()\n                        targetView!!.alpha = 1f\n                        targetBlurView.setRenderEffect(null)\n                        dragLayer?.background = null\n                    }\n                })\n                valueAnimator.duration = 200\n                valueAnimator.start()\n            }\n            isShortcutMenuLayerBlurred = false\n        }\n\n        blurUtilsClass.hookBeforeAllMethods(\"fastBlurDirectly\") {\n            val blurRatio = it.args[0] as Float\n            if (isShortcutMenuLayerBlurred && blurRatio == 0.0f) {\n                it.result = null\n            }\n        }\n\n        if (shortcutMenuBackgroundAlpha != 255) {\n            XposedBridge.hookAllMethods(\n                shortcutMenuClass,\n                \"setMenuBg\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        if (!isShortcutMenuLayerBlurred) {\n                            return\n                        }\n\n                        val mAppShortcutMenu: ViewGroup\n                        val mAppShortcutMenuBackground: GradientDrawable\n\n                        val mSystemShortcutMenu: ViewGroup\n                        val mSystemShortcutMenuBackground: GradientDrawable\n\n                        val mWidgetShortcutMenu: ViewGroup\n                        val mWidgetShortcutMenuBackground: GradientDrawable\n\n                        try {\n                            mAppShortcutMenu = param.thisObject.getObjectField(\"mAppShortcutMenu\") as ViewGroup\n                            mAppShortcutMenuBackground =\n                                mAppShortcutMenu.background as GradientDrawable\n                            mAppShortcutMenuBackground.alpha = singleLayerAlpha\n                            for (index in 0..mAppShortcutMenu.childCount) {\n                                val child = mAppShortcutMenu.getChildAt(index)\n                                if (child != null && child.background != null) {\n                                    if (child.background is Drawable) {\n                                        val childBackground = child.background as Drawable\n                                        childBackground.alpha = singleLayerAlpha\n                                    }\n                                }\n                            }\n                        } catch (_: Exception) {\n                        }\n                        try {\n                            mSystemShortcutMenu = param.thisObject.getObjectField(\"mSystemShortcutMenu\") as ViewGroup\n                            mSystemShortcutMenuBackground =\n                                mSystemShortcutMenu.background as GradientDrawable\n                            mSystemShortcutMenuBackground.alpha = singleLayerAlpha\n                            for (index in 0..mSystemShortcutMenu.childCount) {\n                                val child = mSystemShortcutMenu.getChildAt(index)\n                                if (child != null && child.background != null) {\n                                    if (child.background is Drawable) {\n                                        val childBackground = child.background as Drawable\n                                        childBackground.alpha = singleLayerAlpha\n                                    }\n                                }\n                            }\n                        } catch (_: Exception) {\n                        }\n                        try {\n                            mWidgetShortcutMenu = param.thisObject.getObjectField(\"mWidgetShortcutMenu\") as ViewGroup\n                            mWidgetShortcutMenuBackground =\n                                mWidgetShortcutMenu.background as GradientDrawable\n                            mWidgetShortcutMenuBackground.alpha = singleLayerAlpha\n                            for (index in 0..mWidgetShortcutMenu.childCount) {\n                                val child = mWidgetShortcutMenu.getChildAt(index)\n                                if (child != null && child.background != null) {\n                                    if (child.background is Drawable) {\n                                        val childBackground = child.background as Drawable\n                                        childBackground.alpha = singleLayerAlpha\n                                    }\n                                }\n                            }\n                        } catch (_: Exception) {\n                        }\n                    }\n                })\n            XposedBridge.hookAllMethods(shortcutMenuClass, \"addArrow\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        if (!isShortcutMenuLayerBlurred) {\n                            return\n                        }\n                        val mArrow = HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mArrow\"\n                        ) as View\n                        val mArrowBackground = mArrow.background as ShapeDrawable\n                        mArrowBackground.alpha = shortcutMenuBackgroundAlpha\n                    }\n                }\n            )\n        }\n\n        /*\n\n        if (shortcutMenuBackgroundAlpha != 255) {\n            log(\"1\")\n            shortcutMenuClass.hookBeforeAllMethods(\"setMenuBg\") {\n                log(\"3\")\n                if (!isShortcutMenuLayerBlurred) {\n                    log(\"2\")\n                    return@hookBeforeAllMethods\n                }\n\n                val mAppShortcutMenu = it.thisObject.getObjectField(\"mAppShortcutMenu\") as ViewGroup\n                val mAppShortcutMenuBackground = mAppShortcutMenu.background as GradientDrawable\n                mAppShortcutMenuBackground.alpha = singleLayerAlpha\n                val mSystemShortcutMenu = it.thisObject.getObjectField(\"mSystemShortcutMenu\") as ViewGroup\n                val mSystemShortcutMenuBackground = mSystemShortcutMenu.background as GradientDrawable\n                mSystemShortcutMenuBackground.alpha = singleLayerAlpha\n\n                for (index in 0..mAppShortcutMenu.childCount) {\n                    val child = mAppShortcutMenu.getChildAt(index)\n                    if (child != null && child.background != null) {\n                        if (child.background is Drawable) {\n                            val childBackground = child.background as Drawable\n                            childBackground.alpha = singleLayerAlpha\n                        }\n                    }\n                }\n\n                for (index in 0..mSystemShortcutMenu.childCount) {\n                    val child = mSystemShortcutMenu.getChildAt(index)\n                    if (child != null && child.background != null) {\n                        if (child.background is Drawable) {\n                            val childBackground = child.background as Drawable\n                            childBackground.alpha = singleLayerAlpha\n                        }\n                    }\n                }\n\n            }\n\n            shortcutMenuClass.hookAfterAllMethods(\"addArrow\") {\n                log(\"4\")\n                if (!isShortcutMenuLayerBlurred) {\n                    log(\"5\")\n                    return@hookAfterAllMethods\n                }\n                val mArrow = it.thisObject.getObjectField(\"mArrow\") as View\n                val mArrowBackground = mArrow.background as ShapeDrawable\n                mArrowBackground.alpha = shortcutMenuBackgroundAlpha\n            }\n        }\n\n         */\n\n        blurUtilsClass.hookAfterAllMethods(\"fastBlurWhenEnterRecents\") {\n            val launcher = it.args[0]\n            if (launcher != null) {\n                XposedHelpers.callMethod(launcher, \"hideShortcutMenuWithoutAnim\")\n            }\n            hideBlurDrawable()\n        }\n\n        blurUtilsClass.hookAfterAllMethods(\"fastBlurWhenExitRecents\") {\n            showBlurDrawable()\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/ShortcutItemCount.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\n\nobject ShortcutItemCount : BaseHook() {\n    override fun init() {\n        val mAppShortcutMenuClass = loadClass(\"com.miui.home.launcher.shortcuts.AppShortcutMenu\")\n\n        mAppShortcutMenuClass.methodFinder().first {\n            name == \"getMaxCountInCurrentOrientation\"\n        }.createHook {\n            after {\n                it.result = 20\n            }\n        }\n\n        mAppShortcutMenuClass.methodFinder().first {\n            name == \"getMaxShortcutItemCount\"\n        }.createHook {\n            after {\n                it.result = 20\n            }\n        }\n\n        mAppShortcutMenuClass.methodFinder().first {\n            name == \"getMaxVisualHeight\"\n        }.createHook {\n            after {\n                it.result = it.thisObject.callMethod(\"getItemHeight\")\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/other/ShowAllHideApp.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.other\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject ShowAllHideApp : BaseHook() {\n    override fun init() {\n        dexKitBridge.findClass {\n            matcher {\n                addUsingStringsEquals(\"appInfo.packageName\", \"activityInfo\")\n            }\n        }.forEach {\n            it.getInstance(EzXHelper.classLoader).methodFinder().first {\n                name == \"isHideAppValid\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/AlwaysShowCleanUp.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.IS_TABLET\nimport com.sevtinge.cemiuiler.utils.api.isPad\n\nobject AlwaysShowCleanUp: BaseHook() {\n    override fun init() {\n        loadClass(\n            when (IS_TABLET) {\n                false -> \"com.miui.home.recents.views.RecentsContainer\"\n                true -> \"com.miui.home.recents.views.RecentsDecorations\"\n            }\n        ).methodFinder().filterByName(\"updateClearContainerVisible\")\n            .first().createHook {\n                returnConstant(true)\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/BlurLevel.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.app.Activity\nimport android.view.MotionEvent\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.ObjectHelper.Companion.objectHelper\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.isPad\nimport com.sevtinge.cemiuiler.utils.callStaticMethod\nimport com.sevtinge.cemiuiler.utils.hookAfterAllMethods\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\n\nobject BlurLevel : BaseHook() {\n    private val blurLevel by lazy {\n        mPrefsMap.getStringAsInt(\"home_recent_blur_level\", 6)\n    }\n\n    override fun init() {\n        val mBlurClass = loadClass(\"com.miui.home.launcher.common.BlurUtils\")\n\n        mBlurClass.methodFinder().first {\n            name == \"getBlurType\"\n        }.createHook {\n            before {\n                when (blurLevel) {\n                    5 -> returnConstant(2)\n                    0 -> returnConstant(2)\n                    2 -> returnConstant(1)\n                    3 -> returnConstant(0)\n                    4 -> returnConstant(0)\n                }\n\n            }\n        }\n\n        when (blurLevel) {\n            4 -> {\n                mBlurClass.methodFinder().first {\n                    name == \"isUseCompleteBlurOnDev\"\n                }.createHook {\n                    returnConstant(false)\n                }\n\n                \"com.miui.home.launcher.common.DeviceLevelUtils\".hookBeforeMethod(\"isUseSimpleAnim\") {\n                    it.result = true\n                }\n            }\n\n            5 -> {\n                val blurClass = findClassIfExists(\"com.miui.home.launcher.common.BlurUtils\")\n                val navStubViewClass = findClassIfExists(\"com.miui.home.recents.NavStubView\")\n                val applicationClass = findClassIfExists(\"com.miui.home.launcher.Application\")\n\n                navStubViewClass.hookBeforeMethod(\"onPointerEvent\", MotionEvent::class.java) {\n                    val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n                    val motionEvent = it.args[0] as MotionEvent\n                    val action = motionEvent.action\n                    if (action == 2) Thread.currentThread().priority = 10\n                    if (it.thisObject.objectHelper().getObjectOrNull(\"mWindowMode\") == 2 && action == 2) {\n                        blurClass.callStaticMethod(\"fastBlurDirectly\", 1.0f, mLauncher.window)\n                    }\n                }\n\n                \"com.miui.home.launcher.common.DeviceLevelUtils\".hookBeforeMethod(\"isUseSimpleAnim\") {\n                    it.result = false\n                }\n\n                if (isPad()) {\n                    navStubViewClass.hookAfterAllMethods(\"onTouchEvent\") {\n                        val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n                        blurClass.callStaticMethod(\"fastBlur\", 1.0f, mLauncher.window, true, 500L)\n                    }\n                }\n                /*  navStubViewClass.hookBeforeMethod(\"appTouchResolution\", MotionEvent::class.java) {\n                    val mLauncher = applicationClass.callStaticMethod(\"getLauncher\") as Activity\n                    blurClass.callStaticMethod(\"fastBlurDirectly\", 1.0f, mLauncher.window)\n                }*/\n            }\n\n            else -> {\n                \"com.miui.home.launcher.common.DeviceLevelUtils\".hookBeforeMethod(\"isUseSimpleAnim\") {\n                    it.result = false\n                }\n\n                mBlurClass.methodFinder().first {\n                    name == \"isUseCompleteBlurOnDev\"\n                }.createHook {\n                    before {\n                        when (blurLevel) {\n                            1 -> returnConstant(true)\n                        }\n                    }\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/CardTextColor.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.widget.TextView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject CardTextColor : BaseHook() {\n    override fun init() {\n        val recentTextColor = mPrefsMap.getInt(\"home_recent_text_color\", -1)\n        if (recentTextColor != -1) {\n            val taskViewHeaderClass = \"com.miui.home.recents.views.TaskViewHeader\".findClass()\n            taskViewHeaderClass.hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mTitle = it.thisObject.getObjectField(\"mTitleView\") as TextView\n                mTitle.setTextColor(recentTextColor)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/CardTextSize.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.util.TypedValue\nimport android.view.View\nimport android.widget.TextView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject CardTextSize : BaseHook() {\n    override fun init() {\n        val recentTextSize = mPrefsMap.getInt(\"home_recent_text_size\", -1)\n        if (recentTextSize != -1) {\n            val taskViewHeaderClass = \"com.miui.home.recents.views.TaskViewHeader\".findClass()\n            taskViewHeaderClass.hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mTitle = it.thisObject.getObjectField(\"mTitleView\") as TextView\n                mTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, recentTextSize.toFloat())\n                if (recentTextSize == 0) mTitle.visibility = View.GONE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/DisableRecentViewWallpaperDarken.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.setObjectField\n\nobject DisableRecentViewWallpaperDarken : BaseHook() {\n    override fun init() {\n\n        // if (!mPrefsMap.getBoolean(\"home_disable_darken\")) return\n        loadClass(\"com.miui.home.recents.DimLayer\").methodFinder().first {\n            name == \"dim\" && parameterCount == 3\n        }.createHook {\n            before {\n                it.args[0] = 0.0f\n                it.thisObject.setObjectField(\"mCurrentAlpha\", 0.0f)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/FreeformCardBackgroundColor.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.hookAfterAllConstructors\nimport com.sevtinge.cemiuiler.utils.setIntField\n\nobject FreeformCardBackgroundColor : BaseHook() {\n    override fun init() {\n        val appCardBgColor = mPrefsMap.getInt(\"home_recent_freeform_background_color\", -1)\n        if (appCardBgColor != -1) {\n            \"com.miui.home.recents.views.TaskViewThumbnail\".findClass().hookAfterAllConstructors {\n                it.thisObject.setIntField(\"mBgColorForSmallWindow\", appCardBgColor)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/HideCleanUp.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.view.View\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject HideCleanUp : BaseHook() {\n    override fun init() {\n        val recentsContainerClass = \"com.miui.home.recents.views.RecentsContainer\".findClass()\n        if (mPrefsMap.getBoolean(\"home_recent_hide_clean_up\")) {\n            recentsContainerClass.hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mView = it.thisObject.getObjectField(\"mClearAnimView\") as View\n                mView.visibility = View.GONE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/HideFreeform.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.view.View\nimport android.widget.TextView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject HideFreeform : BaseHook() {\n    override fun init() {\n\n        val recentsContainerClass = \"com.miui.home.recents.views.RecentsContainer\".findClass()\n        if (mPrefsMap.getBoolean(\"home_recent_hide_freeform\")) {\n            recentsContainerClass.hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mTitle = it.thisObject.getObjectField(\"mTxtSmallWindow\") as TextView\n                mTitle.visibility = View.GONE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/HideStatusBarWhenEnterRecent.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject HideStatusBarWhenEnterRecent : BaseHook() {\n    override fun init() {\n        val mDeviceLevelClass = loadClass(\"com.miui.home.launcher.common.DeviceLevelUtils\")\n\n        if (mPrefsMap.getBoolean(\"home_recent_hide_status_bar_in_task_view\")) {\n            mDeviceLevelClass.methodFinder().first {\n                name == \"isHideStatusBarWhenEnterRecents\"\n            }.createHook {\n                returnConstant(true)\n            }\n\n            loadClass(\"com.miui.home.launcher.DeviceConfig\").methodFinder().first {\n                name == \"keepStatusBarShowingForBetterPerformance\"\n            }.createHook {\n                returnConstant(false)\n            }\n        } else {\n            mDeviceLevelClass.methodFinder().first {\n                name == \"isHideStatusBarWhenEnterRecents\"\n            }.createHook {\n                returnConstant(false)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/MemInfoShow.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject MemInfoShow : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.home.recents.views.RecentsDecorations\").methodFinder().first {\n            name == \"canTxtMemInfoShow\"\n        }.createHook {\n            before { param ->\n                param.result = true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/RealMemory.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.annotation.SuppressLint\nimport android.app.ActivityManager\nimport android.content.Context\nimport android.text.format.Formatter\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.ConstructorFinder.`-Static`.constructorFinder\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.IS_TABLET\nimport com.sevtinge.cemiuiler.utils.api.isPad\nimport com.sevtinge.cemiuiler.utils.getObjectField\n\n// @SuppressLint(\"StaticFieldLeak\")\nobject RealMemory : BaseHook() {\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        lateinit var context: Context\n        var memoryInfo1StringId: Int? = null\n        var memoryInfo2StringId: Int? = null\n\n        fun Any.formatSize(): String = Formatter.formatFileSize(context, this as Long)\n\n        val recentContainerClass = loadClass(\n            when (IS_TABLET) {\n                false -> \"com.miui.home.recents.views.RecentsContainer\"\n                true -> \"com.miui.home.recents.views.RecentsDecorations\"\n            }\n        )\n\n        recentContainerClass.declaredConstructors.constructorFinder()\n            .filterByParamCount(2)\n            .first().createHook {\n                after {\n                    context = it.args[0] as Context\n                    memoryInfo1StringId = context.resources.getIdentifier(\n                        \"status_bar_recent_memory_info1\",\n                        \"string\",\n                        \"com.miui.home\"\n                    )\n                    memoryInfo2StringId = context.resources.getIdentifier(\n                        \"status_bar_recent_memory_info2\",\n                        \"string\",\n                        \"com.miui.home\"\n                    )\n                }\n            }\n\n        recentContainerClass.methodFinder()\n            .filterByName(\"refreshMemoryInfo\")\n            .first().createHook {\n                before {\n                    it.result = null\n                    val memoryInfo = ActivityManager.MemoryInfo()\n                    val activityManager =\n                        context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager\n                    activityManager.getMemoryInfo(memoryInfo)\n                    val totalMem = memoryInfo.totalMem.formatSize()\n                    val availMem = memoryInfo.availMem.formatSize()\n                    (it.thisObject.getObjectField(\"mTxtMemoryInfo1\") as TextView).text =\n                        context.getString(memoryInfo1StringId!!, availMem, totalMem)\n                    (it.thisObject.getObjectField(\"mTxtMemoryInfo2\") as TextView).text =\n                        context.getString(memoryInfo2StringId!!, availMem, totalMem)\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/RecentResource.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.app.Application\nimport android.content.Context\nimport android.content.res.Resources\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.EzXHelper.appContext\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.ResourcesHookData\nimport com.sevtinge.cemiuiler.utils.ResourcesHookMap\nimport com.sevtinge.cemiuiler.utils.devicesdk.dp2px\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport de.robv.android.xposed.XC_MethodHook\n\nobject RecentResource : BaseHook() {\n    private val hookMap = ResourcesHookMap<String, ResourcesHookData>()\n    private fun hook(param: XC_MethodHook.MethodHookParam) {\n        try {\n            val resName = appContext.resources.getResourceEntryName(param.args[0] as Int)\n            val resType = appContext.resources.getResourceTypeName(param.args[0] as Int)\n            if (hookMap.isKeyExist(resName)) if (hookMap[resName]?.type == resType) {\n                param.result = hookMap[resName]?.afterValue\n            }\n        } catch (ignore: Exception) {\n        }\n    }\n\n    override fun init() {\n        Application::class.java.hookBeforeMethod(\"attach\", Context::class.java) { it ->\n            EzXHelper.initHandleLoadPackage(lpparam)\n            EzXHelper.setLogTag(TAG)\n            EzXHelper.setToastTag(TAG)\n            EzXHelper.initAppContext(it.args[0] as Context)\n\n            Resources::class.java.hookBeforeMethod(\"getBoolean\", Int::class.javaPrimitiveType) { hook(it) }\n            Resources::class.java.hookBeforeMethod(\"getDimension\", Int::class.javaPrimitiveType) { hook(it) }\n            Resources::class.java.hookBeforeMethod(\"getDimensionPixelOffset\", Int::class.javaPrimitiveType) { hook(it) }\n            Resources::class.java.hookBeforeMethod(\"getDimensionPixelSize\", Int::class.javaPrimitiveType) { hook(it) }\n            Resources::class.java.hookBeforeMethod(\"getInteger\", Int::class.javaPrimitiveType) { hook(it) }\n            Resources::class.java.hookBeforeMethod(\"getText\", Int::class.javaPrimitiveType) { hook(it) }\n\n            val value = mPrefsMap.getInt(\"task_view_corners\", -1).toFloat()\n            val value1 = mPrefsMap.getInt(\"task_view_header_height\", -1).toFloat()\n            if (value != -1f && value != 20f) {\n                hookMap[\"recents_task_view_rounded_corners_radius_min\"] = ResourcesHookData(\"dimen\", dp2px(value))\n                hookMap[\"recents_task_view_rounded_corners_radius_max\"] = ResourcesHookData(\"dimen\", dp2px(value))\n            }\n            if (value1 != -1f && value != 40f) hookMap[\"recents_task_view_header_height\"] =\n                ResourcesHookData(\"dimen\", dp2px(value1))\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/RecentText.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.widget.TextView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject RecentText : BaseHook() {\n    override fun init() {\n        val emptyViewText = mPrefsMap.getString(\"home_recent_text\", \"\")\n        if (emptyViewText != \"\") {\n            \"com.miui.home.recents.views.RecentsView\".hookAfterMethod(\n                \"showEmptyView\", Int::class.javaPrimitiveType\n            ) {\n                (it.thisObject.getObjectField(\"mEmptyView\") as TextView).apply {\n                    this.text = emptyViewText\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/RemoveCardAnim.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.animation.ObjectAnimator\nimport android.view.MotionEvent\nimport android.view.View\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.callStaticMethod\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\nimport com.sevtinge.cemiuiler.utils.replaceMethod\nimport com.sevtinge.cemiuiler.utils.setObjectField\n\nobject RemoveCardAnim : BaseHook() {\n    override fun init() {\n\n        \"com.miui.home.recents.views.SwipeHelperForRecents\".hookAfterMethod(\"onTouchEvent\", MotionEvent::class.java) {\n            if (it.thisObject.getObjectField(\"mCurrView\") != null) {\n                val taskView2 = it.thisObject.getObjectField(\"mCurrView\") as View\n                taskView2.alpha = 1f\n                taskView2.scaleX = 1f\n                taskView2.scaleY = 1f\n            }\n        }\n        \"com.miui.home.recents.TaskStackViewLayoutStyleHorizontal\".replaceMethod(\n            \"createScaleDismissAnimation\", View::class.java, Float::class.java\n        ) {\n            val view = it.args[0] as View\n            val getScreenHeight =\n                findClass(\"com.miui.home.launcher.DeviceConfig\").callStaticMethod(\"getScreenHeight\") as Int\n            val ofFloat =\n                ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, view.translationY, -getScreenHeight * 1.1484375f)\n            ofFloat.duration = 200\n            return@replaceMethod ofFloat\n        }\n\n        \"com.miui.home.recents.views.VerticalSwipe\".hookAfterMethod(\"calculate\", Float::class.java) {\n            val f = it.args[0] as Float\n            val asScreenHeightWhenDismiss =\n                \"com.miui.home.recents.views.VerticalSwipe\".findClass()\n                    .callStaticMethod(\"getAsScreenHeightWhenDismiss\") as Int\n            val f2 = f / asScreenHeightWhenDismiss\n            val mTaskViewHeight = it.thisObject.getObjectField(\"mTaskViewHeight\") as Float\n            val mCurScale = it.thisObject.getObjectField(\"mCurScale\") as Float\n            val f3: Float = mTaskViewHeight * mCurScale\n            val i = if (f2 > 0.0f) 1 else if (f2 == 0.0f) 0 else -1\n            val afterFrictionValue: Float =\n                it.thisObject.callMethod(\"afterFrictionValue\", f, asScreenHeightWhenDismiss) as Float\n            if (i < 0) it.thisObject.setObjectField(\n                \"mCurTransY\",\n                (mTaskViewHeight / 2.0f + afterFrictionValue * 2) - (f3 / 2.0f)\n            )\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/RemoveIcon.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.view.View\nimport android.widget.ImageView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject RemoveIcon : BaseHook() {\n    override fun init() {\n        if (mPrefsMap.getBoolean(\"home_recent_remove_icon\")) {\n            \"com.miui.home.recents.views.TaskViewHeader\".hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mImage = it.thisObject.getObjectField(\"mIconView\") as ImageView\n                mImage.visibility = View.GONE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/TaskViewHorizontal.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.graphics.RectF\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.callStaticMethod\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject TaskViewHorizontal : BaseHook() {\n    override fun init() {\n\n        val value1 = mPrefsMap.getInt(\"task_view_horizontal1\", 100).toFloat() / 100\n        val value2 = mPrefsMap.getInt(\"task_view_horizontal2\", 100).toFloat() / 100\n        if (value1 == 1f && value2 == 1f) return\n        \"com.miui.home.recents.views.TaskStackViewsAlgorithmHorizontal\".hookAfterMethod(\n            \"scaleTaskView\", RectF::class.java,\n        ) {\n            \"com.miui.home.recents.util.Utilities\".findClass().callStaticMethod(\n                \"scaleRectAboutCenter\",\n                it.args[0],\n                if (it.thisObject.callMethod(\"isLandscapeVisually\") as Boolean) value2 else value1\n            )\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/recent/TaskViewVertical.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.recent\n\nimport android.graphics.RectF\nimport com.github.kyuubiran.ezxhelper.EzXHelper.appContext\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callStaticMethod\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.replaceMethod\n\nobject TaskViewVertical : BaseHook() {\n    override fun init() {\n\n        val value = mPrefsMap.getInt(\"home_recent_vertical_task_view_card_size\", 100).toFloat() / 100\n        if (value == -1f || value == 1f) return\n        \"com.miui.home.recents.views.TaskStackViewsAlgorithmVertical\".replaceMethod(\n            \"scaleTaskView\", RectF::class.java\n        ) {\n            \"com.miui.home.recents.util.Utilities\".findClass().callStaticMethod(\n                \"scaleRectAboutCenter\",\n                it.args[0],\n                value * \"com.miui.home.recents.util.Utilities\".findClass()\n                    .callStaticMethod(\"getTaskViewScale\", appContext) as Float\n            )\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/AnimParamCustom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport static de.robv.android.xposed.XposedHelpers.callMethod;\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class AnimParamCustom extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.miui.home.recents.util.RectFSpringAnim\", \"setAnimParamByType\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) throws NoSuchFieldException, ClassNotFoundException {\n                Class<?> clazzRectFSpringAnim = ClassUtils.loadClass(\"com.miui.home.recents.util.RectFSpringAnim\", null);\n                Object RECT_CENTERX = ClassUtils.getStaticObjectOrNull(clazzRectFSpringAnim, \"RECT_CENTERX\");\n                Object RECT_CENTERY = ClassUtils.getStaticObjectOrNull(clazzRectFSpringAnim, \"RECT_CENTERY\");\n                Object RECT_WIDTH = ClassUtils.getStaticObjectOrNull(clazzRectFSpringAnim, \"RECT_WIDTH\");\n                Object RECT_RATIO = ClassUtils.getStaticObjectOrNull(clazzRectFSpringAnim, \"RECT_RATIO\");\n                Object RADIUS = ClassUtils.getStaticObjectOrNull(clazzRectFSpringAnim, \"RADIUS\");\n                Object ALPHA = ClassUtils.getStaticObjectOrNull(clazzRectFSpringAnim, \"ALPHA\");\n                Enum animType = (Enum) param.args[0];\n                switch (animType.name()) {\n                    case \"BREAK_OPEN\" -> {// 1\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_1\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_1\", 135) / 1000));// 0.99 0.135\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_1\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_1\", 135) / 1000));// 0.99 0.135\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_1\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_1\", 135) / 1000));// 0.99 0.135\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_1\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_1\", 135) / 1000));// 0.99 0.135\n                        callMethod(param.thisObject, \"setAnimParam\", RADIUS, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RADIUS_1\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RADIUS_1\", 135) / 1000));// 0.99 0.135\n                        callMethod(param.thisObject, \"setAnimParam\", ALPHA, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_ALPHA_1\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_ALPHA_1\", 135) / 1000));// 0.99 0.135\n                    }\n                    case \"OPEN_FROM_HOME\" -> {// 2\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_2\", 960) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_2\", 300) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_2\", 960) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_2\", 300) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_2\", 960) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_2\", 410) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_2\", 960) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_2\", 340) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RADIUS, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RADIUS_2\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RADIUS_2\", 225) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", ALPHA, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_ALPHA_2\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_ALPHA_2\", 135) / 1000));\n                    }\n                    case \"OPEN_FROM_RECENTS\" -> {// 3\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_3\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_3\", 270) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_3\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_3\", 270) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_3\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_3\", 360) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_3\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_3\", 360) / 1000));\n                    }\n                    case \"CLOSE_TO_RECENTS\" -> {// 4\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_4\", 950) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_4\", 315) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_4\", 950) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_4\", 315) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_4\", 950) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_4\", 315) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_4\", 950) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_4\", 270) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RADIUS, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RADIUS_4\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RADIUS_4\", 270) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", ALPHA, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_ALPHA_4\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_ALPHA_4\", 270) / 1000));\n                    }\n                    case \"CLOSE_TO_HOME\" -> {// 5\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_5\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_5\", 450) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_5\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_5\", 450) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_5\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_5\", 450) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_5\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_5\", 370) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RADIUS, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RADIUS_5\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RADIUS_5\", 150) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", ALPHA, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_ALPHA_5\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_ALPHA_5\", 420) / 1000));\n                    }\n                    case \"CLOSE_FROM_FEED\" -> {// 6\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_6\", 950) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_6\", 378) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_6\", 950) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_6\", 378) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_6\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_6\", 405) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_6\", 950) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_6\", 333) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RADIUS, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RADIUS_6\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RADIUS_6\", 180) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", ALPHA, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_ALPHA_6\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_ALPHA_6\", 378) / 1000));\n                    }\n                    case \"APP_TO_APP\" -> {// 7\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_7\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_7\", 315) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_7\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_7\", 315) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_7\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_7\", 315) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_7\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_7\", 315) / 1000));\n                    }\n                    case \"START_FIRST_TASK\" -> {// 8\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERX, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERX_8\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERX_8\", 180) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_CENTERY, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_CENTERY_8\", 900) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_CENTERY_8\", 180) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_WIDTH, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_WIDTH_8\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_WIDTH_8\", 180) / 1000));\n                        callMethod(param.thisObject, \"setAnimParam\", RECT_RATIO, ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_damping_RECT_RATIO_8\", 990) / 1000), ((float) mPrefsMap.getInt(\"home_title_custom_anim_param_stiffness_RECT_RATIO_8\", 180) / 1000));\n                    }\n                    default -> {\n                    }\n                }\n                param.setResult(null);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/BigIconCorner.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectField\n\nobject BigIconCorner : BaseHook() {\n    override fun init() {\n        val maMlHostViewClass = loadClass(\"com.miui.home.launcher.maml.MaMlHostView\")\n\n        // if (!mPrefsMap.getBoolean(\"big_icon_corner\")) return\n        loadClass(\"com.miui.home.launcher.bigicon.BigIconUtil\").methodFinder().filter {\n            name == \"getCroppedFromCorner\" && parameterCount == 4\n        }.toList().createHooks {\n            before {\n                it.args[0] = 2\n                it.args[1] = 2\n            }\n        }\n\n        maMlHostViewClass.methodFinder().first {\n            name == \"getCornerRadius\"\n        }.createHook {\n            before {\n                it.result = it.thisObject.getObjectField(\"mEnforcedCornerRadius\") as Float\n            }\n        }\n\n        maMlHostViewClass.methodFinder().first {\n            name == \"computeRoundedCornerRadius\" && parameterCount == 1\n        }.createHook {\n            before {\n                it.result = it.thisObject.getObjectField(\"mEnforcedCornerRadius\") as Float\n            }\n        }\n\n        loadClass(\"com.miui.home.launcher.LauncherAppWidgetHostView\").methodFinder().first {\n            name == \"computeRoundedCornerRadius\" && parameterCount == 1\n        }.createHook {\n            before {\n                it.result = it.thisObject.getObjectField(\"mEnforcedCornerRadius\") as Float\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/DisableHideFile.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title\n\nimport android.content.ComponentName\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.IS_INTERNATIONAL_BUILD\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\n\nobject DisableHideFile : BaseHook() {\n    override fun init() {\n        if (IS_INTERNATIONAL_BUILD) return\n\n        XposedHelpers.findAndHookConstructor(\n            \"com.miui.home.launcher.AppFilter\",\n            lpparam.classLoader,\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val skippedItem = XposedHelpers.getObjectField(\n                        param.thisObject,\n                        \"mSkippedItems\"\n                    ) as HashSet<ComponentName>\n\n                    skippedItem.removeIf {\n                        it.packageName == \"com.google.android.documentsui\"\n                    }\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/DisableHideTheme.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.IS_TABLET\n\nobject DisableHideTheme: BaseHook() {\n    override fun init() {\n        if (!IS_TABLET) return\n\n        hookAllMethods(\"com.miui.home.launcher.DeviceConfig\", \"needHideThemeManager\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = false\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/DownloadAnimation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class DownloadAnimation extends BaseHook {\n    @Override\n    public void init() {\n        try{\n            hookAllMethods(\"com.miui.home.launcher.common.DeviceLevelUtils\", \"needMamlProgressIcon\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    param.setResult(true);\n                }\n            });\n            hookAllMethods(\"com.miui.home.launcher.common.DeviceLevelUtils\", \"needRemoveDownloadAnimationDevice\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    param.setResult(false);\n                }\n            });\n        } catch (Exception e) {\n            hookAllMethods(\"com.miui.home.launcher.common.CpuLevelUtils\", \"needMamlDownload\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    param.setResult(true);\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/EnableIconMonetColor.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title\n\nimport android.annotation.SuppressLint\nimport android.content.res.Resources\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.module.base.BaseXposedInit\nimport de.robv.android.xposed.callbacks.XC_InitPackageResources\n\nobject EnableIconMonetColor : BaseHook() {\n\n    override fun init() {}\n\n    @SuppressLint(\"DiscouragedApi\")\n    fun initResource(resParam: XC_InitPackageResources.InitPackageResourcesParam) {\n        val monet = \"system_accent1_100\"\n        val monoColorId = Resources.getSystem().getIdentifier(monet, \"color\", \"android\")\n        var monoColor = Resources.getSystem().getColor(monoColorId, null)\n        if (BaseXposedInit.mPrefsMap.getBoolean(\"home_other_use_edit_color\")) {\n            monoColor = mPrefsMap.getInt(\"home_other_your_color_qwq\", -1)\n        }\n        resParam.res.setReplacement(\n            \"com.miui.home\",\n            \"color\",\n            \"monochrome_default\",\n            monoColor\n        )\n//        val ColorEntriesId = Resources.getSystem().getStringArray()\n//        val ColorEntries = Resources.getSystem().getStringArray(ColorEntriesId)\n//        getInitPackageResourcesParam().res.setReplacement(\n//            \"com.miui.home\",\n//            \"string\",\n//            ColorEntries.toString(),\n//            \"Monet\"\n//        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/EnableIconMonoChrome.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableIconMonoChrome extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.graphics.MonochromeUtils\", \"isSupportMonochrome\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/FixAnimation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport android.view.MotionEvent;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\nimport kotlin.jvm.internal.Intrinsics;\n\n// from MIUI-EXTRA by Art-Chen\n\npublic class FixAnimation extends BaseHook {\n\n    private Object mAppToHomeAnim2Bak;\n\n    private final Runnable mRunnable = () -> {\n    };\n\n    public final Object getMAppToHomeAnim2Bak() {\n        return mAppToHomeAnim2Bak;\n    }\n\n    public final void setMAppToHomeAnim2Bak(Object obj) {\n        mAppToHomeAnim2Bak = obj;\n    }\n\n    public final Runnable getMRunnable() {\n        return mRunnable;\n    }\n\n    @Override\n    public void init() {\n\n        Intrinsics.checkNotNull(lpparam);\n\n        findAndHookMethod(\"com.miui.home.recents.NavStubView\", \"onInputConsumerEvent\", MotionEvent.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                Intrinsics.checkNotNullParameter(param, \"param\");\n                setMAppToHomeAnim2Bak(XposedHelpers.getObjectField(param.thisObject, \"mAppToHomeAnim2\"));\n                if (getMAppToHomeAnim2Bak() != null) {\n                    XposedHelpers.setObjectField(param.thisObject, \"mAppToHomeAnim2\", (Object) null);\n                }\n            }\n\n            @Override\n            protected void after(MethodHookParam param) {\n                Intrinsics.checkNotNullParameter(param, \"param\");\n                Object obj = param.args[0];\n                Intrinsics.checkNotNull(obj, \"null cannot be cast to non-null type android.view.MotionEvent\");\n                MotionEvent motionEvent = (MotionEvent) obj;\n                XposedLogUtils.logI(\"onInputConsumerEvent: Action: \" + motionEvent.getAction() + \", return \" + param.getResult() + \". x: \" + motionEvent.getX() + \" y: \" + motionEvent.getY());\n                if (XposedHelpers.getObjectField(param.thisObject, \"mAppToHomeAnim2\") != null || getMAppToHomeAnim2Bak() == null) {\n                    return;\n                }\n                XposedHelpers.setObjectField(param.thisObject, \"mAppToHomeAnim2\", getMAppToHomeAnim2Bak());\n            }\n\n        });\n\n        findAndHookMethod(\"com.miui.home.launcher.ItemIcon\", \"initPerformClickRunnable\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Intrinsics.checkNotNullParameter(param, \"param\");\n                param.setResult(getMRunnable());\n            }\n\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/HiddenAllTitle.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class HiddenAllTitle extends BaseHook {\n    @Override\n    public void init() {\n        /*用于隐藏应用名*/\n        findAndHookMethod(\"com.miui.home.launcher.ItemIcon\", \"setTitle\",\n            CharSequence.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(null);\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/IconScaleHook.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.Rect;\nimport android.text.Editable;\nimport android.text.TextWatcher;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class IconScaleHook extends BaseHook {\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(\"com.miui.home.launcher.ShortcutIcon\", lpparam.classLoader, \"restoreToInitState\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                ViewGroup mIconContainer = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, \"mIconContainer\");\n                if (mIconContainer == null || mIconContainer.getChildAt(0) == null) return;\n                float multx = (float) Math.sqrt(mPrefsMap.getInt(\"home_title_icon_scale\", 100) / 100f);\n                mIconContainer.getChildAt(0).setScaleX(multx);\n                mIconContainer.getChildAt(0).setScaleY(multx);\n            }\n        });\n\n        Helpers.findAndHookMethod(\"com.miui.home.launcher.ItemIcon\", lpparam.classLoader, \"onFinishInflate\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                float multx = (float) Math.sqrt(mPrefsMap.getInt(\"home_title_icon_scale\", 100) / 100f);\n\n                ViewGroup mIconContainer = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, \"mIconContainer\");\n                if (mIconContainer != null && mIconContainer.getChildAt(0) != null) {\n                    mIconContainer.getChildAt(0).setScaleX(multx);\n                    mIconContainer.getChildAt(0).setScaleY(multx);\n                    mIconContainer.setClipToPadding(false);\n                    mIconContainer.setClipChildren(false);\n                }\n\n                if (multx > 1) {\n                    final TextView mMessage = (TextView) XposedHelpers.getObjectField(param.thisObject, \"mMessage\");\n                    if (mMessage != null)\n                        mMessage.addTextChangedListener(new TextWatcher() {\n                            @Override\n                            public void beforeTextChanged(CharSequence s, int start, int count, int after) {\n                            }\n\n                            @Override\n                            public void onTextChanged(CharSequence s, int start, int before, int count) {\n                            }\n\n                            @Override\n                            @SuppressLint(\"DiscouragedApi\")\n                            public void afterTextChanged(Editable s) {\n                                int maxWidth = mMessage.getResources().getDimensionPixelSize(mMessage.getResources().getIdentifier(\"icon_message_max_width\", \"dimen\", lpparam.packageName));\n                                mMessage.measure(View.MeasureSpec.makeMeasureSpec(maxWidth, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(maxWidth, View.MeasureSpec.AT_MOST));\n                                mMessage.setTranslationX(-mMessage.getMeasuredWidth() * (multx - 1) / 2f);\n                                mMessage.setTranslationY(mMessage.getMeasuredHeight() * (multx - 1) / 2f);\n                            }\n                        });\n                }\n\n                XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mMessageAnimationOrig\", XposedHelpers.getObjectField(param.thisObject, \"mMessageAnimation\"));\n                XposedHelpers.setObjectField(param.thisObject, \"mMessageAnimation\", (Runnable) () -> {\n                    try {\n                        Runnable mMessageAnimationOrig = (Runnable) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mMessageAnimationOrig\");\n                        mMessageAnimationOrig.run();\n                        boolean mIsShowMessageAnimation = XposedHelpers.getBooleanField(param.thisObject, \"mIsShowMessageAnimation\");\n                        if (mIsShowMessageAnimation) {\n                            View mMessage = (View) XposedHelpers.getObjectField(param.thisObject, \"mMessage\");\n                            mMessage.animate().cancel();\n                            mMessage.animate().scaleX(multx).scaleY(multx).setStartDelay(0).start();\n                        }\n                    } catch (Throwable t) {\n                        XposedLogUtils.logI(String.valueOf(t));\n                    }\n                });\n\n//\t\t\t\tif (mult <= 1) return;\n//\t\t\t\tTextView mMessage = (TextView)XposedHelpers.getObjectField(param.thisObject, \"mMessage\");\n//\t\t\t\tif (mMessage != null) {\n//\t\t\t\t\tint width = mMessage.getResources().getDimensionPixelSize(mMessage.getResources().getIdentifier(\"icon_message_max_width\", \"dimen\", lpparam.packageName));\n//\t\t\t\t\tmMessage.setTranslationX(-width/2f * (1f - 1f / mult));\n//\t\t\t\t\tmMessage.setTranslationY(width/2f * (1f - 1f / mult));\n//\t\t\t\t}\n            }\n        });\n\n        Helpers.findAndHookMethod(\"com.miui.home.launcher.ItemIcon\", lpparam.classLoader, \"getIconLocation\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                float multx = (float) Math.sqrt(mPrefsMap.getInt(\"home_title_icon_scale\", 100) / 100f);\n                Rect rect = (Rect) param.getResult();\n                if (rect == null) return;\n                rect.right = rect.left + Math.round(rect.width() * multx);\n                rect.bottom = rect.top + Math.round(rect.height() * multx);\n                param.setResult(rect);\n            }\n        });\n\n        Helpers.findAndHookMethodSilently(\"com.miui.home.launcher.gadget.ClearButton\", lpparam.classLoader, \"onCreate\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                ViewGroup mIconContainer = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, \"mIconContainer\");\n                if (mIconContainer == null || mIconContainer.getChildAt(0) == null) return;\n                float multi = (float) Math.sqrt(mPrefsMap.getInt(\"home_title_icon_scale\", 100) / 100f);\n                mIconContainer.getChildAt(0).setScaleX(multi);\n                mIconContainer.getChildAt(0).setScaleY(multi);\n            }\n        });\n\n//\t\tHelpers.findAndHookMethod(\"com.miui.home.launcher.Folder\", lpparam.classLoader, \"onOpen\", boolean.class, new MethodHook() {\n//\t\t\t@Override\n//\t\t\tprotected void after(final MethodHookParam param) throws Throwable {\n//\t\t\t\tXposedHelpers.setFloatField(param.thisObject, \"mItemIconToPreviewIconScale\", -1.0f);\n//\t\t\t}\n//\t\t});\n//\n//\t\tHelpers.findAndHookMethod(\"com.miui.home.launcher.Folder\", lpparam.classLoader, \"changeItemsInFolderDuringOpenAndCloseAnimation\", float.class, new MethodHook() {\n//\t\t\t@Override\n//\t\t\tprotected void after(final MethodHookParam param) throws Throwable {\n//\t\t\t\tfloat multx = (float)Math.sqrt(MainModule.mPrefs.getInt(\"launcher_icon_scale\", 100) / 100f);\n//\t\t\t\tViewGroup mContent = (ViewGroup)XposedHelpers.getObjectField(param.thisObject, \"mContent\");\n//\t\t\t\tfor (int i = 0; i < mContent.getChildCount(); i++) {\n//\t\t\t\t\tString cls = mContent.getChildAt(i).getClass().getSimpleName();\n//\t\t\t\t\tif (\"ItemIcon\".equals(cls) || \"ShortcutIcon\".equals(cls) || \"FolderIcon\".equals(cls)) {\n//\t\t\t\t\t\tView iconContainer = (View)XposedHelpers.callMethod(mContent.getChildAt(i), \"getIconContainer\");\n//\t\t\t\t\t\tfloat mult = (float)param.args[0] * multx;\n//\t\t\t\t\t\ticonContainer.setScaleX(mult);\n//\t\t\t\t\t\ticonContainer.setScaleY(mult);\n//\t\t\t\t\t}\n//\t\t\t\t}\n//\t\t\t}\n//\t\t});\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/IconTitleColor.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.Log\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.findClass\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\n\nobject IconTitleColor : BaseHook() {\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n\n        val value = mPrefsMap.getInt(\"home_title_title_color\", -1)\n        val launcherClass = \"com.miui.home.launcher.Launcher\".findClass()\n        val shortcutInfoClass = \"com.miui.home.launcher.ShortcutInfo\".findClass()\n        if (value == -1) return\n        try {\n            \"com.miui.home.launcher.ItemIcon\".hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mTitle = it.thisObject.getObjectField(\"mTitle\") as TextView\n                mTitle.setTextColor(value)\n            }\n            \"com.miui.home.launcher.maml.MaMlWidgetView\".hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mTitle = it.thisObject.getObjectField(\"mTitleTextView\") as TextView\n                mTitle.setTextColor(value)\n            }\n            \"com.miui.home.launcher.LauncherMtzGadgetView\".hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mTitle = it.thisObject.getObjectField(\"mTitleTextView\") as TextView\n                mTitle.setTextColor(value)\n            }\n            \"com.miui.home.launcher.LauncherWidgetView\".hookAfterMethod(\n                \"onFinishInflate\"\n            ) {\n                val mTitle = it.thisObject.getObjectField(\"mTitleTextView\") as TextView\n                mTitle.setTextColor(value)\n            }\n            \"com.miui.home.launcher.ShortcutIcon\".hookAfterMethod(\n                \"fromXml\", Int::class.javaPrimitiveType, launcherClass, ViewGroup::class.java, shortcutInfoClass\n            ) {\n                val buddyIconView = it.args[3].callMethod(\"getBuddyIconView\", it.args[2]) as View\n                val mTitle = buddyIconView.getObjectField(\"mTitle\") as TextView\n                mTitle.setTextColor(value)\n            }\n            \"com.miui.home.launcher.ShortcutIcon\".hookAfterMethod(\n                \"createShortcutIcon\", Int::class.javaPrimitiveType, launcherClass, ViewGroup::class.java\n            ) {\n                val buddyIcon = it.result as View\n                val mTitle = buddyIcon.getObjectField(\"mTitle\") as TextView\n                mTitle.setTextColor(value)\n            }\n            \"com.miui.home.launcher.common.Utilities\".hookAfterMethod(\n                \"adaptTitleStyleToWallpaper\",\n                Context::class.java,\n                TextView::class.java,\n                Int::class.javaPrimitiveType,\n                Int::class.javaPrimitiveType\n            ) {\n                val mTitle = it.args[1] as TextView\n                if (mTitle.id == mTitle.resources.getIdentifier(\"icon_title\", \"id\", \"com.miui.home\")) {\n                    mTitle.setTextColor(value)\n                }\n            }\n        } catch (e: Throwable) {\n            Log.ex(e)\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/LargeIconCornerRadius.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.PorterDuff;\nimport android.graphics.PorterDuffXfermode;\nimport android.graphics.Rect;\nimport android.graphics.RectF;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\npublic class LargeIconCornerRadius extends BaseHook {\n\n    Class<?> mBigIconUtil;\n\n    @Override\n    public void init() {\n\n        mBigIconUtil = findClassIfExists(\"com.miui.home.launcher.bigicon.BigIconUtil\");\n\n        hookAllMethods(mBigIconUtil, \"getCroppedFromCorner\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Context context = (Context) param.args[3];\n                Bitmap bitmap = (Bitmap) param.args[2];\n                Drawable drawable = new BitmapDrawable(context.getResources(),\n                    croppedCorners(bitmap,\n                        DisplayUtils.dip2px(context,\n                            mPrefsMap.getInt(\"home_large_icon_corner_radius\", 32))));\n                param.setResult(drawable);\n            }\n        });\n    }\n\n\n    public final Bitmap croppedCorners(Bitmap bitmap, float radius) {\n        try {\n            int width = bitmap.getWidth();\n            int height = bitmap.getHeight();\n            Paint mCornerPaint = new Paint();\n            mCornerPaint.setAntiAlias(true);\n            mCornerPaint.setColor(-16777216);\n            Bitmap createBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);\n            Canvas canvas = new Canvas(createBitmap);\n            canvas.drawARGB(0, 0, 0, 0);\n            mCornerPaint.setXfermode(null);\n            RectF rectF = new RectF(0.0f, 0.0f, width, height);\n            canvas.drawRoundRect(rectF, radius, radius, mCornerPaint);\n            mCornerPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));\n            Rect rect = new Rect(0, 0, width, height);\n            canvas.drawBitmap(bitmap, rect, rect, mCornerPaint);\n            bitmap.recycle();\n            return createBitmap;\n        } catch (Exception unused) {\n            return bitmap;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/NewInstallIndicator.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class NewInstallIndicator extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.TitleTextView\",\n            \"updateNewInstallIndicator\",\n            boolean.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(null);\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/PerfectIcon.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport android.content.pm.LauncherActivityInfo;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class PerfectIcon extends BaseHook {\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.library.compat.LauncherActivityInfoCompat\", \"getIconResource\", LauncherActivityInfo.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(0);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/TitleFontSize.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport android.annotation.SuppressLint;\nimport android.util.TypedValue;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class TitleFontSize extends BaseHook {\n\n    @Override\n    public void init() {\n        hookAllMethods(\"com.miui.home.launcher.common.Utilities\", \"adaptTitleStyleToWallpaper\",\n            new MethodHook() {\n                @SuppressLint(\"DiscouragedApi\")\n                @Override\n                protected void after(MethodHookParam param) {\n                    TextView mTitle = (TextView) param.args[1];\n                    if (mTitle != null && mTitle.getId() == mTitle.getResources().getIdentifier(\"icon_title\", \"id\", \"com.miui.home\")) {\n                        mTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, mPrefsMap.getInt(\"home_title_font_size\", 12));\n                    }\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/title/TitleMarquee.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.title;\n\nimport android.text.TextUtils;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class TitleMarquee extends BaseHook {\n\n    @Override\n    public void init() {\n        Class<?> mItemIcon = findClassIfExists(\"com.miui.home.launcher.ItemIcon\");\n\n        findAndHookMethod(mItemIcon, \"onFinishInflate\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                TextView mTitle = (TextView) XposedHelpers.getObjectField(param.thisObject, \"mTitle\");\n\n                mTitle.setEllipsize(TextUtils.TruncateAt.MARQUEE);\n                mTitle.setHorizontalFadingEdgeEnabled(true);\n                mTitle.setSingleLine();\n                mTitle.setMarqueeRepeatLimit(-1);\n                mTitle.setSelected(true);\n                mTitle.setHorizontallyScrolling(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/widget/AllWidgetAnimation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.widget;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class AllWidgetAnimation extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.home.launcher.LauncherWidgetView\", \"isUseTransitionAnimation\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.miui.home.launcher.maml.MaMlWidgetView\", \"isUseTransitionAnimation\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/widget/AllowMoveAllWidgetToMinus.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.widget\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.getObjectFieldOrNull\n\nobject AllowMoveAllWidgetToMinus : BaseHook() {\n    override fun init() {\n\n        // if (!mPrefsMap.getBoolean(\"home_widget_to_minus\")) return\n        try {\n            loadClass(\"com.miui.home.launcher.widget.MIUIWidgetHelper\").methodFinder().first {\n                name == \"canDragToPa\" && parameterCount == 2\n            }.createHook {\n                before {\n                    val dragInfo = it.args[1].callMethod(\"getDragInfo\")\n                    val i = dragInfo?.getObjectField(\"spanX\")\n                    val launcherCallbacks = it.args[0].callMethod(\"getLauncherCallbacks\")\n                    val dragController = it.args[0].callMethod(\"getDragController\")\n                    val isDraggingFromAssistant =\n                        dragController?.callMethod(\"isDraggingFromAssistant\") as Boolean\n                    val isDraggingToAssistant =\n                        dragController.callMethod(\"isDraggingToAssistant\") as Boolean\n                    it.result =\n                        launcherCallbacks != null && !isDraggingFromAssistant && !isDraggingToAssistant && i != 1\n                }\n            }\n        } catch (e: Exception) {\n            loadClass(\"com.miui.home.launcher.Workspace\").methodFinder().first {\n                name == \"canDragToPa\"\n            }.createHook {\n                before {\n                    val currentDragObject = it.thisObject.getObjectFieldOrNull(\"mDragController\")\n                        ?.callMethod(\"getCurrentDragObject\")\n                    val dragInfo = currentDragObject?.callMethod(\"getDragInfo\")\n                    val i = dragInfo?.getObjectField(\"spanX\")\n                    val launcherCallbacks = it.thisObject.getObjectFieldOrNull(\"mLauncher\")\n                        ?.callMethod(\"getLauncherCallbacks\")\n                    val isDraggingFromAssistant =\n                        it.thisObject.getObjectFieldOrNull(\"mDragController\")\n                            ?.callMethod(\"isDraggingFromAssistant\") as Boolean\n                    val isDraggingToAssistant =\n                        it.thisObject.getObjectFieldOrNull(\"mDragController\")\n                            ?.callMethod(\"isDraggingToAssistant\") as Boolean\n\n                    it.result =\n                        launcherCallbacks != null && !isDraggingFromAssistant && !isDraggingToAssistant && i != 1\n                }\n            }\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/widget/AlwaysShowMiuiWidget.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.widget\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.setObjectField\nimport de.robv.android.xposed.XC_MethodHook\n\nobject AlwaysShowMiuiWidget : BaseHook() {\n    override fun init() {\n        var hook1: XC_MethodHook.Unhook? = null\n        var hook2: XC_MethodHook.Unhook? = null\n        try {\n            loadClass(\"com.miui.home.launcher.widget.WidgetsVerticalAdapter\").methodFinder().first {\n                name == \"buildAppWidgetsItems\"\n            }\n        } catch (e: Exception) {\n            loadClass(\"com.miui.home.launcher.widget.BaseWidgetsVerticalAdapter\").methodFinder().first {\n                name == \"buildAppWidgetsItems\"\n            }\n        }.createHook {\n            before {\n                hook1 = loadClass(\"com.miui.home.launcher.widget.MIUIAppWidgetInfo\").methodFinder()\n                    .first {\n                        name == \"initMiuiAttribute\" && parameterCount == 1\n                    }.createHook {\n                        after {\n                            it.thisObject.setObjectField(\"isMIUIWidget\", false)\n                        }\n                    }\n                hook2 = loadClass(\"com.miui.home.launcher.MIUIWidgetUtil\").methodFinder().first {\n                    name == \"isMIUIWidgetSupport\"\n                }.createHook {\n                    after {\n                        it.result = false\n                    }\n                }\n            }\n            after {\n                hook1?.unhook()\n                hook2?.unhook()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/widget/HideWidgetTitles.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.widget\n\nimport android.view.View\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\nimport java.util.function.Predicate\n\nobject HideWidgetTitles : BaseHook() {\n    override fun init() {\n\n        val maMlWidgetInfo = loadClass(\"com.miui.home.launcher.maml.MaMlWidgetInfo\")\n        loadClass(\"com.miui.home.launcher.LauncherAppWidgetHost\").methodFinder().first {\n            name == \"createLauncherWidgetView\" && parameterCount == 4\n        }.createHook {\n            after {\n                val view = it.result as Any\n                view.callMethod(\"getTitleView\")?.callMethod(\"setVisibility\", View.GONE)\n            }\n        }\n\n        \"com.miui.home.launcher.Launcher\".hookAfterMethod(\n            \"addMaMl\", maMlWidgetInfo, Boolean::class.java, Predicate::class.java\n        ) {\n            val view = it.result as Any\n            view.callMethod(\"getTitleView\")?.callMethod(\"setVisibility\", View.GONE)\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/home/widget/ResizableWidgets.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.home.widget\n\nimport android.appwidget.AppWidgetProviderInfo\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\n\n\nobject ResizableWidgets : BaseHook() {\n    override fun init() {\n        Helpers.hookAllMethods(\n            \"android.appwidget.AppWidgetHostView\",\n            null,\n            \"getAppWidgetInfo\",\n            object : MethodHook() {\n                @Throws(Throwable::class)\n                override fun after(param: MethodHookParam) {\n                    val widgetInfo = param.result as AppWidgetProviderInfo\n                    widgetInfo.resizeMode =\n                        AppWidgetProviderInfo.RESIZE_VERTICAL or AppWidgetProviderInfo.RESIZE_HORIZONTAL\n                    widgetInfo.minHeight = 0\n                    widgetInfo.minWidth = 0\n                    widgetInfo.minResizeHeight = 0\n                    widgetInfo.minResizeWidth = 0\n                    param.result = widgetInfo\n                }\n            })\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/incallui/AnswerInHeadUp.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.incallui;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport miui.process.ForegroundInfo;\nimport miui.process.ProcessManager;\n\npublic class AnswerInHeadUp extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.incallui.InCallPresenter\", \"answerIncomingCall\", Context.class, String.class, int.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                boolean showUi = (boolean) param.args[3];\n                if (showUi) {\n                    ForegroundInfo foregroundInfo = ProcessManager.getForegroundInfo();\n                    if (foregroundInfo != null) {\n                        String topPackage = foregroundInfo.mForegroundPackageName;\n                        /*if (!\"com.miui.home\".equals(topPackage)) {\n                            param.args[3] = false;\n                        }*/\n                    }\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/incallui/HideCrbt.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.incallui;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class HideCrbt extends BaseHook {\n    Class<?> loadClass;\n\n    public void init() {\n        loadClass = findClassIfExists(\"com.android.incallui.Call\");\n        try {\n            hookAllMethods(loadClass, \"getVideoCall\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    param.setResult(null);\n                }\n            });\n            findAndHookMethod(loadClass, \"setPlayingVideoCrbt\", int.class, boolean.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    param.args[0] = 0;\n                    param.args[1] = Boolean.FALSE;\n                }\n            });\n            /*hookAllMethods(loadClass, \"setPlayingVideoCrbt\", new MethodHook(){\n                    Integer.TYPE, Boolean.TYPE, beforeHookedMethod()\n            });*/\n        } catch (Exception e) {\n            XposedLogUtils.logI(\"method hooked failed! \" + e);\n        }\n    }\n    /*public final void beforeHookedMethod(XC_MethodHook.MethodHookParam methodHookParam) {\n        HideCrbt.super.before(methodHookParam);\n        methodHookParam.args[0]=0;\n        methodHookParam.args[1]=Boolean.FALSE;\n    }*/\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/joyose/DisableCloudControl.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.joyose;\n\n/*import static com.sevtinge.cemiuiler.module.hook.joyose.JoyoseDexKit.mJoyoseResultMethodsMap;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.lang.reflect.Method;\nimport java.util.List;\nimport java.util.Objects;\n\nimport io.luckypray.dexkit.descriptor.member.DexMethodDescriptor;\n\npublic class DisableCloudControl extends BaseHook {\n\n    // Class<?> mCloud;\n\n    Method cloudControl;\n\n    @Override\n    public void init() {\n        try {\n            List<DexMethodDescriptor> result = Objects.requireNonNull(JoyoseDexKit.mJoyoseResultMethodsMap.get(\"CloudControl\"));\n            for (DexMethodDescriptor descriptor : result) {\n                cloudControl = descriptor.getMethodInstance(lpparam.classLoader);\n                if (cloudControl.getReturnType() == void.class) {\n                    hookMethod(cloudControl, new MethodHook() {\n                        @Override\n                        protected void before(MethodHookParam param) {\n                            param.setResult(null);// 2\n                        }\n                    });\n                }\n            }\n        } catch (Throwable e) {\n            e.printStackTrace();\n        }\n\n        *//*hookMethod(cloudControl, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(null);//2\n            }\n        });*//*\n\n        // mCloud = findClassIfExists(\"com.xiaomi.joyose.cloud.g$a\");\n\n    }\n}*/\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/joyose/DisableCloudControl.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.joyose\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject DisableCloudControl : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"job exist, sync local...\")\n                returnType = \"void\"\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(null)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/joyose/EnableGpuTuner.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.joyose;\n\n/*import static com.sevtinge.cemiuiler.module.hook.joyose.JoyoseDexKit.mJoyoseResultMethodsMap;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.lang.reflect.Method;\nimport java.util.List;\nimport java.util.Objects;\n\nimport io.luckypray.dexkit.descriptor.member.DexMethodDescriptor;\n\npublic class EnableGpuTuner extends BaseHook {\n\n    // Class<?> mCloud;\n\n    Method gpuTuner;\n\n    @Override\n    public void init() {\n        try {\n            List<DexMethodDescriptor> result = Objects.requireNonNull(JoyoseDexKit.mJoyoseResultMethodsMap.get(\"GpuTuner\"));\n            for (DexMethodDescriptor descriptor : result) {\n                gpuTuner = descriptor.getMethodInstance(lpparam.classLoader);\n                if (gpuTuner.getReturnType() == boolean.class) {\n                    hookMethod(gpuTuner, new MethodHook() {\n                        @Override\n                        protected void before(MethodHookParam param) {\n                            param.setResult(true);// 2\n                        }\n                    });\n                }\n            }\n        } catch (Throwable e) {\n            e.printStackTrace();\n        }\n\n        *//*hookMethod(cloudControl, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(null);//2\n            }\n        });*//*\n\n        // mCloud = findClassIfExists(\"com.xiaomi.joyose.cloud.g$a\");\n\n    }\n}*/\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/joyose/EnableGpuTuner.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.joyose\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\n\nobject EnableGpuTuner : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"GPUTUNER_SWITCH\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/lbe/DisableClipboardTip.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.lbe\n\nimport android.content.Context\nimport android.content.pm.ApplicationInfo\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport android.widget.Toast\nimport com.sevtinge.cemiuiler.R\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\nimport de.robv.android.xposed.callbacks.XC_LoadPackage\n\n\nobject DisableClipboardTip : BaseHook() {\n    override fun init() {\n        if (!lpparam.packageName.equals(\"com.lbe.security.miui\")) return\n\n        val permissionRequestClass =\n            XposedHelpers.findClass(\"com.lbe.security.sdk.PermissionRequest\", lpparam.classLoader)\n\n        val mDisableClipboardTip = mPrefsMap.getBoolean(\"lbe_disable_clipboard_tip\")\n\n        XposedHelpers.findAndHookMethod(\n            \"com.lbe.security.ui.SecurityPromptHandler\",\n            lpparam.classLoader,\n            \"handleNewRequest\",\n            permissionRequestClass,\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val permissionRequest = param.args[0]\n                    val permission: Long =\n                        XposedHelpers.callMethod(permissionRequest, \"getPermission\") as Long\n\n                    // PermissionManager.PERM_ID_READ_CLIPBOARD\n                    if (permission == 274877906944L) {\n                        val packageName =\n                            XposedHelpers.callMethod(permissionRequest, \"getPackage\") as String\n                        val context =\n                            XposedHelpers.getObjectField(param.thisObject, \"mContext\") as Context\n                        val appName = getAppName(context, packageName)\n                        val modRes = Helpers.getModuleRes(context)\n\n                        if (!mDisableClipboardTip) {\n                            Toast.makeText(context, \"$appName ${modRes.getString(R.string.lbe_clipboard_tip)}\", Toast.LENGTH_SHORT).show()\n                        }\n                        hideDialog(lpparam, packageName, param)\n\n                        XposedLogUtils.logI(\" $packageName -> $appName read clipboard.\")\n                    }\n                }\n            })\n    }\n\n    fun getAppName(context: Context, packageName: String): String {\n        val pm: PackageManager = context.applicationContext.packageManager\n        val ai: ApplicationInfo =\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                pm.getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of(0))\n            } else {\n                pm.getApplicationInfo(packageName, 0)\n            }\n        return (pm.getApplicationLabel(ai)) as String\n    }\n\n    fun hideDialog(\n        lpparam: XC_LoadPackage.LoadPackageParam,\n        packageName: String,\n        param: XC_MethodHook.MethodHookParam\n    ) {\n        val clipData = XposedHelpers.findClass(\n            \"com.lbe.security.utility.AnalyticsHelper\",\n            lpparam.classLoader\n        )\n        val hashMap = HashMap<String, String>()\n        hashMap[\"pkgName\"] = packageName\n        hashMap[\"count\"] = \"click\"\n        XposedHelpers.callStaticMethod(\n            clipData,\n            \"recordCountEvent\",\n            \"clip\",\n            \"ask_allow\",\n            hashMap\n        )\n\n        XposedHelpers.callMethod(param.thisObject, \"gotChoice\", 3, true, true)\n        XposedHelpers.callMethod(param.thisObject, \"onStop\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/market/DeviceModify.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.market;\n\nimport android.os.Build;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DeviceModify extends BaseHook {\n\n    String mDevice;\n    String mModel;\n    String mManufacturer;\n\n    @Override\n    public void init() {\n        if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 101) {\n            // 13u\n            mDevice = \"ishtar\";\n            mModel = \"2304FPN6DC\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 102) {\n            // 14p\n            mDevice = \"shennong\";\n            mModel = \"23116PN5BC\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 103) {\n            // 14\n            mDevice = \"houji\";\n            mModel = \"23127PN0CC\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 153) {\n            // civi3\n            mDevice = \"yuechu\";\n            mModel = \"23046PNC9C\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 223) {\n            // f3\n            mDevice = \"babylon\";\n            mModel = \"2308CPXD0C\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 190) {\n            // alpha\n            mDevice = \"avenger\";\n            mModel = \"MIX Alpha\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 191) {\n            // alpha\n            mDevice = \"draco\";\n            mModel = \"MIX Alpha\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 208) {\n            // pad6m\n            mDevice = \"yudi\";\n            mModel = \"2307BRPDCC\";\n            mManufacturer = \"Xiaomi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 307) {\n            // k60u\n            mDevice = \"corot\";\n            mModel = \"23078RKD5C\";\n            mManufacturer = \"Redmi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 309) {\n            // k70p\n            mDevice = \"manet\";\n            mModel = \"23117RK66C\";\n            mManufacturer = \"Redmi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 351) {\n            // k70e\n            mDevice = \"duchamp\";\n            mModel = \"23113RKC6C\";\n            mManufacturer = \"Redmi\";\n        } else if (mPrefsMap.getStringAsInt(\"market_device_modify_new\", 0) == 334) {\n            // n13pp\n            mDevice = \"zircon\";\n            mModel = \"23090RA98C\";\n            mManufacturer = \"Redmi\";\n        }\n        findAndHookConstructor(\"com.xiaomi.market.MarketApp\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                XposedHelpers.setStaticObjectField(Build.class, \"DEVICE\", mDevice);\n                XposedHelpers.setStaticObjectField(Build.class, \"MODEL\", mModel);\n                XposedHelpers.setStaticObjectField(Build.class, \"MANUFACTURER\", mManufacturer);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/market/NewIcon.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.market;\n\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.lang.reflect.Method;\nimport java.util.List;\nimport java.util.Objects;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedBridge;\n\n\npublic class NewIcon extends BaseHook {\n    static Method isDesktopSupportOperationIcon;\n\n    @Override\n    public void init() {\n       /* try {\n            List<DexMethodDescriptor> result = Objects.requireNonNull(MarketDexKit.mMarketResultMethodsMap.get(\"DesktopSupportOperationIcon\"));\n            for (DexMethodDescriptor descriptor : result) {\n                isDesktopSupportOperationIcon = descriptor.getMethodInstance(lpparam.classLoader);\n                XposedLogUtils.logI(\"isDesktopSupportOperationIcon method is \" + isDesktopSupportOperationIcon);\n                if (isDesktopSupportOperationIcon.getReturnType() == boolean.class) {\n                    XposedBridge.hookMethod(isDesktopSupportOperationIcon, XC_MethodReplacement.returnConstant(false));\n                }\n            }\n        } catch (Throwable e) {\n            e.printStackTrace();\n        }\n        hookAllMethods(\"com.xiaomi.market.util.FileUtils\", \"ensureExternalIconDir\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(false);\n            }\n        });*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mediaeditor/FilterManagerAll.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.mediaeditor\n\nimport android.os.Build\nimport com.github.kyuubiran.ezxhelper.ClassLoaderProvider.safeClassLoader\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.ClassUtils.setStaticObject\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.api.LazyClass.AndroidBuildCls\nimport org.luckypray.dexkit.query.enums.StringMatchType\n\n\nobject FilterManagerAll : BaseHook() {\n    private lateinit var device: String\n    private val methodResult by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"wayne\")\n            }\n        }.filter { it.isMethod }.map { it.getMethodInstance(safeClassLoader) }.toTypedArray().firstOrNull()\n    }\n\n    override fun init() {\n        /*val result = mMediaEditorResultMethodsMap[\"FilterManager\"]!!\n        val methodResult = result\n        MethodFinder.fromArray(methodResult).first {\n            returnType == List::class.java || (parameterCount == 1 && parameterTypes[0] == Bundle::class.java)\n        }*/\n        methodResult?.createHook {\n            before {\n                if (!this@FilterManagerAll::device.isInitialized) {\n                    device = Build.DEVICE\n                }\n                setStaticObject(AndroidBuildCls, \"DEVICE\", \"wayne\")\n            }\n            after {\n                setStaticObject(AndroidBuildCls, \"DEVICE\", device)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mediaeditor/UnlockMinimumCropLimitNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.mediaeditor\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport java.lang.reflect.Modifier\n\nobject UnlockMinimumCropLimitNew : BaseHook() {\n    private val mScreenCropViewMethodToNew by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                declaredClass {\n                    addUsingStringsEquals(\"not in bound\")\n                }\n                usingNumbers(0.5f, 200)\n                returnType = \"int\"\n                modifiers = Modifier.FINAL\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.toList()\n    }\n\n    private val mScreenCropViewMethodToOld by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                declaredClass {\n                    addUsingStringsEquals(\"fixImageBounds %f,%f\")\n                }\n                usingNumbers(0.5f, 200)\n                returnType = \"int\"\n                modifiers = Modifier.FINAL\n            }\n        }.firstOrNull()?.getMethodInstance(EzXHelper.safeClassLoader)\n    }\n\n    override fun init() {\n        mScreenCropViewMethodToNew.createHooks {\n            returnConstant(0)\n        }\n        if (mScreenCropViewMethodToOld != null) {\n            mScreenCropViewMethodToOld!!.createHook {\n                returnConstant(0)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/milink/UnlockMiShare.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.milink;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class UnlockMiShare extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.miui.circulate.world.auth.AuthUtil\", \"doPermissionCheck\", new MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) {\n                param.setResult(null);\n            }\n        });\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mirror/UnlockMiuiPlus.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.mirror;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class UnlockMiuiPlus extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.xiaomi.mirror.utils.SystemUtils\", \"isModelSupport\", Context.class, new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/misettings/CustomRefreshRate.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.misettings\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.isFinal\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.isStatic\nimport com.github.kyuubiran.ezxhelper.finders.FieldFinder.`-Static`.fieldFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport org.luckypray.dexkit.query.enums.StringMatchType\n\nobject CustomRefreshRate : BaseHook() {\n    private val resultMethod by lazy {\n        dexKitBridge.findMethod {\n           matcher {\n               addUsingStringsEquals(\"btn_preferce_category\")\n           }\n        }\n    }\n    override fun init() {\n        /*val result1 = MiSettingsDexKit.mMiSettingsResultMethodsMap!![\"category\"]\n        val result2 = MiSettingsDexKit.mMiSettingsResultClassMap!![\"refresh\"]*/\n        val resultClass = loadClass(\"com.xiaomi.misettings.display.RefreshRate.RefreshRateActivity\")\n\n        resultMethod.first().getMethodInstance(EzXHelper.classLoader).createHook {\n            before {\n                it.args[0] = true\n            }\n        }\n\n        /*resultClass.map {\n            it.getClassInstance(EzXHelper.classLoader).fieldFinder()\n                .toList().forEach { field ->\n                    if (field.isFinal && field.isStatic) {\n                        field.isAccessible = true\n                        field.set(null, true)\n                    }\n                }\n        }*/\n        resultClass.declaredFields.first { field ->\n            field.isFinal && field.isStatic\n        }.apply { isAccessible = true }.set(null, true)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/misettings/ShowMoreFpsList.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.misettings\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject ShowMoreFpsList : BaseHook() {\n    override fun init() {\n        loadClass(\"miui.util.FeatureParser\").methodFinder().first {\n            name == \"getIntArray\"\n        }.createHook {\n            before {\n                if (it.args[0] == \"fpsList\") {\n                    it.result = intArrayOf(144, 120, 90, 60, 30)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mishare/NoAutoTurnOff.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.mishare\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper.classLoader\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.api.BlurDraw.getValueByFields\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XposedHelpers\nimport java.lang.reflect.Modifier\n\nobject NoAutoTurnOff : BaseHook() {\n    private val nullMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"EnabledState\", \"mishare_enabled\")\n            }\n        }.map { it.getMethodInstance(classLoader) }.toList()\n    }\n\n    private val null2Method by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                declaredClass {\n                    addUsingStringsEquals(\"mishare:advertise_lock\", \"power\")\n                }\n                paramCount = 2\n                modifiers = Modifier.STATIC\n            }\n        }.map { it.getMethodInstance(classLoader) }.toList()\n    }\n\n    private val null3Method by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"com.miui.mishare.action.GRANT_NFC_TOUCH_PERMISSION\")\n                usingNumbers(600000L)\n                modifiers = Modifier.PRIVATE\n            }\n        }.map { it.getMethodInstance(classLoader) }.toList()\n    }\n\n    private val toastMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                declaredClass {\n                    addUsingStringsEquals(\"null context\", \"cta_agree\")\n                }\n                returnType = \"boolean\"\n                paramTypes = listOf(\"android.content.Context\", \"java.lang.String\")\n                paramCount = 2\n            }\n        }.map { it.getMethodInstance(classLoader) }.toList()\n    }\n\n    override fun init() {\n        val nullClass = dexKitBridge.findClass {\n            matcher {\n                addUsingStringsEquals(\"NfcShareTaskManager\", \"task out of limit type \")\n            }\n        }.map { it.getInstance(classLoader) }.first()\n\n        val nullField = dexKitBridge.findField {\n            matcher {\n                declaredClass(nullClass)\n                modifiers = Modifier.STATIC\n            }\n        }.map { it.getFieldInstance(classLoader) }.first()\n\n        // 禁用小米互传功能自动关闭部分\n        nullMethod.createHooks {\n            before {\n                it.result = null\n            }\n        }\n\n        try {\n            null2Method.createHooks {\n                before {\n                    it.result = null\n                }\n            }\n        } catch (_: Throwable) {\n        }\n\n        try {\n            null3Method.createHooks {\n                after {\n                    val fieldNames = ('a'..'z').map { name -> name.toString() }\n                    val getField = getValueByFields(it.thisObject, fieldNames) ?: return@after\n                    XposedHelpers.callMethod(getField, \"removeCallbacks\", it.thisObject)\n                    XposedLogUtils.logI(\"null3Method hook success, $getField\")\n                }\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, \"null3Method hook failed\", t)\n        }\n\n        try {\n            XposedLogUtils.logI(\"$nullField\")\n            XposedHelpers.setStaticIntField(nullClass, nullField.name, 999999999)\n            XposedLogUtils.logI(TAG, \"nullField hook success.\")\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, \"nullField hook failed\", t)\n        }\n\n\n        // 干掉小米互传十分钟倒计时 Toast\n        toastMethod.createHooks {\n            before { param ->\n                if (param.args[1].equals(\"security_agree\")) {\n                    param.result = false\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mishare/UnlockTurboMode.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.mishare\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockTurboMode : BaseHook() {\n    private val turboModeMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"DeviceUtil\", \"xiaomi.hardware.p2p_160m\")\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.first()\n    }\n\n    override fun init() {\n        turboModeMethod.createHook {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/miwallpaper/UnlockSuperWallpaper.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.miwallpaper;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class UnlockSuperWallpaper extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.miui.superwallpaper.SuperWallpaperUtils\", \"initEnableSuperWallpaper\", Context.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        XposedHelpers.setStaticBooleanField(findClassIfExists(\"com.miui.superwallpaper.SuperWallpaperUtils\"), \"sEnableSuperWallpaper\", true);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mms/DisableAd.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.mms\n\nimport android.content.Context\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject DisableAd : BaseHook() {\n    override fun init() {\n        try {\n            dexKitBridge.findClass {\n                matcher {\n                    addUsingStringsEquals(\"Unknown type of the message: \")\n                }\n            }.firstOrNull()?.getInstance(EzXHelper.classLoader)?.methodFinder()?.first {\n                name == \"j\"\n            }?.createHook {\n                returnConstant(false)\n            }\n            /*val result: List<DexClassDescriptor> = Objects.requireNonNull<List<DexClassDescriptor>>(\n                MmsDexKit.mMmsResultClassMap[\"DisableAd\"]\n            )\n            for (descriptor in result) {\n                val enableAds: Class<*> = descriptor.getClassInstance(lpparam.classLoader)\n                log(\"EnableAds class is $enableAds\")\n                findAndHookMethod(enableAds, \"j\", object : MethodHook() {\n                    @Throws(Throwable::class)\n                    override fun before(param: MethodHookParam) {\n                        param.setResult(false)\n                    }\n                })\n            }*/\n        } catch (e: Throwable) {\n           XposedLogUtils.logE(TAG, e)\n        }\n        findAndHookMethod(\"com.miui.smsextra.ui.BottomMenu\", \"allowMenuMode\",\n            Context::class.java, object : MethodHook() {\n                @Throws(Throwable::class)\n                override fun before(param: MethodHookParam) {\n                    param.setResult(false)\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mtb/BypassAuthentication.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.mtb\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.setObjectField\n\nobject BypassAuthentication : BaseHook() {\n    override fun init() {\n        val mModemTestBoxClass = loadClass(\"com.xiaomi.mtb.activity.ModemTestBoxMainActivity\")\n\n        runCatching {\n            loadClass(\"com.xiaomi.mtb.MtbApp\").methodFinder().first {\n                name == \"setMiServerPermissionClass\"\n            }.createHook {\n                before {\n                    it.args[0] = 0\n                }\n            }\n        }\n\n        runCatching {\n            mModemTestBoxClass.methodFinder().first {\n                name == \"updateClass\"\n            }.createHook {\n                before {\n                    it.args[0] = 0\n                    it.thisObject.setObjectField(\"mClassNet\", 0)\n                }\n            }\n        }\n\n        runCatching {\n            mModemTestBoxClass.methodFinder().first {\n                name == \"initClassProduct\"\n            }.createHook {\n                after {\n                    it.thisObject.setObjectField(\"mClassProduct\", 0)\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/mtb/IsUserBuild.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.mtb\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject IsUserBuild : BaseHook() {\n    override fun init() {\n        loadClass(\"com.xiaomi.mtb.MtbUtils\").methodFinder().first {\n            name == \"IsUserBuild\"\n        }.createHook {\n            returnConstant(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/music/DisableAd.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.music;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class DisableAd extends BaseHook {\n\n    Class<?> mCloud;\n\n    @Override\n    // by @Yife Playte\n    public void init() {\n        try {\n            findAndHookMethod(\"com.tencent.qqmusiclite.activity.SplashAdActivity\", \"onCreate\", android.os.Bundle.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    try {\n                        Class<?> clazz = findClassIfExists(\"android.app.Activity\");\n                        clazz.getMethod(\"finish\").invoke(param.thisObject);\n                    } catch (Throwable e) {\n                        LogD(TAG, e);\n                    }\n                }\n            });\n        } catch (Throwable e) {\n            LogD(TAG, e);\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/networkboost/LinkTurboToast.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.networkboost;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class LinkTurboToast extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.xiaomi.NetworkBoost.slaservice.SLAToast\",\n            \"setLinkTurboStatus\", boolean.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.args[0] = false;\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/nfc/AllowInformationScreen.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.nfc\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass AllowInformationScreen : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.nfc.NfcService\").methodFinder().filterByName(\"sendMessage\").first().createHook {\n            before {\n                if (it.args[1] == 2 || it.args[1] == 4) {\n                    it.args[1] = 8\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/nfc/DisableSound.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.nfc;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class DisableSound extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.nfc.NfcService\",\n            \"initSoundPool\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(null);\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/AllAsSystemApp.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller\n\nimport android.content.pm.ApplicationInfo\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.closeDexKit\nimport com.sevtinge.cemiuiler.utils.DexKit.initDexKit\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject AllAsSystemApp : BaseHook() {\n    private val systemMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                paramTypes = listOf(\"android.content.pm.ApplicationInfo\")\n                returnType = \"boolean\"\n            }\n        }.map { it.getMethodInstance(EzXHelper.safeClassLoader) }\n    }\n\n    override fun init() {\n        /*dexKitBridge.findMethod {\n            matcher {\n                methodParamTypes = arrayOf(\"Landroid/content/pm/ApplicationInfo;\")\n                methodReturnType = \"boolean\"\n            }\n        }.forEach {\n            it.getMethodInstance(lpparam.classLoader).createHook {\n                before { param ->\n                    (param.args[0] as ApplicationInfo).flags =\n                        (param.args[0] as ApplicationInfo).flags.or(ApplicationInfo.FLAG_SYSTEM)\n                }\n            }\n        }*/\n        systemMethod.createHooks {\n            before { param ->\n                (param.args[0] as ApplicationInfo).flags =\n                    (param.args[0] as ApplicationInfo).flags.or(ApplicationInfo.FLAG_SYSTEM)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/DisableAD.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject DisableAD : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"ads_enable\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"app_store_recommend\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"virus_scan_install\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/DisableCountChecking.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DisableCountChecking : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.packageInstaller.model.RiskControlRules\").methodFinder().first {\n            name == \"getCurrentLevel\"\n        }.createHook {\n            returnConstant(0)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/DisableSafeModelTip.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.findClassOrNull\nimport com.sevtinge.cemiuiler.utils.setBooleanField\n\nobject DisableSafeModelTip : BaseHook() {\n    override fun init() {\n        /*val result = Objects.requireNonNull(\n            mPackageInstallerResultMethodsMap!![\"DisableSafeModelTip\"]\n        )\n        for (descriptor in result) {\n            val mDisableSafeModelTip = descriptor.getMethodInstance(lpparam.classLoader)\n            mDisableSafeModelTip.createHook {\n                returnConstant(false)\n            }\n\n        }*/\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"android.provider.MiuiSettings\\$Ad\")\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n\n        // 屏蔽每 30 天提示开启安全守护的弹窗（已知问题：完成和打开按钮无反应）\n        /*val result2 = Objects.requireNonNull(\n            mPackageInstallerResultMethodsMap!![\"Disable30DaysDialog\"]\n        )\n\n        for (descriptor in result2) {\n            val mDisableSafeModelTip = descriptor.getMethodInstance(lpparam.classLoader)\n            mDisableSafeModelTip.createHook {\n                returnConstant(null)\n            }\n        }*/\n\n        var letter = 'a'\n        for (i in 0..25) {\n            try {\n                val classIfExists =\n                    \"com.miui.packageInstaller.ui.listcomponets.${letter}0\".findClassOrNull()\n                classIfExists?.let {\n                    it.methodFinder().filterByName(\"a\").first().createHook {\n                        after { hookParam ->\n                            try {\n                                hookParam.thisObject.setBooleanField(\"m\", false)\n                            } catch (_: Throwable) {\n                                hookParam.thisObject.setBooleanField(\"l\", false)\n                            }\n                        }\n                    }\n                }\n            } catch (t: Throwable) {\n                letter++\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/DisplayMoreApkInfo.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller;\n\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.res.Resources;\nimport android.text.TextUtils;\nimport android.view.Gravity;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DisplayMoreApkInfo extends BaseHook {\n\n    Class<?> mApkInfo;\n    Class<?> mAppInfoViewObject;\n\n    @Override\n    public void init() {\n\n        mApkInfo = findClassIfExists(\"com.miui.packageInstaller.model.ApkInfo\");\n        mAppInfoViewObject = findClassIfExists(\"com.miui.packageInstaller.ui.listcomponets.AppInfoViewObject\");\n\n        if (mAppInfoViewObject != null) {\n            Class<?> ViewHolderClass = findClassIfExists(\"com.miui.packageInstaller.ui.listcomponets.AppInfoViewObject$ViewHolder\");\n            Method[] methods = XposedHelpers.findMethodsByExactParameters(mAppInfoViewObject, void.class, ViewHolderClass);\n            if (methods.length == 0) {\n                XposedLogUtils.logI(\"AppInfoDuringMiuiInstallHook\", \"Cannot find appropriate method\");\n                return;\n            }\n\n            Field[] fields = mAppInfoViewObject.getDeclaredFields();\n            String apkInfoFieldName = null;\n            for (Field field : fields)\n                if (mApkInfo.isAssignableFrom(field.getType())) {\n                    apkInfoFieldName = field.getName();\n                    break;\n                }\n            if (apkInfoFieldName == null) return;\n            String finalApkInfoFieldName = apkInfoFieldName;\n            hookMethod(methods[0], new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    Object viewHolder = param.args[0];\n                    if (viewHolder == null) return;\n                    TextView tvAppSize = (TextView) XposedHelpers.callMethod(viewHolder, \"getAppSize\");\n                    if (tvAppSize == null) return;\n\n                    Object apkInfo = XposedHelpers.getObjectField(param.thisObject, finalApkInfoFieldName);\n                    ApplicationInfo mAppInfo = (ApplicationInfo) XposedHelpers.callMethod(apkInfo, \"getInstalledPackageInfo\");\n                    PackageInfo mPkgInfo = (PackageInfo) XposedHelpers.callMethod(apkInfo, \"getPackageInfo\");\n                    Resources modRes = Helpers.getModuleRes(tvAppSize.getContext());\n\n                    LinearLayout layout = (LinearLayout) tvAppSize.getParent();\n                    layout.removeAllViews();\n\n                    ViewGroup mRootView = (ViewGroup) layout.getParent();\n                    ImageView mRoundImageView = (ImageView) mRootView.getChildAt(0);\n                    TextView mAppNameView = (TextView) mRootView.getChildAt(1);\n\n                    mRootView.removeAllViews();\n\n                    LinearLayout linearLayout = new LinearLayout(mRootView.getContext());\n                    linearLayout.setOrientation(LinearLayout.VERTICAL);\n                    linearLayout.setGravity(Gravity.CENTER);\n                    linearLayout.setLayoutParams(new LinearLayout.LayoutParams(-1, -1));\n\n                    LinearLayout.LayoutParams AppNameViewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);\n                    AppNameViewParams.setMargins(0, DisplayUtils.dip2px(mRootView.getContext(), 10), 0, 0);\n                    mAppNameView.setLayoutParams(AppNameViewParams);\n                    mAppNameView.setGravity(Gravity.CENTER);\n\n                    LinearLayout linearLayout2 = new LinearLayout(mRootView.getContext());\n                    linearLayout2.setOrientation(LinearLayout.VERTICAL);\n                    linearLayout2.setGravity(Gravity.CENTER);\n                    linearLayout2.setPadding(0, DisplayUtils.dip2px(mRootView.getContext(), 10), 0, 0);\n                    linearLayout2.setLayoutParams(new LinearLayout.LayoutParams(-1, -1));\n\n                    TextView mAppVersionNameView = new TextView(mRootView.getContext());\n                    TextView mAppVersionCodeView = new TextView(mRootView.getContext());\n                    TextView mAppSdkView = new TextView(mRootView.getContext());\n                    TextView mAppSizeView = new TextView(mRootView.getContext());\n\n                    setTextAppearance(mAppVersionNameView, tvAppSize);\n                    setTextAppearance(mAppVersionCodeView, tvAppSize);\n                    setTextAppearance(mAppSdkView, tvAppSize);\n                    setTextAppearance(mAppSizeView, tvAppSize);\n\n                    mAppVersionNameView.setGravity(Gravity.CENTER);\n                    mAppVersionCodeView.setGravity(Gravity.CENTER);\n                    mAppSdkView.setGravity(Gravity.CENTER);\n                    mAppSizeView.setGravity(Gravity.CENTER);\n\n\n                    String mAppVersionName;\n                    String mAppVersionCode;\n                    String mAppSdk;\n                    if (mAppInfo != null) {\n                        mAppVersionName = (String) XposedHelpers.callMethod(apkInfo, \"getInstalledVersionName\") + \" ➟ \" + mPkgInfo.versionName;\n                        mAppVersionCode = XposedHelpers.callMethod(apkInfo, \"getInstalledVersionCode\") + \" ➟ \" + mPkgInfo.getLongVersionCode();\n                        mAppSdk = mAppInfo.minSdkVersion + \"-\" + mAppInfo.targetSdkVersion + \" ➟ \" + mPkgInfo.applicationInfo.minSdkVersion + \"-\" + mPkgInfo.applicationInfo.targetSdkVersion;\n                    } else {\n                        mAppVersionName = mPkgInfo.versionName;\n                        mAppVersionCode = String.valueOf(mPkgInfo.getLongVersionCode());\n                        mAppSdk = mPkgInfo.applicationInfo.minSdkVersion + \"-\" + mPkgInfo.applicationInfo.targetSdkVersion;\n                    }\n\n                    mAppVersionNameView.setText(modRes.getString(R.string.various_install_app_info_version_name) + \": \" + mAppVersionName);\n                    mAppVersionCodeView.setText(modRes.getString(R.string.various_install_app_info_version_code) + \": \" + mAppVersionCode);\n                    mAppSdkView.setText(modRes.getString(R.string.various_install_app_info_sdk) + \": \" + mAppSdk);\n                    mAppSizeView.setText(tvAppSize.getText());\n\n                    linearLayout2.addView(mAppVersionNameView, 0);\n                    linearLayout2.addView(mAppVersionCodeView, 1);\n                    linearLayout2.addView(mAppSdkView, 2);\n                    linearLayout2.addView(mAppSizeView, 3);\n\n                    linearLayout.addView(mRoundImageView, 0);\n                    linearLayout.addView(mAppNameView, 1);\n                    linearLayout.addView(linearLayout2, 2);\n                    mRootView.addView(linearLayout);\n                }\n            });\n        }\n    }\n\n    private void setTextAppearance(TextView textView, TextView textView2) {\n        textView.setTextSize(15f);\n        textView.setTextColor(textView2.getTextColors());\n        textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);\n        textView.setHorizontalFadingEdgeEnabled(true);\n        textView.setSingleLine();\n        textView.setMarqueeRepeatLimit(-1);\n        textView.setSelected(true);\n        textView.setHorizontallyScrolling(true);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/DisplayMoreApkInfoNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller\n\nimport android.annotation.SuppressLint\nimport android.content.pm.ApplicationInfo\nimport android.content.pm.PackageInfo\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.text.TextUtils\nimport android.view.Gravity\nimport android.view.ViewGroup\nimport android.widget.ImageView\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.Log\nimport com.sevtinge.cemiuiler.R\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DisplayUtils.dip2px\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.callMethodOrNull\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XposedHelpers\nimport java.io.File\nimport java.lang.reflect.Method\nimport java.text.DecimalFormat\nimport kotlin.math.roundToInt\n\nobject DisplayMoreApkInfoNew : BaseHook() {\n    private var mApkInfo: Class<*>? = null\n    private var mAppInfoViewObject: Class<*>? = null\n    private var mAppInfoViewObjectViewHolder: Class<*>? = null\n\n    @SuppressLint(\"SetTextI18n\")\n    override fun init() {\n        // if (!getBoolean(\"packageinstaller_show_more_apk_info\", false)) return\n        mApkInfo = findClassIfExists(\"com.miui.packageInstaller.model.ApkInfo\")//.findClassOrNull()\n        mAppInfoViewObject =\n            findClassIfExists(\"com.miui.packageInstaller.ui.listcomponets.AppInfoViewObject\")//.findClassOrNull()\n        if (mAppInfoViewObject != null) {\n            XposedLogUtils.logI(\"mAppInfoViewObject is $mAppInfoViewObject\")\n            mAppInfoViewObjectViewHolder =\n                findClassIfExists(\"com.miui.packageInstaller.ui.listcomponets.AppInfoViewObject\\$ViewHolder\")//\"com.miui.packageInstaller.ui.listcomponets.AppInfoViewObject\\$ViewHolder\".findClassOrNull()\n            val methods: Array<Method> =\n                XposedHelpers.findMethodsByExactParameters(mAppInfoViewObject, Void.TYPE, mAppInfoViewObjectViewHolder)\n            if (methods.isNotEmpty()) {\n                val fields = mAppInfoViewObject!!.declaredFields\n                var apkInfoFieldName: String? = null\n                for (field in fields) {\n                    if (mApkInfo!!.isAssignableFrom(field.type)) {\n                        apkInfoFieldName = field.name\n                        break\n                    }\n                }\n                if (apkInfoFieldName == null) return\n                val finalApkInfoFieldName: String = apkInfoFieldName\n                methods[0].hookAfterMethod { hookParam ->\n                    val viewHolder: Any = hookParam.args[0] ?: return@hookAfterMethod\n                    val mAppSizeTv =\n                        XposedHelpers.callMethod(viewHolder, \"getAppSize\") as TextView? ?: return@hookAfterMethod\n                    val mContext = mAppSizeTv.context\n                    val isDarkMode =\n                        mAppSizeTv.context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES\n                    val apkInfo: Any = XposedHelpers.getObjectField(hookParam.thisObject, finalApkInfoFieldName)\n                    val mAppInfo = apkInfo.callMethodOrNull(\"getInstalledPackageInfo\") as ApplicationInfo?\n                    val mPkgInfo = apkInfo.callMethod(\"getPackageInfo\") as PackageInfo\n                    val modRes = Helpers.getModuleRes(mAppSizeTv.context) as Resources\n                    val layout: LinearLayout = mAppSizeTv.parent as LinearLayout\n                    layout.removeAllViews()\n                    val mContainerView = layout.parent as ViewGroup\n                    val mRoundImageView = mContainerView.getChildAt(0) as ImageView\n                    val mAppNameView = mContainerView.getChildAt(1) as TextView\n                    mContainerView.removeAllViews()\n                    val linearLayout = LinearLayout(mContext)\n                    linearLayout.orientation = LinearLayout.VERTICAL\n                    linearLayout.gravity = Gravity.CENTER\n                    linearLayout.layoutParams = LinearLayout.LayoutParams(\n                        LinearLayout.LayoutParams.MATCH_PARENT,\n                        LinearLayout.LayoutParams.MATCH_PARENT\n                    )\n                    val appNameViewParams: LinearLayout.LayoutParams =\n                        LinearLayout.LayoutParams(\n                            LinearLayout.LayoutParams.WRAP_CONTENT,\n                            LinearLayout.LayoutParams.MATCH_PARENT\n                        )\n                    appNameViewParams.setMargins(0, dip2px(mContext, 10f), 0, 0)\n                    mAppNameView.layoutParams = appNameViewParams\n                    mAppNameView.gravity = Gravity.CENTER\n                    val linearLayout2 = LinearLayout(mContainerView.context)\n                    // val linearLayout2 = LinearLayout(mContext)\n                    linearLayout2.orientation = LinearLayout.VERTICAL\n                    linearLayout2.gravity = Gravity.CENTER\n                    linearLayout2.setPadding(\n                        dip2px(mContext, 18f),\n                        dip2px(mContext, 15f),\n                        dip2px(mContext, 18f),\n                        dip2px(mContext, 15f)\n                    )\n                    linearLayout2.layoutParams = LinearLayout.LayoutParams(\n                        LinearLayout.LayoutParams.MATCH_PARENT,\n                        LinearLayout.LayoutParams.MATCH_PARENT\n                    ).also {\n                        it.setMargins(0, dip2px(mContext, 13f), 0, 0)\n                    }\n                    linearLayout2.background =\n                        modRes.getDrawable(\n                            if (isDarkMode) R.drawable.ic_packageinstaller_background_dark else R.drawable.ic_packageinstaller_background_light,\n                            modRes.newTheme()\n                        )\n                    val mAppPackageNameView = TextView(mContext)\n                    mContainerView.removeAllViews()\n                    val mAppVersionNameView = TextView(mContainerView.context)\n                    val mAppVersionCodeView = TextView(mContainerView.context)\n                    val mAppSdkView = TextView(mContainerView.context)\n                    val mAppSizeView = TextView(mContainerView.context)\n                    setTextAppearance(mAppVersionNameView, mAppSizeTv)\n                    setTextAppearance(mAppVersionCodeView, mAppSizeTv)\n                    setTextAppearance(mAppSdkView, mAppSizeTv)\n                    setTextAppearance(mAppSizeView, mAppSizeTv)\n                    mAppPackageNameView.gravity = Gravity.CENTER\n                    mAppVersionNameView.gravity = Gravity.START\n                    mAppVersionCodeView.gravity = Gravity.START\n                    mAppSdkView.gravity = Gravity.START\n                    mAppSizeView.gravity = Gravity.START\n                    val mPackageName: String = mPkgInfo.applicationInfo.packageName\n                    val mAppVersionName: String\n                    val mAppVersionCode: String\n                    val mAppSdk: String\n                    var mOldAppSize = \"\"\n                    val newAppSize = apkInfo.callMethod(\"getFileSize\") as Long\n                    val newAppSizeDistance = newAppSize.toFloat().roundToInt() / 1000000f\n                    val mNewAppSize = format(newAppSizeDistance)\n                    if (mAppInfo != null) {\n                        mAppVersionName =\n                            apkInfo.callMethod(\"getInstalledVersionName\") as String + \" ➟ \" + mPkgInfo.versionName\n                        mAppVersionCode =\n                            apkInfo.callMethod(\"getInstalledVersionCode\").toString() + \" ➟ \" + mPkgInfo.longVersionCode\n                        mAppSdk =\n                            mAppInfo.minSdkVersion.toString() + \"-\" + mAppInfo.targetSdkVersion + \" ➟ \" + mPkgInfo.applicationInfo.minSdkVersion + \"-\" + mPkgInfo.applicationInfo.targetSdkVersion\n                        val oldAppSize = Integer.valueOf(File(mAppInfo.sourceDir).length().toInt())\n                        val oldAppSizeDistance = oldAppSize.toFloat().roundToInt() / 1000000f\n                        mOldAppSize = format(oldAppSizeDistance) + \" ➟ \"\n                    } else {\n                        mAppVersionName = mPkgInfo.versionName\n                        mAppVersionCode = mPkgInfo.longVersionCode.toString()\n                        mAppSdk =\n                            mPkgInfo.applicationInfo.minSdkVersion.toString() + \"-\" + mPkgInfo.applicationInfo.targetSdkVersion\n                    }\n                    mAppVersionNameView.text =\n                        modRes.getString(R.string.various_install_app_info_version_name) + \": \" + mAppVersionName\n                    mAppVersionCodeView.text =\n                        modRes.getString(R.string.various_install_app_info_version_code) + \": \" + mAppVersionCode\n                    mAppSdkView.text = modRes.getString(R.string.various_install_app_info_sdk) + \": \" + mAppSdk\n                    mAppSizeView.text =\n                        modRes.getString(R.string.various_install_app_size) + \": \" + mOldAppSize + mNewAppSize\n                    mAppPackageNameView.text = mPackageName\n                    linearLayout2.addView(mAppVersionNameView, 0)\n                    linearLayout2.addView(mAppVersionCodeView, 1)\n                    linearLayout2.addView(mAppSdkView, 2)\n                    linearLayout2.addView(mAppSizeView, 3)\n                    linearLayout.addView(mRoundImageView, 0)\n                    linearLayout.addView(mAppNameView, 1)\n                    linearLayout.addView(mAppPackageNameView, 2)\n                    linearLayout.addView(linearLayout2, 3)\n                    mContainerView.addView(linearLayout)\n                }\n            }\n        } else {\n            Log.ex(\"Cannot find appropriate method\")\n        }\n    }\n}\n\nprivate fun setTextAppearance(textView: TextView, textView2: TextView) {\n    textView.textSize = 17f\n    textView.setTextColor(textView2.textColors)\n    textView.ellipsize = TextUtils.TruncateAt.MARQUEE\n    textView.isHorizontalFadingEdgeEnabled = true\n    textView.setSingleLine()\n    textView.marqueeRepeatLimit = -1\n    textView.isSelected = true\n    textView.setHorizontallyScrolling(true)\n}\n\nprivate fun format(appSize: Float): String {\n    val decimalFormat = DecimalFormat(\"0.00\")\n    return if (appSize >= 1024f) {\n        decimalFormat.format(appSize / 1024f) + \"GB\"\n    } else if (appSize >= 1.024f) {\n        decimalFormat.format(appSize) + \"MB\"\n    } else {\n        decimalFormat.format(appSize * 1024f) + \"KB\"\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/InstallRiskDisable.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject InstallRiskDisable : BaseHook() {\n    override fun init() {\n        /*val result = Objects.requireNonNull(\n            mPackageInstallerResultMethodsMap!![\"SecureVerifyEnable\"]\n        )\n        for (descriptor in result) {\n            val mSecureVerifyEnable = descriptor.getMethodInstance(lpparam.classLoader)\n            mSecureVerifyEnable.createHook {\n                returnConstant(false)\n            }\n        }\n\n        val result2 = Objects.requireNonNull(\n            mPackageInstallerResultMethodsMap!![\"isInstallRiskEnabled\"]\n        )\n        for (descriptor2 in result2) {\n            val isInstallRiskEnabled = descriptor2.getMethodInstance(lpparam.classLoader)\n            isInstallRiskEnabled.createHook {\n                returnConstant(false)\n            }\n        }\n\n        val result3 = Objects.requireNonNull(\n            mPackageInstallerResultMethodsMap!![\"DisableSafeModelTip\"]\n        )\n          for (descriptor in result3) {\n            val mDisableSafeModelTip = descriptor.getMethodInstance(lpparam.classLoader)\n            mDisableSafeModelTip.createHook {\n                 returnConstant(false)\n            }\n        }*/\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"secure_verify_enable\")\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"installerOpenSafetyModel\")\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"android.provider.MiuiSettings\\$Ad\")\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/InstallSource.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class InstallSource extends BaseHook {\n\n    String mInstallSourcePackageName;\n\n    @Override\n    public void init() {\n\n        mInstallSourcePackageName = mPrefsMap.getString(\"miui_package_installer_install_source\", \"com.android.fileexplorer\");\n\n        findAndHookMethodSilently(\"com.miui.packageInstaller.InstallStart\",\n            \"getCallingPackage\",\n            XC_MethodReplacement.returnConstant(mInstallSourcePackageName));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/MiuiPackageInstallModify.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class MiuiPackageInstallModify extends BaseHook {\n    @Override\n    public void init() {\n\n        Class<?> mCloudParams = findClassIfExists(\"com.miui.packageInstaller.model.CloudParams\");\n\n        findAndHookConstructor(mCloudParams, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.setBooleanField(param.thisObject, \"installNotAllow\", false);\n                XposedHelpers.setBooleanField(param.thisObject, \"showSafeModeTip\", false);\n                XposedHelpers.setBooleanField(param.thisObject, \"showAdsAfter\", false);\n                XposedHelpers.setBooleanField(param.thisObject, \"showAdsBefore\", false);\n                XposedHelpers.setBooleanField(param.thisObject, \"singletonAuthShowAdsAfter\", true);\n                XposedHelpers.setBooleanField(param.thisObject, \"singletonAuthShowAdsBefore\", false);\n                XposedHelpers.setBooleanField(param.thisObject, \"useSystemAppRules\", true);\n                XposedHelpers.setBooleanField(param.thisObject, \"skipInstallConfirm\", true);\n                XposedHelpers.setBooleanField(param.thisObject, \"allowHighLight\", true);\n                XposedHelpers.setBooleanField(param.thisObject, \"openButton\", true);\n                XposedHelpers.setObjectField(param.thisObject, \"safeType\", \"1\");\n            }\n        });\n\n        // 隐藏开启纯净模式提示\n        // SafeModeTipViewObject safeModeTipViewObject = new SafeModeTipViewObject(h10, pureModeElderTipViewObject.f5884m, null, null, 12, null);\n        // safeModeTipViewObject.a();  a方法里的调用\n        findAndHookMethod(\"com.miui.packageInstaller.ui.listcomponets.g0\", \"a\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.setBooleanField(param.thisObject, \"l\", false);\n            }\n        });\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/SafeMode.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class SafeMode extends BaseHook {\n\n    @Override\n    public void init() {\n\n        findAndHookMethod(\"com.android.packageinstaller.compat.MiuiSettingsCompat\",\n            \"isSafeModelEnable\",\n            Context.class,\n            XC_MethodReplacement.returnConstant(mPrefsMap.getBoolean(\"miui_package_installer_safe_mode\")));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/packageinstaller/UpdateSystemApp.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.packageinstaller;\n\nimport android.content.pm.ApplicationInfo;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.lang.reflect.Method;\nimport java.util.List;\n\npublic class UpdateSystemApp extends BaseHook {\n\n    Class<?> mClz;\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"android.os.SystemProperties\", \"getBoolean\", String.class, boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                if (\"persist.sys.allow_sys_app_update\".equals(param.args[0])) {\n                    param.setResult(true);\n                }\n            }\n        });\n\n        char letterClz = 'a';\n\n        for (int i = 0; i < 26; i++) {\n            mClz = findClass(\"j2.\" + letterClz);\n            if (mClz != null) {\n                int length = mClz.getDeclaredMethods().length;\n                if (length >= 15 && length <= 25) {\n                    List<Method> methods = List.of(mClz.getDeclaredMethods());\n                    for (Method method : methods) {\n                        try {\n                            if (method.getParameterTypes()[0] == ApplicationInfo.class) {\n                                hookMethod(method, new MethodHook() {\n                                    @Override\n                                    protected void before(MethodHookParam param) throws Throwable {\n                                        param.setResult(false);\n                                    }\n                                });\n                                break;\n\n                            }\n                        } catch (Throwable e) {\n                            e.printStackTrace();\n                        }\n                    }\n                    break;\n                }\n            }\n            letterClz = (char) (letterClz + 1);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/personalassistant/BlurOverlay.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.personalassistant;\n\nimport android.content.res.Configuration;\nimport android.os.Build;\nimport android.view.Window;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BlurOverlay extends BaseHook {\n\n    Class<?> mDeviceAdapter;\n    Class<?> mPhoneDeviceAdapter;\n    Class<?> mFoldableDeviceAdapter;\n\n    Class<?> v;\n\n    Window window;\n\n    @Override\n    public void init() {\n\n        v = findClassIfExists(\"c.h.e.p.v\");\n\n        Class<?> mF = findClassIfExists(\"c.h.c.a.a.f\");\n\n        mDeviceAdapter = findClassIfExists(\"com.miui.personalassistant.device.DeviceAdapter\");\n        mPhoneDeviceAdapter = findClassIfExists(\"com.miui.personalassistant.device.PhoneDeviceAdapter\");\n        mFoldableDeviceAdapter = findClassIfExists(\"com.miui.personalassistant.device.FoldableDeviceAdapter\");\n\n        hookAllMethods(mDeviceAdapter, \"create\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                if (v != null) {\n                    findAndHookMethod(v, \"j\", XC_MethodReplacement.returnConstant(true));\n                }\n            }\n        });\n\n        findAndHookMethod(mFoldableDeviceAdapter, \"blurOverlayWindow\", float.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                float f = (float) param.args[0];\n\n                if (f >= 0f) {\n                    hookAllConstructors(mF, new MethodHook() {\n                        @Override\n                        protected void before(MethodHookParam param) throws Throwable {\n                            window = (Window) XposedHelpers.getObjectField(param.thisObject, \"b\");\n                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                                window.setBackgroundBlurRadius((int) f);\n                            }\n                        }\n                    });\n                }\n            }\n        });\n\n        findAndHookMethod(mFoldableDeviceAdapter, \"onConfigurationChanged\", Configuration.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                /*Configuration configuration = (Configuration) param.args[0];\n                Configuration mConfiguration = (Configuration) XposedHelpers.getObjectField(param.thisObject, \"mConfiguration\");\n                Context mThemedContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mThemedContext\");\n\n                if (mThemedContext instanceof ComponentCallbacks) {\n                    ((ComponentCallbacks) mThemedContext).onConfigurationChanged(configuration);\n                }\n\n                int updateFrom = mConfiguration.updateFrom(configuration);\n\n                boolean z = (updateFrom & 128) != 0;\n                boolean z2 = (updateFrom & 1024) != 0;\n\n                if (z || z2) {\n                    Class<?> mDensityScaleUtil = findClass(\"com.miui.personalassistant.device.DensityScaleUtil\");\n                    XposedHelpers.callStaticMethod(mDensityScaleUtil, \"scaleHostDensity\", mThemedContext, 0);\n\n                }\n\n\n*/\n                findAndHookMethod(\"com.miui.launcher.overlay.server.pane.SlidingPaneStateManager\", \"a\", boolean.class, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        param.args[0] = false;\n                    }\n                });\n                int mCurrentBlurRadius = XposedHelpers.getIntField(param.thisObject, \"mCurrentBlurRadius\");\n                XposedHelpers.setIntField(param.thisObject, \"mScreenSize\", 5);\n                XposedHelpers.setIntField(param.thisObject, \"mCurrentBlurRadius\", 100);\n                XposedHelpers.callMethod(param.thisObject, \"blurOverlayWindow\", mCurrentBlurRadius);\n            }\n        });\n\n\n        findAndHookMethod(mFoldableDeviceAdapter, \"onOpened\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                int mCurrentBlurRadius = XposedHelpers.getIntField(param.thisObject, \"mCurrentBlurRadius\");\n                if (Float.compare(mCurrentBlurRadius, 100f) != 0) {\n                    XposedHelpers.setIntField(param.thisObject, \"mCurrentBlurRadius\", 100);\n                    XposedHelpers.callMethod(param.thisObject, \"blurOverlayWindow\", mCurrentBlurRadius);\n                }\n            }\n        });\n\n        findAndHookMethod(mFoldableDeviceAdapter, \"onScroll\", float.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                float f = (float) param.args[0];\n                int i = (int) ((f - 0.49f) * 204.08163f);\n                int mCurrentBlurRadius = XposedHelpers.getIntField(param.thisObject, \"mCurrentBlurRadius\");\n\n                int i2 = mCurrentBlurRadius;\n\n                if (i2 != i) {\n                    if (i2 <= 0 || i >= 0) {\n                        mCurrentBlurRadius = i;\n                    } else {\n                        mCurrentBlurRadius = 0;\n                    }\n                    XposedHelpers.callMethod(param.thisObject, \"blurOverlayWindow\", mCurrentBlurRadius);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/personalassistant/BlurPersonalAssistant.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.personalassistant\n\nimport android.graphics.drawable.ColorDrawable\nimport android.os.Build\nimport android.view.Window\nimport androidx.annotation.RequiresApi\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.api.BlurDraw\nimport kotlin.math.abs\n\nobject BlurPersonalAssistant : BaseHook() {\n    private val blurRadius by lazy {\n        mPrefsMap.getInt(\"personal_assistant_blurradius\", 80)\n    }\n    private val backgroundColor by lazy {\n        mPrefsMap.getInt(\"personal_assistant_color\", -1)\n    }\n\n    @RequiresApi(Build.VERSION_CODES.S)\n    override fun init() {\n        // val appVersionName = Helpers.getPackageVersionName(lpparam)\n        var lastBlurRadius = -1\n        /*val mScrollStateManager = mPersonalAssistantResultMethodsMap[\"ScrollStateManager\"]!!\n\n        for (descriptor in mScrollStateManager) {\n            runCatching {\n                val mScrollStateManagerMethod = descriptor.getMethodInstance(lpparam.classLoader)\n                XposedLogUtils.logI(\"mScrollStateManager method is $mScrollStateManagerMethod\")\n                XposedBridge.hookMethod(mScrollStateManagerMethod,\n                    object : XC_MethodHook() {\n                        @RequiresApi(Build.VERSION_CODES.S)\n                        override fun afterHookedMethod(param: MethodHookParam) {\n                            val scrollX = param.args[0] as Float\n                            val window: Any?\n                            window = if(appVersionName.contains(\"FOR-DESIGNER\")) {\n                                log(\"is designer ver.\")\n                                HookUtils.getValueByField(param.thisObject, \"e\") ?: return\n                            } else {\n                                HookUtils.getValueByField(param.thisObject, \"b\") ?: return\n                            }\n                            if (window.javaClass.name.contains(\"Window\")) {\n                                runCatching {\n                                    window as Window\n                                    val blurRadius = (scrollX * blurRadius).toInt()\n                                    if (abs(blurRadius - lastBlurRadius) > 2) {\n                                        window.setBackgroundBlurRadius(blurRadius)\n                                        lastBlurRadius = blurRadius\n                                    }\n                                    val backgroundColorDrawable = ColorDrawable(backgroundColor)\n                                    backgroundColorDrawable.alpha = (scrollX * 255).toInt()\n                                    window.setBackgroundDrawable(backgroundColorDrawable)\n                                }\n                            }\n                        }\n                    })\n            }\n        }*/\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"ScrollStateManager\")\n            }\n        }.forEach { methodData ->\n            methodData.getMethodInstance(lpparam.classLoader).createHook {\n                after {\n                val scrollX = it.args[0] as Float\n                    val fieldNames = ('a'..'z').map { name -> name.toString() }\n                    val window = BlurDraw.getValueByFields(it.thisObject, fieldNames) ?: return@after\n\n                    if (window.javaClass.name.contains(\"Window\")) {\n                        runCatching {\n                            window as Window\n                            val blurRadius = (scrollX * blurRadius).toInt()\n                            if (abs(blurRadius - lastBlurRadius) > 2) {\n                                window.setBackgroundBlurRadius(blurRadius)\n                                lastBlurRadius = blurRadius\n                            }\n                            val backgroundColorDrawable = ColorDrawable(backgroundColor)\n                            backgroundColorDrawable.alpha = (scrollX * 255).toInt()\n                            window.setBackgroundDrawable(backgroundColorDrawable)\n                        }\n                    }\n                }\n            }\n        }\n\n        /*\n        val AssistantOverlayWindowClass = findClassIfExists(\n            \"com.miui.personalassistant.core.overlay.AssistantOverlayWindow\"\n        ) ?: return\n        XposedHelpers.findAndHookMethod(\n            AssistantOverlayWindowClass,\n            \"a\",\n            Float::class.java,\n            object : XC_MethodHook() {\n                @RequiresApi(Build.VERSION_CODES.S)\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val scrollX = param.args[0] as Float\n                    val window = HookUtils.getValueByField(param.thisObject, \"b\") ?: return\n                    if (window.javaClass.name.contains(\"Window\")) {\n                        try {\n                            window as Window\n                            val blurRadius = (scrollX * blurRadius).toInt()\n                            if (abs(blurRadius - lastBlurRadius) > 2) {\n                                window.setBackgroundBlurRadius(blurRadius)\n                                lastBlurRadius = blurRadius\n                            }\n                            val backgroundColorDrawable = ColorDrawable(backgroundColor)\n                            backgroundColorDrawable.alpha = (scrollX * 255).toInt()\n                            window.setBackgroundDrawable(backgroundColorDrawable)\n                        } catch (e: Throwable) {\n                            // 重复报错会污染日志\n                            //  HookUtils.log(e.message)\n                        }\n                    }\n                }\n            })\n         */\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/personalassistant/BlurPersonalAssistantBackGround.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.personalassistant\n\nimport android.content.res.Configuration\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.getIntField\nimport com.sevtinge.cemiuiler.utils.hookBeforeAllMethods\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport com.sevtinge.cemiuiler.utils.new\nimport com.sevtinge.cemiuiler.utils.replaceMethod\nimport com.sevtinge.cemiuiler.utils.setObjectField\n\nobject BlurPersonalAssistantBackGround : BaseHook() {\n    private val deviceAdapter = loadClass(\"com.miui.personalassistant.device.DeviceAdapter\")\n    private val foldableDeviceAdapter by lazy {\n        loadClass(\"com.miui.personalassistant.device.FoldableDeviceAdapter\")\n    }\n\n    override fun init() {\n        deviceAdapter.hookBeforeAllMethods(\"create\") {\n            it.result = foldableDeviceAdapter.new(it.args[0])\n        }\n        try {\n            foldableDeviceAdapter.hookBeforeMethod(\"onEnter\", Boolean::class.java) {\n                it.thisObject.setObjectField(\"mScreenSize\", 3)\n            }\n        } catch (e: ClassNotFoundException) {\n            foldableDeviceAdapter.hookBeforeMethod(\"onOpened\") {\n                it.thisObject.setObjectField(\"mScreenSize\", 3)\n            }\n        }\n        foldableDeviceAdapter.hookBeforeMethod(\"onConfigurationChanged\", Configuration::class.java) {\n            it.thisObject.setObjectField(\"mScreenSize\", 3)\n        }\n        foldableDeviceAdapter.replaceMethod(\"onScroll\", Float::class.java) {\n            val f = it.args[0] as Float\n            val i = (f * 100.0f).toInt()\n            val mCurrentBlurRadius: Int = it.thisObject.getIntField(\"mCurrentBlurRadius\")\n            if (mCurrentBlurRadius != i) {\n                if (mCurrentBlurRadius <= 0 || i >= 0) {\n                    it.thisObject.setObjectField(\"mCurrentBlurRadius\", i)\n                } else {\n                    it.thisObject.setObjectField(\"mCurrentBlurRadius\", 0)\n                }\n                it.thisObject.callMethod(\"blurOverlayWindow\", mCurrentBlurRadius)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/personalassistant/EnableFoldWidget.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.personalassistant;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class EnableFoldWidget extends BaseHook {\n\n    Class<?> c;\n    Class<?> m2;\n    Class<?> ga;\n\n    @Override\n    public void init() {\n\n        c = findClassIfExists(\"b.z.g\");\n\n        m2 = findClassIfExists(\"c.h.e.i.b\");\n\n        ga = findClassIfExists(\"c.h.e.p.ga\");\n\n        findAndHookMethod(c, \"a\", Context.class, String.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                XposedHelpers.setStaticObjectField(m2, \"a\", \"fold\");\n            }\n        });\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/personalassistant/PadWidgetEnable.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.personalassistant;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class PadWidgetEnable extends BaseHook {\n\n    Class<?> m = findClassIfExists(\"c.h.e.k.k.c.d\");\n\n    Class<?> m2 = findClassIfExists(\"c.h.e.p.s\");\n\n    public enum DeviceType {\n        PAD, FOLDABLE_DEVICE, PHONE\n    }\n\n    @Override\n    public void init() {\n        hookAllMethods(m2, \"c\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                XposedHelpers.callMethod(XposedHelpers.findClassIfExists(\"miui.os.Build\", lpparam.classLoader), \"isTablet\", true);\n                XposedHelpers.setStaticBooleanField(XposedHelpers.findClassIfExists(\"miui.os.Build\", lpparam.classLoader), \"IS_TABLET\", true);\n            }\n        });\n\n        /*findAndHookMethod(m,\"a\", Build.class, Context.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                findAndHookMethod(m2,\"c\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        XposedHelpers.setStaticBooleanField(XposedHelpers.findClassIfExists(\"miui.os.Build\",lpparam.classLoader),\"IS_TABLET\", true);\n                    }\n                });\n            }\n        });*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/personalassistant/WidgetCrack.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.personalassistant\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nclass WidgetCrack : BaseHook() {\n    override fun init() {\n        try {\n            loadClass(\"com.miui.maml.widget.edit.MamlutilKt\").methodFinder().filterByName(\"themeManagerSupportPaidWidget\").first().createHook {\n                returnConstant(false)\n            }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.PickerDetailViewModel\").methodFinder().filterByName(\"isCanDirectAddMaMl\").first()\n                .createHook {\n                    returnConstant(true)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.utils.PickerDetailDownloadManager\\$Companion\").methodFinder()\n                .filterByName(\"isCanDownload\").first().createHook {\n                    returnConstant(true)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.utils.PickerDetailUtil\").methodFinder().filterByName(\"isCanAutoDownloadMaMl\").first()\n                .createHook {\n                    returnConstant(true)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.bean.PickerDetailResponse\").methodFinder().filterByName(\"isPay\").first().createHook {\n                returnConstant(false)\n            }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.bean.PickerDetailResponse\").methodFinder().filterByName(\"isBought\").first()\n                .createHook {\n                    returnConstant(true)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.bean.PickerDetailResponseWrapper\").methodFinder().filterByName(\"isPay\").first()\n                .createHook {\n                    returnConstant(false)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.bean.PickerDetailResponseWrapper\").methodFinder().filterByName(\"isBought\").first()\n                .createHook {\n                    returnConstant(true)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.PickerDetailViewModel\").methodFinder().filterByName(\"shouldCheckMamlBoughtState\")\n                .first().createHook {\n                    returnConstant(false)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.PickerDetailViewModel\").methodFinder()\n                .filterByName(\"isTargetPositionMamlPayAndDownloading\").first().createHook {\n                    returnConstant(false)\n                }\n\n            loadClass(\"com.miui.personalassistant.picker.business.detail.PickerDetailViewModel\").methodFinder()\n                .filterByName(\"checkIsIndependentProcessWidgetForPosition\").first().createHook {\n                    returnConstant(true)\n                }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/phone/DualNrSupport.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.phone\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DualNrSupport : BaseHook() {\n    override fun init() {\n        loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n            name == \"isDualNrSupported\"\n        }.createHook {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/phone/DualSaSupport.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.phone\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DualSaSupport : BaseHook() {\n    override fun init() {\n        loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n            name == \"isDualSaSupported\"\n        }.createHook {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/phone/ModemFeature.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.phone\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject ModemFeature : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"com.android.phone.FiveGManagerBase\").methodFinder().first {\n                name == \"getModemFeatureMode\"\n            }.createHook {\n                after {\n                    it.args[0] = -1\n                    it.result = true\n                }\n            }\n        }\n\n        runCatching {\n            loadClass(\"com.android.phone.MiuiPhoneUtils\").methodFinder().first {\n                name == \"isModemFeatureSupported\"\n            }.createHook {\n                after {\n                    it.args[0] = -1\n                }\n            }\n        }\n\n        runCatching {\n            loadClass(\"com.android.phone.MiuiPhoneUtils\").methodFinder().first {\n                name == \"getModemFeatureFromDb\"\n            }.createHook {\n                after {\n                    it.args[0] = -1\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/phone/N1BandPhone.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.phone\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject N1BandPhone : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN1Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/phone/N28BandPhone.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.phone\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject N28BandPhone : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN28Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/phone/N5N8BandPhone.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.phone\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject N5N8BandPhone : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN5Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN8Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/phone/ViceSlotVolteButton.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.phone\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.exec\n\nobject ViceSlotVolteButton : BaseHook() {\n    override fun init() {\n        runCatching {\n            exec(\"settings put global vice_slot_volte_data_enabled 1\")\n            loadClass(\"com.android.phone.MiuiPhoneUtils\").methodFinder().first {\n                name == \"shouldHideViceSlotVolteDataButton\"\n            }.createHook {\n                returnConstant(false)\n            }\n        }\n        runCatching {\n            loadClass(\"com.android.phone.MiuiPhoneUtils\").methodFinder().first {\n                name == \"shouldHideSmartDualSimButton\"\n            }.createHook {\n                returnConstant(false)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/powerkeeper/CustomRefreshRate.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.powerkeeper\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.ObjectUtils\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject CustomRefreshRate : BaseHook() {\n    override fun init() {\n        /*val result1 = PowerKeeperDexKit.mPowerKeeperResultMethodsMap!![\"fucSwitch\"]\n            result1!!.filter { it.isMethod }.map {\n                it.getMethodInstance(EzXHelper.safeClassLoader).createHook {\n                    before { param ->\n                        ObjectUtils.setObject(param.thisObject, \"mIsCustomFpsSwitch\", \"true\")\n                        // setObject(param.thisObject, \"fucSwitch\", true)\n                        // val qwq = getObjectOrNull(param.thisObject, \"mIsCustomFpsSwitch\")\n                        // Log.i(\"hook mIsCustomFpsSwitch success, its:$qwq\")\n                    }\n                }\n            }*/\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"custom_mode_switch\", \"fucSwitch\")\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            before {\n                ObjectUtils.setObject(it.thisObject, \"mIsCustomFpsSwitch\", \"true\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/powerkeeper/DontKillApps.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.powerkeeper\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DontKillApps : BaseHook() {\n    override fun init() {\n        loadClass(\"miui.process.ProcessManager\").methodFinder().first {\n            name == \"kill\"\n        }.createHook {\n            returnConstant(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/powerkeeper/LockMaxFps.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.powerkeeper\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject LockMaxFps : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.powerkeeper.statemachine.DisplayFrameSetting\").methodFinder().first {\n            name == \"setScreenEffect\" && parameterCount == 3\n        }.createHook {\n            returnConstant(null)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/powerkeeper/PreventBatteryWitelist.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.powerkeeper;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\npublic class PreventBatteryWitelist extends BaseHook {\n    @Override\n    public void init() {\n        Helpers.hookAllMethods(\"com.miui.powerkeeper.utils.CommonAdapter\", lpparam.classLoader, \"addPowerSaveWhitelistApps\", new MethodHook(20000) {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(null);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/scanner/EnableCard.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.scanner;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableCard extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isAddBusinessCard\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isBusinessCardModuleAvailable\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/scanner/EnableDocPpt.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.scanner;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableDocPpt extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isPPTModuleAvailable\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/scanner/EnableOcr.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.scanner;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableOcr extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isAddTextExtractionFunction\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/scanner/EnableTranslation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.scanner;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableTranslation extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isAddTranslation\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isTranslationModuleAvailable\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/scanner/document/EnableDocument.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.scanner.document;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableDocument extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isAddDocumentModule\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/scanner/document/EnableExcel.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.scanner.document;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableExcel extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.xiaomi.scanner.util.SPUtils\", \"getFormModule\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isSupportForm\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isAddFormRecognitionFunction\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/scanner/document/EnablePpt.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.scanner.document;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnablePpt extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.xiaomi.scanner.settings.FeatureManager\", \"isSupportPpt\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n\n    }\n}\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenrecorder/ForceSupportPlaybackCapture.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenrecorder\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\n\nclass ForceSupportPlaybackCapture : BaseHook() {\n    override fun init() {\n        // if (!xPrefs.getBoolean(\"force_support_playbackcapture\", true)) return\n\n        XposedHelpers.findAndHookMethod(\"android.os.SystemProperties\",\n            lpparam.classLoader,\n            \"getBoolean\",\n            String::class.java,\n            Boolean::class.javaPrimitiveType,\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (param.args[0] == \"ro.vendor.audio.playbackcapture.screen\")\n                        param.result = true\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenrecorder/SaveToMovies.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenrecorder\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\n\nobject SaveToMovies : BaseHook() {\n    override fun init() {\n        val clazz = XposedHelpers.findClass(\"android.os.Environment\", lpparam.classLoader)\n        XposedHelpers.setStaticObjectField(clazz, \"DIRECTORY_DCIM\", \"Movies\")\n\n        XposedHelpers.findAndHookMethod(\"android.content.ContentValues\",\n            lpparam.classLoader,\n            \"put\",\n            String::class.java,\n            String::class.java,\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (param.args[0] == \"relative_path\") {\n                        param.args[1] = (param.args[1] as String).replace(\"DCIM\", \"Movies\")\n                    }\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenrecorder/ScreenRecorderConfig.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenrecorder\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.isFinal\n\nobject ScreenRecorderConfig : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"Error when set frame value, maxValue = \")\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            before { param ->\n                param.args[0] = 1200\n                param.args[1] = 1\n                param.method.declaringClass.declaredFields.firstOrNull { field ->\n                    field.also {\n                        it.isAccessible = true\n                    }.let { fieldAccessible ->\n                        fieldAccessible.isFinal &&\n                            fieldAccessible.get(null).let {\n                                runCatching {\n                                    (it as IntArray).contentEquals(\n                                        intArrayOf(15, 24, 30, 48, 60, 90)\n                                    )\n                                }.getOrDefault(false)\n                            }\n                    }\n                }?.set(null, intArrayOf(15, 24, 30, 48, 60, 90, 120, 144))\n            }\n        }\n\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"defaultBitRate = \")\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            before { param ->\n                param.args[0] = 1200\n                param.args[1] = 1\n                param.method.declaringClass.declaredFields.firstOrNull { field ->\n                    field.also {\n                        it.isAccessible = true\n                    }.let { fieldAccessible ->\n                        fieldAccessible.isFinal &&\n                            fieldAccessible.get(null).let {\n                                runCatching {\n                                    (it as IntArray).contentEquals(\n                                        intArrayOf(200, 100, 50, 32, 24, 16, 8, 6, 4, 1)\n                                    )\n                                }.getOrDefault(false)\n                            }\n                    }\n                }?.set(null, intArrayOf(1200, 800, 400, 200, 100, 50, 32, 24, 16, 8, 6, 4, 1))\n            }\n        }\n\n        /* val mScreenRecorderConfigA = mScreenRecorderResultMethodsMap[\"ScreenRecorderConfigA\"]!!\n         assert(mScreenRecorderConfigA.size == 1)\n         val mScreenRecorderConfigADescriptor = mScreenRecorderConfigA.first()\n         val mScreenRecorderConfigAMethod: Method =\n             mScreenRecorderConfigADescriptor.getMethodInstance(lpparam.classLoader)\n         // XposedBridge.log(\"Cemiuiler: DeviceModify (Updater) dexkit method is $systemPropertiesMethod\")\n         mScreenRecorderConfigAMethod.createHook {\n             before { param ->\n                 param.args[0] = 1200\n                 param.args[1] = 1\n                 param.method.declaringClass.declaredFields.firstOrNull { field ->\n                     field.also {\n                         it.isAccessible = true\n                     }.let { fieldAccessible ->\n                         fieldAccessible.isFinal &&\n                             fieldAccessible.get(null).let {\n                                 runCatching {\n                                     (it as IntArray).contentEquals(intArrayOf(15, 24, 30, 48, 60, 90))\n                                 }.getOrDefault(false)\n                             }\n                     }\n                 }?.set(null, intArrayOf(15, 24, 30, 48, 60, 90, 120, 144))\n             }\n         }\n\n\n         val mScreenRecorderConfigB = mScreenRecorderResultMethodsMap[\"ScreenRecorderConfigB\"]!!\n         assert(mScreenRecorderConfigB.size == 1)\n         val mScreenRecorderConfigBDescriptor = mScreenRecorderConfigB.first()\n         val mScreenRecorderConfigBMethod: Method =\n             mScreenRecorderConfigBDescriptor.getMethodInstance(lpparam.classLoader)\n         // XposedBridge.log(\"Cemiuiler: DeviceModify (Updater) dexkit method is $systemPropertiesMethod\")\n         mScreenRecorderConfigBMethod.createHook {\n             before { param ->\n                 param.args[0] = 1200\n                 param.args[1] = 1\n                 param.method.declaringClass.declaredFields.firstOrNull { field ->\n                     field.also {\n                         it.isAccessible = true\n                     }.let { fieldAccessible ->\n                         fieldAccessible.isFinal &&\n                             fieldAccessible.get(null).let {\n                                 runCatching {\n                                     (it as IntArray).contentEquals(intArrayOf(200, 100, 50, 32, 24, 16, 8, 6, 4, 1))\n                                 }.getOrDefault(false)\n                             }\n                     }\n                 }?.set(null, intArrayOf(1200, 800, 400, 200, 100, 50, 32, 24, 16, 8, 6, 4, 1))\n             }\n         }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenrecorder/UnlockMoreVolumeFrom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenrecorder;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class UnlockMoreVolumeFrom extends BaseHook {\n    @Override\n    public void init() {\n        Class<?> mVolumeFrom = findClassIfExists(\"w0.a\");\n        findAndHookConstructor(\"w0.a\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.setStaticBooleanField(mVolumeFrom, \"h\", true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenshot/DeviceShellCustomize.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenshot\n\nimport android.os.Build\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.ClassUtils.setStaticObject\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DeviceShellCustomize : BaseHook() {\n     private lateinit var device: String\n     private val deviceS by lazy {\n         mPrefsMap.getString(\"screenshot_device_customize\", \"\")\n     }\n\n     override fun init() {\n         loadClass(\"com.miui.gallery.editor.photo.screen.shell.res.ShellResourceFetcher\").methodFinder()\n             .filterByName(\"getResId\")\n             .first().createHook {\n                 before {\n                     if (!this@DeviceShellCustomize::device.isInitialized) {\n                         device = Build.DEVICE\n                     }\n                     setStaticObject(loadClass(\"android.os.Build\"), \"DEVICE\", deviceS)\n                 }\n\n                 after {\n                     setStaticObject(loadClass(\"android.os.Build\"), \"DEVICE\", device)\n                 }\n             }\n     }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenshot/SaveToPictures.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenshot\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XposedHelpers\n\nobject SaveToPictures : BaseHook() {\n    override fun init() {\n        val clazz = XposedHelpers.findClass(\"android.os.Environment\", lpparam.classLoader)\n        XposedHelpers.setStaticObjectField(clazz, \"DIRECTORY_DCIM\", \"Pictures\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenshot/UnlockMinimumCropLimit.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenshot\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport java.lang.reflect.Modifier\n\nobject UnlockMinimumCropLimit : BaseHook() {\n    private val mScreenCropViewMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                declaredClass {\n                    addUsingStringsEquals(\"fixImageBounds %f,%f\")\n                }\n                usingNumbers(0.5f, 200)\n                returnType = \"int\"\n                modifiers = Modifier.PRIVATE\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.first()\n    }\n\n    override fun init() {\n        mScreenCropViewMethod.createHook {\n            returnConstant(0)\n        }\n\n        /*val mScreenCropView =\n            findClassIfExists(\"com.miui.gallery.editor.photo.screen.crop.ScreenCropView\\$h\")\n        returnIntConstant(mScreenCropView, \"a\")*/\n    }\n\n    /*private fun returnIntConstant(cls: Class<*>?, methodName: String) {\n        findAndHookMethod(cls, methodName, XC_MethodReplacement.returnConstant(0))\n    }*/\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/screenshot/UnlockPrivacyMarking.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.screenshot\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject UnlockPrivacyMarking : BaseHook() {\n    override fun init() {\n        val isClass by lazy {\n            loadClass(\"com.miui.gallery.editor.photo.screen.mosaic.ScreenMosaicView\")\n        }\n\n        isClass.methodFinder().first {\n            name == \"isSupportPrivacyMarking\"\n        }.createHook {\n            try {\n                returnConstant(true)\n            } catch (e: Exception) {\n                XposedLogUtils.logW(\"UnSupport Privacy Marking\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/AppLockPinScramble.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter;\n\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\n\npublic class AppLockPinScramble extends BaseHook {\n\n\n    @Override\n    public void init() {\n\n        hookAllConstructors(\"com.miui.applicationlock.widget.MiuiNumericInputView\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                LinearLayout keys = (LinearLayout) param.thisObject;\n                ArrayList<View> mRandomViews = new ArrayList<>();\n                View bottom0 = null;\n                View bottom2 = null;\n                for (int row = 0; row <= 3; row++) {\n                    ViewGroup cols = (ViewGroup) keys.getChildAt(row);\n                    for (int col = 0; col <= 2; col++) {\n                        if (row == 3)\n                            if (col == 0) {\n                                bottom0 = cols.getChildAt(col);\n                                continue;\n                            } else if (col == 2) {\n                                bottom2 = cols.getChildAt(col);\n                                continue;\n                            }\n                        mRandomViews.add(cols.getChildAt(col));\n                    }\n                    cols.removeAllViews();\n                }\n\n                Collections.shuffle(mRandomViews);\n\n                int cnt = 0;\n                for (int row = 0; row <= 3; row++)\n                    for (int col = 0; col <= 2; col++) {\n                        ViewGroup cols = (ViewGroup) keys.getChildAt(row);\n                        if (row == 3)\n                            if (col == 0) {\n                                cols.addView(bottom0);\n                                continue;\n                            } else if (col == 2) {\n                                cols.addView(bottom2);\n                                continue;\n                            }\n                        cols.addView(mRandomViews.get(cnt));\n                        cnt++;\n                    }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/BlurSecurity.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter\n\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.ColorMatrixColorFilter\nimport android.graphics.RenderEffect\nimport android.graphics.drawable.LayerDrawable\nimport android.graphics.drawable.VectorDrawable\nimport android.os.Build\nimport android.util.AttributeSet\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.ImageView\nimport android.widget.ListView\nimport android.widget.TextView\nimport androidx.annotation.RequiresApi\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.ColorUtils\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.HookUtils\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.logW\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedBridge\nimport de.robv.android.xposed.XposedHelpers\n\nobject BlurSecurity : BaseHook() {\n    val blurRadius = mPrefsMap.getInt(\"security_center_blurradius\", 60)\n    val backgroundColor = mPrefsMap.getInt(\"security_center_color\", -1)\n    val shouldInvertColor = !ColorUtils.isDarkColor(backgroundColor)\n\n    private var appVersionCode = 40000727\n\n    // 反色 同时保持红蓝色变化不大\n    @RequiresApi(Build.VERSION_CODES.S)\n    val invertColorRenderEffect = RenderEffect.createColorFilterEffect(\n        ColorMatrixColorFilter(\n            floatArrayOf(\n                1f, 1f, -2f, 0f, 16f,\n                0f, 0f, 0f, 0f, 0f,\n                -3f, 1f, 2f, 0f, 16f,\n                0f, 0f, 0f, 0.85f, 0f\n            )\n        )\n    )\n\n    // 不反转颜色的名单ID或类名\n    // whiteList 不在列表内子元素也会反色\n    private val invertColorWhiteList = arrayOf(\"lv_main\", \"second_view\")\n\n    // keepList 列表内元素及其子元素不会反色\n    private val keepColorList = arrayOf(\"rv_information\")\n\n    override fun init() {\n        // if (getPackageVersionCode(lpparam) >= 40000790) return //暂时屏蔽高版本启用模糊，待修复后移除  //我觉得更像是傻逼miui的反色炸了\n        val turboLayoutClass = findClassIfExists(\n            \"com.miui.gamebooster.windowmanager.newbox.TurboLayout\"\n        ) ?: return\n        val newToolBoxTopViewClass = findClassIfExists(\n            \"com.miui.gamebooster.windowmanager.newbox.NewToolBoxTopView\"\n        ) ?: return\n\n        var newBoxClass: Class<*>? = null\n        turboLayoutClass.methods.forEach {\n            if (it.name == \"getDockLayout\") {\n                newBoxClass = it.returnType\n            }\n        }\n        if (newBoxClass == null) {\n            return\n        }\n\n        XposedBridge.hookAllConstructors(newBoxClass, object : XC_MethodHook() {\n            override fun afterHookedMethod(param: MethodHookParam) {\n                val view = param.thisObject as View\n                view.addOnAttachStateChangeListener(\n                    object :\n                        View.OnAttachStateChangeListener {\n                        @RequiresApi(Build.VERSION_CODES.S)\n                        override fun onViewAttachedToWindow(view: View) {\n                            // 已有背景 避免重复添加\n\n                            if (view.background != null) {\n                                if (HookUtils.isBlurDrawable(view.background)) {\n                                    return\n                                }\n                            }\n\n                            view.background =\n                                HookUtils.createBlurDrawable(view, blurRadius, 40, backgroundColor)\n                        }\n\n                        override fun onViewDetachedFromWindow(view: View) {\n                            view.background = null\n                        }\n                    })\n            }\n        })\n\n        XposedBridge.hookAllConstructors(newToolBoxTopViewClass, object : XC_MethodHook() {\n            override fun afterHookedMethod(param: MethodHookParam) {\n                val view = param.thisObject as View\n                view.addOnAttachStateChangeListener(\n                    object :\n                        View.OnAttachStateChangeListener {\n                        @RequiresApi(Build.VERSION_CODES.S)\n                        override fun onViewAttachedToWindow(view: View) {\n                            val viewPaernt = view.parent as ViewGroup\n                            val gameContentLayout = viewPaernt.parent as ViewGroup\n                            if (gameContentLayout.background != null) {\n                                if (HookUtils.isBlurDrawable(gameContentLayout.background)) {\n                                    return\n                                }\n                            }\n\n                            gameContentLayout.background =\n                                HookUtils.createBlurDrawable(gameContentLayout, blurRadius, 40, backgroundColor)\n\n                            if (shouldInvertColor) {\n                                invertViewColor(gameContentLayout)\n\n                                // 设置 RenderEffect 后会导致文字动画出现问题，故去除动画\n                                val performanceTextView = XposedHelpers.callMethod(\n                                    param.thisObject,\n                                    \"getPerformanceTextView\"\n                                ) as View\n                                XposedHelpers.findAndHookMethod(\n                                    performanceTextView.javaClass,\n                                    if (appVersionCode >= 40000749) \"e\" else \"a\",\n                                    Boolean::class.java,\n                                    object :\n                                        XC_MethodReplacement() {\n                                        override fun replaceHookedMethod(param: MethodHookParam?) {\n                                            param?.result = null\n                                        }\n                                    })\n                            }\n\n                            var headBackground =\n                                HookUtils.getValueByField(param.thisObject, \"j\")\n                            if (headBackground == null) {\n                                headBackground = HookUtils.getValueByField(param.thisObject, \"j\")\n                            } else if (!headBackground.javaClass.name.contains(\"ImageView\")) {\n                                headBackground = HookUtils.getValueByField(param.thisObject, \"C\")\n                            }\n                            if (headBackground == null) {\n                                return\n                            }\n                            if (headBackground.javaClass.name.contains(\"ImageView\")) {\n                                headBackground as ImageView\n                                headBackground.visibility = View.GONE\n                            }\n                        }\n\n                        override fun onViewDetachedFromWindow(view: View) {\n                            val viewPaernt = view.parent as ViewGroup\n                            val gameContentLayout = viewPaernt.parent as ViewGroup\n                            gameContentLayout.background = null\n                        }\n                    })\n            }\n        })\n\n        // if (getPackageVersionCode(lpparam) >= 40000754) {\n        dexKitBridge.findMethod {\n            matcher {\n                returnType = \"android.view.View\"\n                paramTypes = listOf(\"android.content.Context\", \"boolean\", \"boolean\")\n            }\n           /* methodReturnType = \"Landroid/view/View;\"\n            methodParamTypes = arrayOf(\"Landroid/content/Context;\", \"Z\", \"Z\")*/\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            after { param ->\n                val mainContent = HookUtils.getValueByField(param.thisObject, \"b\") as ViewGroup\n                mainContent.addOnAttachStateChangeListener(object :\n                    View.OnAttachStateChangeListener {\n                        @RequiresApi(Build.VERSION_CODES.S)\n                        override fun onViewAttachedToWindow(view: View) {\n                            if (view.background != null) {\n                                if (HookUtils.isBlurDrawable(view.background)) return\n                            }\n                            view.background =\n                                HookUtils.createBlurDrawable(view, blurRadius, 40, backgroundColor)\n\n                            if (shouldInvertColor) invertViewColor(mainContent)\n                        }\n\n                        override fun onViewDetachedFromWindow(view: View) {\n                            view.background = null\n                        }\n                    })\n                }\n        }\n\n        /*\n\n        XposedHelpers.findAndHookMethod(\n            videoBoxViewClass,\n            videoBoxViewMethodName,\n            Context::class.java,\n            Boolean::class.java,\n            Boolean::class.java,\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val mainContent = HookUtils.getValueByField(param.thisObject, \"b\") as ViewGroup\n                    mainContent.addOnAttachStateChangeListener(\n                        object :\n                            View.OnAttachStateChangeListener {\n                            @RequiresApi(Build.VERSION_CODES.S)\n                            override fun onViewAttachedToWindow(view: View) {\n                                if (view.background != null) {\n                                    if (HookUtils.isBlurDrawable(view.background)) {\n                                        return\n                                    }\n                                }\n\n                                view.background =\n                                    HookUtils.createBlurDrawable(view, blurRadius, 40, backgroundColor)\n\n                                if (shouldInvertColor) {\n                                    invertViewColor(mainContent)\n                                }\n                            }\n\n                            override fun onViewDetachedFromWindow(view: View) {\n                                view.background = null\n                            }\n                        })\n                }\n            })\n    } else {\n\n        XposedHelpers.findAndHookMethod(\n            videoBoxViewClass,\n            videoBoxViewMethodName,\n            Context::class.java,\n            Boolean::class.java,\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val mainContent = HookUtils.getValueByField(param.thisObject, \"b\") as ViewGroup\n                    mainContent.addOnAttachStateChangeListener(\n                        object :\n                            View.OnAttachStateChangeListener {\n                            @RequiresApi(Build.VERSION_CODES.S)\n                            override fun onViewAttachedToWindow(view: View) {\n                                if (view.background != null) {\n                                    if (HookUtils.isBlurDrawable(view.background)) {\n                                        return\n                                    }\n                                }\n\n                                view.background =\n                                    HookUtils.createBlurDrawable(view, blurRadius, 40, backgroundColor)\n\n                                if (shouldInvertColor) {\n                                    invertViewColor(mainContent)\n                                }\n                            }\n\n                            override fun onViewDetachedFromWindow(view: View) {\n                                view.background = null\n                            }\n                        })\n                }\n            })\n    }\n    */\n\n\n        if (shouldInvertColor) {\n            val detailSettingsLayoutClass = findClassIfExists(\n                \"com.miui.gamebooster.videobox.view.DetailSettingsLayout\"\n            ) ?: return\n            val srsLevelSeekBarProClass = findClassIfExists(\n                \"com.miui.gamebooster.videobox.view.SrsLevelSeekBarPro\"\n            ) ?: return\n            var srsLevelSeekBarInnerViewClass = findClassIfExists(\n                \"com.miui.gamebooster.videobox.view.c\"\n            )\n            if (srsLevelSeekBarInnerViewClass == null) {\n                srsLevelSeekBarInnerViewClass = findClassIfExists(\n                    \"b8.c\"\n                ) ?: return\n            }\n            val videoBoxWhiteList = arrayOf(\n                \"miuix.slidingwidget.widget.SlidingButton\",\n                \"android.widget.ImageView\",\n                \"android.widget.CompoundButton\",\n                \"com.miui.common.widgets.gif.GifImageView\",\n                \"com.miui.gamebooster.videobox.view.SrsLevelSeekBar\",\n                \"com.miui.gamebooster.videobox.view.SrsLevelSeekBarPro\",\n                \"com.miui.gamebooster.videobox.view.VideoEffectImageView\",\n                \"com.miui.gamebooster.videobox.view.DisplayStyleImageView\",\n                \"com.miui.gamebooster.videobox.view.c\",\n                \"b8.c\",\n                \"com.miui.gamebooster.videobox.view.VBIndicatorView\"\n            )\n\n            val gameBoxWhiteList = arrayOf(\n                \"audition_view\",\n                \"miuix.slidingwidget.widget.SlidingButton\"\n            )\n\n            val videoBoxKeepList = arrayOf(\"img_wrapper2\")\n            val gameBoxKeepList = arrayOf(\n                \"rl_header\",\n                \"tv_barrage_color_pick\",\n                \"seekbar_text_size\",\n                \"seekbar_text_speed\"\n            )\n\n            var secondViewClass =\n                findClassIfExists(\"com.miui.gamebooster.windowmanager.newbox.n\")\n            var secondViewMethodName = \"b\"\n\n            if (appVersionCode >= 40000749) {\n                secondViewClass = findClassIfExists(\n                    \"com.miui.gamebooster.windowmanager.newbox.j\"\n                ) ?: return\n                secondViewMethodName = \"B\"\n            }\n            val auditionViewClass =\n                findClassIfExists(\"com.miui.gamebooster.customview.AuditionView\")\n                    ?: return\n\n            XposedBridge.hookAllMethods(\n                detailSettingsLayoutClass,\n                \"setFunctionType\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val marqueeTextView = HookUtils.getValueByField(param.thisObject, \"d\")\n                        if (marqueeTextView != null) {\n                            marqueeTextView as TextView\n                            marqueeTextView.setTextColor(Color.GRAY)\n                        }\n                        val listView = HookUtils.getValueByField(param.thisObject, \"c\") as ListView\n                        val listViewAdapterClassName = listView.adapter.javaClass.name\n                        val listViewAdapterInnerClass =\n                            findClassIfExists(\"$listViewAdapterClassName\\$a\")\n                                ?: return\n                        XposedBridge.hookAllMethods(\n                            listViewAdapterInnerClass,\n                            \"a\",\n                            object : XC_MethodHook() {\n                                @RequiresApi(Build.VERSION_CODES.S)\n                                override fun afterHookedMethod(param: MethodHookParam) {\n                                    val isSetupFunction =\n                                        param.args[0].toString().contains(\"BaseModel\")\n                                    if (isSetupFunction) {\n                                        listViewAdapterInnerClass.declaredFields.forEach { field ->\n                                            val currentObject = field.get(param.thisObject)\n                                            if (currentObject is ImageView) {\n                                                if (getId(currentObject) == \"img1\" || getId(\n                                                        currentObject\n                                                    ) == \"img2\"\n                                                ) {\n                                                    currentObject.setRenderEffect(\n                                                        RenderEffect.createColorFilterEffect(\n                                                            ColorMatrixColorFilter(\n                                                                floatArrayOf(\n                                                                    1f, 0f, 0f, 0f, 0f,\n                                                                    0f, 1f, 0f, 0f, 0f,\n                                                                    0f, 0f, 1f, 0f, 0f,\n                                                                    0.5f, 0.5f, 0.5f, 0f, 0f\n                                                                )\n                                                            )\n                                                        )\n                                                    )\n                                                }\n                                            }\n                                            if (currentObject is View) {\n                                                invertViewColor(\n                                                    currentObject,\n                                                    videoBoxWhiteList,\n                                                    videoBoxKeepList\n                                                )\n                                            }\n                                        }\n                                    }\n                                }\n                            })\n                    }\n                })\n\n\n            XposedLogUtils.logI(\"3\")\n\n            XposedHelpers.findAndHookMethod(\n                srsLevelSeekBarProClass,\n                if (appVersionCode >= 40000749) \"b\" else \"a\", Context::class.java,\n                AttributeSet::class.java, Int::class.java, object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val bgColorField = srsLevelSeekBarProClass.getDeclaredField(\"j\")\n                        bgColorField.isAccessible = true\n                        bgColorField.setInt(\n                            param.thisObject,\n                            ColorUtils.addAlphaForColor(Color.GRAY, 150)\n                        )\n\n                        val selectTxtColorField =\n                            srsLevelSeekBarProClass.getDeclaredField(\"l\")\n                        selectTxtColorField.isAccessible = true\n                        selectTxtColorField.setInt(\n                            param.thisObject,\n                            Color.WHITE\n                        )\n\n                        val normalTxtColorField =\n                            srsLevelSeekBarProClass.getDeclaredField(\"l\")\n                        normalTxtColorField.isAccessible = true\n                        normalTxtColorField.setInt(\n                            param.thisObject,\n                            Color.WHITE\n                        )\n                    }\n                }\n            )\n\n            XposedHelpers.findAndHookMethod(srsLevelSeekBarInnerViewClass, \"a\", Context::class.java,\n                AttributeSet::class.java, Int::class.java, object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val bgColorField = srsLevelSeekBarInnerViewClass.getDeclaredField(\"h\")\n                        bgColorField.isAccessible = true\n                        bgColorField.setInt(\n                            param.thisObject,\n                            ColorUtils.addAlphaForColor(Color.WHITE, 150)\n                        )\n                    }\n                }\n            )\n\n            XposedHelpers.findAndHookMethod(\n                secondViewClass,\n                secondViewMethodName,\n                View::class.java,\n                object : XC_MethodHook() {\n                    @RequiresApi(Build.VERSION_CODES.S)\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val view = param.args[0] as View\n                        invertViewColor(view, gameBoxWhiteList, gameBoxKeepList)\n                    }\n                })\n\n            // 让图标颜色更深一点\n            XposedHelpers.findAndHookMethod(\n                auditionViewClass,\n                if (appVersionCode >= 40000749) \"M\" else \"a\",\n                Context::class.java,\n                object : XC_MethodHook() {\n                    @RequiresApi(Build.VERSION_CODES.S)\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val view = HookUtils.getValueByField(param.thisObject, \"d\") as View\n                        val parentView = view.parent\n                        XposedLogUtils.logI(parentView.toString())\n                        if (parentView is ViewGroup) {\n                            val lastChild = parentView.getChildAt(parentView.childCount - 1)\n                            if (lastChild is ImageView && lastChild.drawable is VectorDrawable) {\n                                val oldDrawable = lastChild.drawable\n                                val newDrawable = LayerDrawable(\n                                    arrayOf(\n                                        oldDrawable,\n                                        oldDrawable,\n                                        oldDrawable,\n                                        oldDrawable,\n                                        oldDrawable\n                                    )\n                                )\n                                lastChild.setImageDrawable(newDrawable)\n                            }\n                        }\n                        invertViewColor(view, gameBoxWhiteList, gameBoxKeepList)\n                    }\n                })\n        }\n\n        XposedLogUtils.logI(\"4\")\n    }\n\n    // 尽量给最外层加 RenderEffect 而不是 最内层\n    // whiteList 不在名单内的子视图依旧反转\n    // keepList 本身及子视图均不反转\n    @RequiresApi(Build.VERSION_CODES.S)\n    fun invertViewColor(\n        view: View,\n        whiteList: Array<String> = invertColorWhiteList,\n        keepList: Array<String>? = keepColorList,\n    ) {\n        if (keepList != null) {\n            if (keepList.contains(getId(view))) {\n                return\n            }\n            if (keepList.contains(view.javaClass.name)) {\n                return\n            }\n        }\n        try {\n            if (isChildNeedInvertColor(view, whiteList, keepList)) {\n                view.setRenderEffect(invertColorRenderEffect)\n            } else {\n                if (view is ViewGroup) {\n                    for (index in 0 until view.childCount) {\n                        val childView = view.getChildAt(index)\n                        if (childView != null) {\n                            invertViewColor(childView, whiteList, keepList)\n                        }\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            logW(\"$TAG => invertViewColor\", e)\n        }\n    }\n\n    private fun isChildNeedInvertColor(\n        view: View,\n        whiteList: Array<String>,\n        keepList: Array<String>?,\n    ): Boolean {\n        val viewId = getId(view)\n        if (whiteList.contains(viewId)) {\n            return false\n        }\n        if (whiteList.contains(view.javaClass.name)) {\n            return false\n        }\n        if (keepList != null) {\n            if (keepList.contains(getId(view))) {\n                return false\n            }\n            if (keepList.contains(view.javaClass.name)) {\n                return false\n            }\n        }\n        try {\n            if (view is ViewGroup) {\n                for (index in 0 until view.childCount) {\n                    val childView = view.getChildAt(index)\n                    if (childView != null) {\n                        if (!isChildNeedInvertColor(childView, whiteList, keepList)) {\n                            return false\n                        }\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            logW(\"$TAG => isChildNeedInvertColor\", e)\n        }\n        return true\n    }\n\n    private fun getId(view: View): String {\n        return if (view.id == View.NO_ID) \"no-id\" else view.resources.getResourceName(view.id)\n            .replace(\"com.miui.securitycenter:id/\", \"\")\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/DisableReport.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject DisableReport : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"android.intent.action.VIEW\", \"com.xiaomi.market\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n\n        /* val result: List<DexMethodDescriptor> =\n             java.util.Objects.requireNonNull<List<DexMethodDescriptor>>(\n                 SecurityCenterDexKit.mSecurityCenterResultMap[\"IsShowReport\"]\n             )\n         for (descriptor in result) {\n             val isShowReport: java.lang.reflect.Method =\n                 descriptor.getMethodInstance(lpparam.classLoader)\n             log(\"isShowReport method is $isShowReport\")\n             if (isShowReport.returnType == Boolean::class.javaPrimitiveType) {\n                 XposedBridge.hookMethod(\n                     isShowReport,\n                     XC_MethodReplacement.returnConstant(false)\n                 )\n             }\n         }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/GetBubbleAppString.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject GetBubbleAppString : BaseHook() {\n    override fun init() {\n        try {\n            val classBubble = loadClass(\"com.miui.bubbles.Bubble\")\n            loadClass(\"com.miui.bubbles.settings.BubblesSettings\").methodFinder().first {\n                name == \"getBubbleAppString\"\n            }.createHook {\n                before {\n                    val stringBuilder = StringBuilder()\n                    val mActiveBubbles = it.thisObject.getObjectField(\"mActiveBubbles\")\n                    for (bubble in mActiveBubbles as HashSet<*>) {\n                        stringBuilder.append(\n                            classBubble.getMethod(\"getPackageName\").invoke(bubble)\n                        )\n                        stringBuilder.append(\":\")\n                        stringBuilder.append(bubble.getObjectField(\"userId\"))\n                        stringBuilder.append(\",\")\n                    }\n                    // XposedBridge.log(\"MaxFreeFormTest: getBubbleAppString called! Result:$stringBuilder\")\n                    it.result = stringBuilder.toString()\n                }\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logE(TAG, e)\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/IsSbnBelongToActiveBubbleApp.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject IsSbnBelongToActiveBubbleApp : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"com.miui.bubbles.settings.BubblesSettings\").methodFinder().first {\n                name == \"isSbnBelongToActiveBubbleApp\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/NewBoxBlur.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter;\n\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.graphics.drawable.GradientDrawable;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class NewBoxBlur extends BaseHook {\n\n    Class<?> mNewBoxCls;\n    Class<?> mTurboaLayout;\n    Class<?> mWindowManager;\n    Class<?> mVideoBoxCls;\n\n\n    Class<?> mTurboLayout;\n    Class<?> mDockLayout;\n\n    @Override\n    public void init() {\n\n        mDockLayout = findClassIfExists(\"com.miui.gamebooster.windowmanager.newbox.j\");\n        mTurboLayout = findClassIfExists(\"com.miui.gamebooster.windowmanager.newbox.TurboLayout\");\n\n        mNewBoxCls = findClassIfExists(\"com.miui.gamebooster.windowmanager.newbox.i\");\n        mTurboaLayout = findClassIfExists(\"com.miui.gamebooster.windowmanager.newbox.NewToolBoxTopView\");\n        mWindowManager = findClassIfExists(\"com.miui.gamebooster.windowmanager.j\");\n\n        mVideoBoxCls = findClassIfExists(\"com.miui.gamebooster.videobox.adapter.i\");\n\n\n        hookAllConstructors(mDockLayout, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ViewGroup view = (ViewGroup) param.thisObject;\n                int paddingVertical = DisplayUtils.dip2px(view.getContext(), mPrefsMap.getInt(\"security_center_newbox_bg_padding_vertical\", 10));\n                int paddingHorizontal = DisplayUtils.dip2px(view.getContext(), mPrefsMap.getInt(\"security_center_newbox_bg_padding_horizontal\", 10));\n                view.setPadding(paddingHorizontal, paddingVertical, paddingHorizontal, paddingVertical);\n                new BlurUtils(view, \"security_center_newbox_bg_custom\");\n            }\n        });\n\n        //\n        hookAllConstructors(mTurboLayout, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ViewGroup view = (ViewGroup) XposedHelpers.callMethod(param.thisObject, \"getDockLayout\");\n                new BlurUtils(view, \"security_center_newbox_bg_custom\");\n            }\n        });\n\n        /*findAndHookConstructor(mNewBoxCls, Context.class, boolean.class, String.class, mWindowManager, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View view = (View) param.thisObject;\n                new BlurUtils(view, \"various_new_box_blur\");\n\n            }\n        });*/\n\n\n        findAndHookMethod(mTurboaLayout, \"a\", boolean.class, boolean.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ImageView view = (ImageView) XposedHelpers.getObjectField(param.thisObject, \"j\");\n                GradientDrawable shapeDrawable = new GradientDrawable();\n                shapeDrawable.setColor(Color.TRANSPARENT);\n                view.setImageDrawable(shapeDrawable);\n            }\n        });\n\n        findAndHookMethod(mTurboaLayout, \"onAttachedToWindow\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View view = (View) param.thisObject;\n                new BlurUtils(view, \"security_center_newbox_bg_custom\");\n            }\n        });\n\n        findAndHookMethod(mVideoBoxCls, \"a\", Context.class, boolean.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ViewGroup viewGroup = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, \"b\");\n                new BlurUtils(viewGroup, \"security_center_newbox_bg_custom\");\n            }\n        });\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/RemoveConversationBubbleSettingsRestriction.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.util.ArrayMap\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport org.lsposed.hiddenapibypass.HiddenApiBypass\n\nclass RemoveConversationBubbleSettingsRestriction : BaseHook() {\n    @SuppressLint(\"PrivateApi\")\n    override fun init() {\n        loadClass(\"com.miui.bubbles.settings.BubblesSettings\").methodFinder().first {\n            name == \"getDefaultBubbles\"\n        }.createHook {\n            before { param ->\n                val classBubbleApp = loadClass(\"com.miui.bubbles.settings.BubbleApp\")\n                val arrayMap = ArrayMap<String, Any>()\n                val mContext =\n                    param.thisObject.getObjectField(\"mContext\") as Context\n                val mCurrentUserId =\n                    param.thisObject.getObjectField(\"mCurrentUserId\") as Int\n                val freeformSuggestionList = HiddenApiBypass.invoke(\n                    Class.forName(\"android.util.MiuiMultiWindowUtils\"),\n                    null,\n                    \"getFreeformSuggestionList\",\n                    mContext\n                ) as List<*>\n                if (freeformSuggestionList.isNotEmpty()) {\n                    for (str in freeformSuggestionList) {\n                        val bubbleApp = classBubbleApp.getConstructor(\n                            String::class.java, Int::class.java\n                        ).newInstance(str, mCurrentUserId)\n                        classBubbleApp.getMethod(\"setChecked\", Boolean::class.java)\n                            .invoke(bubbleApp, true)\n                        arrayMap[str as String] = bubbleApp\n                    }\n                }\n                param.result = arrayMap\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/RemoveOpenAppConfirmationPopup.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter\n\nimport android.annotation.SuppressLint\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass RemoveOpenAppConfirmationPopup : BaseHook() {\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        loadClass(\"android.widget.TextView\").methodFinder().first {\n            name == \"setText\" && parameterTypes[0] == CharSequence::class.java\n        }.createHook {\n            after {\n                val textView = it.thisObject as TextView\n                if (it.args.isNotEmpty() && it.args[0]?.toString().equals(\n                        textView.context.resources.getString(\n                            textView.context.resources.getIdentifier(\n                                \"button_text_accept\",\n                                \"string\",\n                                textView.context.packageName\n                            )\n                        )\n                    )\n                ) {\n                    textView.performClick()\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/SidebarLineCustom.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.callbacks.XC_InitPackageResources\n\nobject SidebarLineCustom : BaseHook() {\n\n    override fun init() {}\n\n    fun initResource(resParam: XC_InitPackageResources.InitPackageResourcesParam) {\n        val mSidebarLineColorDefault = mPrefsMap.getInt(\"security_center_sidebar_line_color_default\", -1294740525)\n        val mSidebarLineColorDark = mPrefsMap.getInt(\"security_center_sidebar_line_color_dark\", -6842473)\n        val mSidebarLineColorLight = mPrefsMap.getInt(\"security_center_sidebar_line_color_light\", -872415232)\n        XposedLogUtils.logI(\"mSidebarLineColorDefault is $mSidebarLineColorDefault\")\n        XposedLogUtils.logI(\"mSidebarLineColorDark is $mSidebarLineColorDark\")\n        XposedLogUtils.logI(\"mSidebarLineColorLight is $mSidebarLineColorLight\")\n        resParam.res.setReplacement(\n            \"com.miui.securitycenter\",\n            \"color\",\n            \"sidebar_line_color\",\n            mSidebarLineColorDefault\n        )\n        resParam.res.setReplacement(\n            \"com.miui.securitycenter\",\n            \"color\",\n            \"sidebar_line_color_dark\",\n            mSidebarLineColorLight\n        )\n        resParam.res.setReplacement(\n            \"com.miui.securitycenter\",\n            \"color\",\n            \"sidebar_line_color_light\",\n            mSidebarLineColorDark\n        )\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/VideoDolbyOpen.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter;\n\nimport androidx.annotation.NonNull;\n\nimport com.github.kyuubiran.ezxhelper.HookFactory;\nimport com.github.kyuubiran.ezxhelper.interfaces.IMethodHookCallback;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DexKit;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport org.luckypray.dexkit.query.FindMethod;\nimport org.luckypray.dexkit.query.matchers.ClassMatcher;\nimport org.luckypray.dexkit.query.matchers.MethodMatcher;\nimport org.luckypray.dexkit.result.MethodData;\n\nimport java.util.function.Consumer;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class VideoDolbyOpen extends BaseHook {\n    @Override\n    public void init() {\n        // try {\n        //     findClassIfExists(\"com.miui.gamebooster.service.DockWindowManagerService\").getDeclaredMethod(\"N\");\n        //     findAndHookMethod(\"com.miui.gamebooster.service.DockWindowManagerService\", \"N\", new MethodHook() {\n        //         @Override\n        //         protected void before(MethodHookParam param) {\n        //             XposedLogUtils.logI(\"Hook N\");\n        //             param.setResult(null);\n        //         }\n        //     });\n        // } catch (NoSuchMethodException e) {\n        //     XposedLogUtils.logI(\"Don't Find DockWindowManagerService$N\");\n        // }\n\n        // 查找类\n        // ClassData data = DexKit.INSTANCE.getDexKitBridge().findClass(FindClass.create()\n        //     .searchPackages(\"com.miui.gamebooster.service\")\n        //     .matcher(ClassMatcher.create()\n        //         .className(\"com.miui.gamebooster.service.DockWindowManagerService\")\n        //     )\n        // ).firstOrThrow(() -> new IllegalStateException(\"VideoDolbyOpen: No class found ClassData\"));\n        // // 类加入列表\n        // List<ClassData> list = Collections.singletonList(data);\n\n        // 查找方法\n        MethodData methodData = DexKit.INSTANCE.getDexKitBridge().findMethod(\n            FindMethod.create()\n                .matcher(MethodMatcher.create()\n                    .declaredClass(ClassMatcher.create()\n                        .usingStrings(\"checkMiGamePermission error\"))\n                    .usingStrings(\"dolby\")\n                )\n        ).firstOrThrow(() -> new IllegalStateException(\"VideoDolbyOpen: No class found MethodData\"));\n\n        // 执行Hook\n        try {\n            HookFactory.createMethodHook(methodData.getMethodInstance(lpparam.classLoader), new Consumer<>() {\n                @Override\n                public void accept(HookFactory hookFactory) {\n                    hookFactory.before(\n                        new IMethodHookCallback() {\n                            @Override\n                            public void onMethodHooked(@NonNull XC_MethodHook.MethodHookParam methodHookParam) {\n                                methodHookParam.setResult(null);\n                            }\n                        }\n                    );\n                }\n            });\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"NoSuchMethodException: \" + e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/app/AppDefaultSort.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.app;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\nimport androidx.fragment.app.Fragment;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Field;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AppDefaultSort extends BaseHook {\n\n    Class<?> mAppManagerCls;\n    String fragCls = null;\n\n    @Override\n    public void init() {\n\n        mAppManagerCls = findClassIfExists(\"com.miui.appmanager.AppManagerMainActivity\");\n\n        findAndHookMethod(mAppManagerCls, \"onCreate\", Bundle.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.args[0] = checkBundle((Context) param.thisObject, (Bundle) param.args[0]);\n                Class<?> mFragXCls = findClassIfExists(\"androidx.fragment.app.Fragment\");\n                Field[] fields = param.thisObject.getClass().getDeclaredFields();\n                for (Field field : fields) {\n                    if (Fragment.class.isAssignableFrom(field.getType()) || (mFragXCls != null && mFragXCls.isAssignableFrom(field.getType()))) {\n                        fragCls = field.getType().getCanonicalName();\n                        break;\n                    }\n                }\n                if (fragCls != null) {\n                    hookAllMethods(fragCls, \"onActivityCreated\", new MethodHook() {\n                        @Override\n                        protected void before(final MethodHookParam param) throws Throwable {\n                            try {\n                                param.args[0] = checkBundle((Context) XposedHelpers.callMethod(param.thisObject, \"getContext\"), (Bundle) param.args[0]);\n                            } catch (Throwable t) {\n                                XposedLogUtils.logE(\"AppDefaultSortHook\", \"\", t);\n                            }\n                        }\n                    });\n                }\n            }\n        });\n    }\n\n    public static Bundle checkBundle(Context context, Bundle bundle) {\n        if (context == null) {\n            XposedLogUtils.logI(\"AppDefaultSort\", \"Context is null!\");\n            return null;\n        }\n        if (bundle == null) bundle = new Bundle();\n        int order = Integer.parseInt(PrefsUtils.getSharedStringPrefs(context, \"prefs_key_security_center_app_default_sort\", \"0\"));\n        bundle.putInt(\"current_sory_type\", order - 1);\n        bundle.putInt(\"current_sort_type\", order - 1);\n        return bundle;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/app/AppDetails.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.app;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.ClipData;\nimport android.content.ClipboardManager;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.PackageInfo;\nimport android.content.res.Resources;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.os.UserHandle;\nimport android.widget.Toast;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.XposedUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Member;\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AppDetails extends BaseHook {\n\n    Class<?> mAmAppInfoCls;\n    Class<?> mFragmentCls;\n\n    private Object mSupportFragment = null;\n    private PackageInfo mLastPackageInfo;\n\n    @Override\n    public void init() {\n\n        mAmAppInfoCls = findClassIfExists(\"com.miui.appmanager.AMAppInfomationActivity\");\n        mFragmentCls = findClassIfExists(\"androidx.fragment.app.Fragment\");\n\n        if (mAmAppInfoCls != null) {\n            boolean oldMethodFound = false;\n\n            for (Member method : mAmAppInfoCls.getDeclaredMethods()) {\n                if (\"onLoadFinished\".equals(method.getName())) {\n                    oldMethodFound = true;\n                }\n            }\n\n            if (mFragmentCls != null) {\n                findAndHookConstructor(mFragmentCls, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        Field piField = XposedHelpers.findFirstFieldByExactType(param.thisObject.getClass(), PackageInfo.class);\n                        if (piField != null) {\n                            mSupportFragment = param.thisObject;\n                        }\n                    }\n                });\n            }\n\n            if (!oldMethodFound) {\n                findAndHookMethod(mAmAppInfoCls, \"onCreate\", Bundle.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        Handler handler = new Handler(Looper.getMainLooper());\n                        handler.post(() -> {\n                            final Activity act = (Activity) param.thisObject;\n                            Object contentFrag = act.getFragmentManager().findFragmentById(android.R.id.content);\n                            Object frag = contentFrag != null ? contentFrag : mSupportFragment;\n                            if (frag == null) {\n                                XposedLogUtils.logI(TAG, \"Unable to find fragment\");\n                                return;\n                            }\n\n                            final Resources modRes;\n                            try {\n                                modRes = XposedUtils.getModuleRes(act);\n                                Field piField = XposedHelpers.findFirstFieldByExactType(frag.getClass(), PackageInfo.class);\n                                mLastPackageInfo = (PackageInfo) piField.get(frag);\n                                Method[] addPref = XposedHelpers.findMethodsByExactParameters(frag.getClass(), void.class, String.class, String.class, String.class);\n                                if (mLastPackageInfo == null || addPref.length == 0) {\n                                    XposedLogUtils.logI(TAG, \"Unable to find field/class/method in SecurityCenter to hook\");\n                                    return;\n                                } else {\n                                    addPref[0].setAccessible(true);\n                                }\n                                addPref[0].invoke(frag, \"apk_versioncode\", modRes.getString(R.string.app_details_apk_version_code), String.valueOf(mLastPackageInfo.versionCode));\n                                addPref[0].invoke(frag, \"app_uid\", modRes.getString(R.string.app_details_app_uid), String.valueOf(mLastPackageInfo.applicationInfo.uid));\n                                addPref[0].invoke(frag, \"data_path\", modRes.getString(R.string.app_details_data_path), mLastPackageInfo.applicationInfo.dataDir);\n                                addPref[0].invoke(frag, \"apk_filename\", modRes.getString(R.string.app_details_apk_file), mLastPackageInfo.applicationInfo.sourceDir);\n                                addPref[0].invoke(frag, \"min_sdk\", modRes.getString(R.string.app_details_min_sdk), String.valueOf(mLastPackageInfo.applicationInfo.minSdkVersion));\n                                addPref[0].invoke(frag, \"target_sdk\", modRes.getString(R.string.app_details_sdk), String.valueOf(mLastPackageInfo.applicationInfo.targetSdkVersion));\n                                handler.post(() -> {\n                                    try {\n                                        addPref[0].invoke(frag, \"open_in_market\", modRes.getString(R.string.app_details_playstore), \"\");\n                                        addPref[0].invoke(frag, \"open_in_app\", modRes.getString(R.string.app_details_launch), \"\");\n                                    } catch (Throwable t) {\n                                        XposedLogUtils.logW(TAG, \"1\", t);\n                                    }\n                                });\n                            } catch (Throwable t) {\n                                XposedLogUtils.logW(TAG, \"2\", t);\n                                return;\n                            }\n\n                            hookAllMethods(frag.getClass(), \"onPreferenceTreeClick\", new MethodHook() {\n                                @SuppressLint(\"DiscouragedApi\")\n                                @Override\n                                protected void before(MethodHookParam param1) throws Throwable {\n                                    String key = (String) XposedHelpers.callMethod(param1.args[0], \"getKey\");\n                                    String title = (String) XposedHelpers.callMethod(param1.args[0], \"getTitle\");\n                                    switch (key) {\n                                        case \"apk_filename\" -> {\n                                            ((ClipboardManager) act.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText(title, mLastPackageInfo.applicationInfo.sourceDir));\n                                            Toast.makeText(act, act.getResources().getIdentifier(\"app_manager_copy_pkg_to_clip\", \"string\", act.getPackageName()), Toast.LENGTH_SHORT).show();\n                                            param1.setResult(true);\n                                        }\n                                        case \"data_path\" -> {\n                                            ((ClipboardManager) act.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText(title, mLastPackageInfo.applicationInfo.dataDir));\n                                            Toast.makeText(act, act.getResources().getIdentifier(\"app_manager_copy_pkg_to_clip\", \"string\", act.getPackageName()), Toast.LENGTH_SHORT).show();\n                                            param1.setResult(true);\n                                        }\n                                        case \"open_in_market\" -> {\n                                            try {\n                                                Intent launchIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(\"market://details?id=\" + mLastPackageInfo.packageName));\n                                                launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);\n                                                act.startActivity(launchIntent);\n                                            } catch (\n                                                android.content.ActivityNotFoundException anfe) {\n                                                Intent launchIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(\"https://play.google.com/store/apps/details?id=\" + mLastPackageInfo.packageName));\n                                                launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);\n                                                act.startActivity(launchIntent);\n                                            }\n                                            param1.setResult(true);\n                                        }\n                                        case \"open_in_app\" -> {\n                                            Intent launchIntent = act.getPackageManager().getLaunchIntentForPackage(mLastPackageInfo.packageName);\n                                            if (launchIntent == null) {\n                                                Toast.makeText(act, modRes.getString(R.string.app_details_nolaunch), Toast.LENGTH_SHORT).show();\n                                            } else {\n                                                int user = 0;\n                                                try {\n                                                    int uid = act.getIntent().getIntExtra(\"am_app_uid\", -1);\n                                                    user = (int) XposedHelpers.callStaticMethod(UserHandle.class, \"getUserId\", uid);\n                                                } catch (Throwable t) {\n                                                    XposedLogUtils.logW(TAG, \"3\", t);\n                                                }\n\n                                                launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);\n                                                if (user != 0) {\n                                                    try {\n                                                        XposedHelpers.callMethod(act, \"startActivityAsUser\", launchIntent, XposedHelpers.newInstance(UserHandle.class, user));\n                                                    } catch (Throwable t) {\n                                                        XposedLogUtils.logW(TAG, \"4\", t);\n                                                    }\n                                                } else {\n                                                    act.startActivity(launchIntent);\n                                                }\n                                            }\n                                            param.setResult(true);\n                                        }\n                                    }\n                                }\n                            });\n                        });\n                    }\n                });\n            }\n        } else {\n            XposedLogUtils.logI(TAG, \"Cannot find activity class!\");\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/app/AppDisable.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.app;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.res.Resources;\nimport android.os.Handler;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.widget.Toast;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.XposedUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Field;\nimport java.util.ArrayList;\nimport java.util.Arrays;\n\nimport de.robv.android.xposed.XposedHelpers;\n\n@SuppressLint(\"DiscouragedApi\")\npublic class AppDisable extends BaseHook {\n\n    public ArrayList<String> mMiuiCoreApps;\n\n    @Override\n    public void init() {\n\n        findAndHookMethod(\"com.miui.appmanager.ApplicationsDetailsActivity\", \"onCreateOptionsMenu\", Menu.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Activity act = (Activity) param.thisObject;\n                Menu menu = (Menu) param.args[0];\n                MenuItem dis = menu.add(0, 666, 1, act.getResources().getIdentifier(\"app_manager_disable_text\", \"string\", lpparam.packageName));\n                dis.setIcon(act.getResources().getIdentifier(\"action_button_stop_svg\", \"drawable\", lpparam.packageName));\n                dis.setEnabled(true);\n                dis.setShowAsAction(1);\n                // XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mDisableButton\", dis);\n\n                PackageManager pm = act.getPackageManager();\n                Field piField = XposedHelpers.findFirstFieldByExactType(act.getClass(), PackageInfo.class);\n                PackageInfo mPackageInfo = (PackageInfo) piField.get(act);\n                ApplicationInfo appInfo = pm.getApplicationInfo(mPackageInfo.packageName, PackageManager.GET_META_DATA);\n                boolean isSystem = (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;\n                boolean isUpdatedSystem = (appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;\n\n                dis.setTitle(act.getResources().getIdentifier(appInfo.enabled ? \"app_manager_disable_text\" : \"app_manager_enable_text\", \"string\", lpparam.packageName));\n\n                mMiuiCoreApps = new ArrayList<>(Arrays.asList(act.getResources().getStringArray(R.array.miui_core_app_package_name)));\n\n                if (mMiuiCoreApps.contains(mPackageInfo.packageName)) {\n                    dis.setEnabled(false);\n                }\n\n                if (!appInfo.enabled || (isSystem && !isUpdatedSystem)) {\n                    MenuItem item = menu.findItem(2);\n                    if (item != null) item.setVisible(false);\n                }\n            }\n        });\n\n        findAndHookMethod(\"com.miui.appmanager.ApplicationsDetailsActivity\", \"onOptionsItemSelected\", MenuItem.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                MenuItem item = (MenuItem) param.args[0];\n\n                if (item != null && item.getItemId() == 666) {\n                    Activity act = (Activity) param.thisObject;\n                    Resources modRes = XposedUtils.getModuleRes(act);\n                    Field piField = XposedHelpers.findFirstFieldByExactType(act.getClass(), PackageInfo.class);\n                    PackageInfo mPackageInfo = (PackageInfo) piField.get(act);\n\n                    if (mMiuiCoreApps.contains(mPackageInfo.packageName)) {\n                        Toast.makeText(act, modRes.getString(R.string.disable_app_settings), Toast.LENGTH_SHORT).show();\n                        return;\n                    }\n\n                    PackageManager pm = act.getPackageManager();\n                    ApplicationInfo appInfo = pm.getApplicationInfo(mPackageInfo.packageName, PackageManager.GET_META_DATA);\n                    boolean isSystem = (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;\n                    int state = pm.getApplicationEnabledSetting(mPackageInfo.packageName);\n                    boolean isEnabledOrDefault = (state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED || state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);\n                    if (isEnabledOrDefault) {\n                        if (isSystem) {\n                           /* String title = modRes.getString(R.string.disable_app_title);\n                            String text = modRes.getString(R.string.disable_app_text);\n                            new AlertDialog.Builder(act)\n                                .setTitle(title)\n                                .setMessage(text)\n                                .setPositiveButton(android.R.string.ok, (dialog, which) -> setAppState(act, mPackageInfo.packageName, item, false))\n                                .setNegativeButton(android.R.string.cancel, null)\n                                .show();*/\n                            setAppState(act, mPackageInfo.packageName, item, false);\n                        } else {\n                            setAppState(act, mPackageInfo.packageName, item, false);\n                        }\n                    } else {\n                        setAppState(act, mPackageInfo.packageName, item, true);\n                    }\n                    param.setResult(true);\n                }\n            }\n        });\n    }\n\n    private void setAppState(final Activity act, String pkgName, MenuItem item, boolean enable) {\n        try {\n            PackageManager pm = act.getPackageManager();\n            pm.setApplicationEnabledSetting(pkgName, enable ? PackageManager.COMPONENT_ENABLED_STATE_DEFAULT : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);\n            int state = pm.getApplicationEnabledSetting(pkgName);\n            boolean isEnabledOrDefault = (state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED || state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);\n            if ((enable && isEnabledOrDefault) || (!enable && !isEnabledOrDefault)) {\n                item.setTitle(act.getResources().getIdentifier(enable ? \"app_manager_disable_text\" : \"app_manager_enable_text\", \"string\", \"com.miui.securitycenter\"));\n                Toast.makeText(act, act.getResources().getIdentifier(enable ? \"app_manager_enabled\" : \"app_manager_disabled\", \"string\", \"com.miui.securitycenter\"), Toast.LENGTH_SHORT).show();\n            } else {\n                Toast.makeText(act, XposedUtils.getModuleRes(act).getString(R.string.disable_app_fail), Toast.LENGTH_LONG).show();\n            }\n            new Handler().postDelayed(act::invalidateOptionsMenu, 500);\n        } catch (Throwable t) {\n            XposedLogUtils.logW(TAG, \"\", t);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/app/AppRestrict.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.app;\n\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageManager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AppRestrict extends BaseHook {\n\n    Class<?> mAppManageUtils;\n\n    @Override\n    public void init() {\n        mAppManageUtils = findClassIfExists(\"com.miui.appmanager.AppManageUtils\");\n\n        Method[] mGetAppInfo = XposedHelpers.findMethodsByExactParameters(mAppManageUtils, ApplicationInfo.class, Object.class, PackageManager.class, String.class, int.class, int.class);\n\n        if (mGetAppInfo.length == 0) {\n            XposedLogUtils.logI(TAG, \"Cannot find getAppInfo method!\");\n        } else {\n            hookMethod(mGetAppInfo[0], new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    if ((int) param.args[3] == 128 && (int) param.args[4] == 0) {\n                        ApplicationInfo appInfo = (ApplicationInfo) param.getResult();\n                        appInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM;\n                        param.setResult(appInfo);\n                    }\n                }\n            });\n        }\n\n        findAndHookMethod(\"com.miui.networkassistant.ui.fragment.ShowAppDetailFragment\", \"initFirewallData\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                Object mAppInfo = XposedHelpers.getObjectField(param.thisObject, \"mAppInfo\");\n                if (mAppInfo != null) XposedHelpers.setBooleanField(mAppInfo, \"isSystemApp\", false);\n            }\n        });\n\n        hookAllMethods(\"com.miui.networkassistant.service.FirewallService\", \"setSystemAppWifiRuleAllow\", XC_MethodReplacement.DO_NOTHING);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/app/OpenByDefaultSetting.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.app\n\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.content.Intent\nimport android.content.pm.verify.domain.DomainVerificationManager\nimport android.net.Uri\nimport android.os.Build\nimport android.view.View\nimport androidx.annotation.RequiresApi\nimport com.github.kyuubiran.ezxhelper.EzXHelper.appContext\nimport com.sevtinge.cemiuiler.R\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\n\n\nobject OpenByDefaultSetting : BaseHook() {\n    @RequiresApi(Build.VERSION_CODES.S)\n    override fun init() {\n        val domainVerificationManager: DomainVerificationManager by lazy {\n            appContext.getSystemService(\n                DomainVerificationManager::class.java\n            )\n        }\n\n        val defaultViewId = intArrayOf(-1)\n        Helpers.findAndHookMethod(\n            \"com.miui.appmanager.ApplicationsDetailsActivity\",\n            lpparam.classLoader,\n            \"initView\",\n            object : MethodHook() {\n                @SuppressLint(\"DiscouragedApi\")\n                @Throws(Throwable::class)\n                override fun before(param: MethodHookParam) {\n                    if (defaultViewId[0] == -1) {\n                        val act = param.thisObject as Activity\n                        val pkgName = (param.thisObject as Activity).intent.getStringExtra(\"package_name\")!!\n                        val isLinkHandlingAllowed =\n                            domainVerificationManager.getDomainVerificationUserState(\n                                pkgName\n                            )?.isLinkHandlingAllowed ?: false\n                        val subTextId =\n                            if (isLinkHandlingAllowed) R.string.app_link_open_always else R.string.app_link_open_never\n\n                        defaultViewId[0] = act.resources.getIdentifier(\n                            \"am_detail_default\",\n                            \"id\",\n                            \"com.miui.securitycenter\"\n                        )\n                        mResHook.setResReplacement(\n                            \"com.miui.securitycenter\",\n                            \"string\",\n                            \"app_manager_default_open_title\",\n                            R.string.open_by_default\n                        )\n\n                        mResHook.setResReplacement(\n                            \"com.miui.securitycenter\",\n                            \"string\",\n                            \"app_manager_default_close_summary\",\n                            subTextId\n                        )\n                        mResHook.setResReplacement(\n                            \"com.miui.securitycenter\",\n                            \"string\",\n                            \"app_manager_default_open_summary\",\n                            subTextId\n                        )\n                    }\n                }\n            })\n\n        Helpers.findAndHookMethod(\"com.miui.appmanager.ApplicationsDetailsActivity\",\n            lpparam.classLoader,\n            \"onClick\",\n            View::class.java,\n            object : MethodHook() {\n                @Throws(Throwable::class)\n                override fun before(param: MethodHookParam) {\n                    val view = param.args[0] as View\n                    if (view.id == defaultViewId[0] && defaultViewId[0] != -1) {\n                        val act = param.thisObject as Activity\n                        val intent = Intent(\"android.settings.APP_OPEN_BY_DEFAULT_SETTINGS\")\n                        val pkgName = act.intent.getStringExtra(\"package_name\")\n                        intent.setData(Uri.parse(\"package:$pkgName\"))\n                        act.startActivity(intent)\n                        param.setResult(null)\n                    }\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/battery/ScreenUsedTime.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.battery\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.Log\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject ScreenUsedTime : BaseHook() {\n    private val cls by lazy {\n        dexKitBridge.findClass {\n            matcher {\n                addUsingStringsEquals(\"not support screenPowerSplit\", \"PowerRankHelperHolder\")\n            }\n        }.first().getInstance(EzXHelper.classLoader)\n    }\n    private val method1 by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"ishtar\", \"nuwa\", \"fuxi\")\n            }\n        }.first().getMethodInstance(EzXHelper.classLoader)\n    }\n    private val method2 by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                declaredClass = cls.name\n                returnType = \"boolean\"\n                // paramTypes = listOf() 2.0.0-rc3 已经修复此错误，可以使用\n                paramCount = 0\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.toList()\n    }\n\n    override fun init() {\n        Log.i(\"methods2 :$method2\")\n        method2.forEach {\n            it.createHook {\n                returnConstant(\n                    when (it) {\n                        method1 -> true\n                        else -> false\n                    }\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/battery/ShowBatteryTemperature.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.battery;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.IntentFilter;\nimport android.content.res.Configuration;\nimport android.graphics.Color;\nimport android.graphics.Typeface;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ShowBatteryTemperature extends BaseHook {\n\n    Class<?> mBatteryFragment;\n    Class<?> mBatteryFragment$a;\n\n    @Override\n    public void init() {\n        mBatteryFragment = findClassIfExists(\"com.miui.powercenter.BatteryFragment\", \"com.miui.powercenter.a\");\n        mBatteryFragment$a = findClassIfExists(\"com.miui.powercenter.BatteryFragment$a\", \"com.miui.powercenter.a$a\");\n\n        Method[] methods = mBatteryFragment.getDeclaredMethods();\n        for (Method method : methods) {\n            if (method.getReturnType() == String.class && method.getParameterCount() == 1) {\n                hookMethod(method, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        String mBatteryTemperature = String.valueOf(getBatteryTemperature((Context) param.args[0]));\n                        param.setResult(mBatteryTemperature);\n                    }\n                });\n            }\n        }\n\n        findAndHookMethod(mBatteryFragment$a, \"run\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View view = (View) XposedHelpers.getObjectField(param.thisObject, \"a\");\n                Context mContext = view.getContext();\n                boolean isDarkMode = (mContext.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;\n                int currentTemperatureStateId = mContext.getResources().getIdentifier(\"current_temperature_state\", \"id\", \"com.miui.securitycenter\");\n\n                TextView mTemperatureStateTv = view.findViewById(currentTemperatureStateId);\n                applyTextView(mContext, mTemperatureStateTv);\n\n                RelativeLayout mContainerView = (RelativeLayout) mTemperatureStateTv.getParent();\n                mContainerView.removeView(mTemperatureStateTv);\n\n                TextView mTemperatureUnit = new TextView(mContext);\n                applyTemperatureStyle(mContext, mTemperatureUnit, isDarkMode);\n\n                LinearLayout mTemperature = new LinearLayout(mContext);\n                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n                params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, mContainerView.getId());\n                params.setMargins(0, 0, 0, DisplayUtils.dip2px(mContext, 21.5f));\n                mTemperature.setLayoutParams(params);\n\n                mTemperature.addView(mTemperatureStateTv);\n                mTemperature.addView(mTemperatureUnit);\n\n                mContainerView.addView(mTemperature);\n            }\n        });\n    }\n\n    private void applyTextView(Context context, TextView tv) {\n        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n        tv.setLayoutParams(lp);\n        tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 34.6f);\n        tv.setGravity(Gravity.BOTTOM);\n        tv.setIncludeFontPadding(false);\n        tv.setTypeface(Typeface.create(null, 500, false));\n    }\n\n    private void applyTemperatureStyle(Context context, TextView tv, boolean isDarkMode) {\n        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);\n        lp.setMargins(DisplayUtils.dip2px(context, 3), 0, 0, 0);\n        tv.setLayoutParams(lp);\n        tv.setText(\"℃\");\n        tv.setTextColor(Color.parseColor(isDarkMode ? \"#e6e6e6\" : \"#333333\"));\n        tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);\n        tv.setGravity(Gravity.BOTTOM);\n        tv.setTypeface(Typeface.create(null, 700, false));\n        tv.setHeight((int) 49f);\n        tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);\n    }\n\n    private int getBatteryTemperature(Context context) {\n        return context.registerReceiver((BroadcastReceiver) null, new IntentFilter(\"android.intent.action.BATTERY_CHANGED\")).getIntExtra(\"temperature\", 0) / 10;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/battery/ShowBatteryTemperatureNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.battery\n\nimport android.annotation.SuppressLint\nimport android.app.AndroidAppHelper\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.IntentFilter\nimport android.content.res.Configuration\nimport android.graphics.Color\nimport android.graphics.Typeface\nimport android.util.TypedValue\nimport android.view.Gravity\nimport android.view.View\nimport android.widget.LinearLayout\nimport android.widget.RelativeLayout\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.paramCount\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DisplayUtils.dip2px\nimport com.sevtinge.cemiuiler.utils.findClassOrNull\nimport com.sevtinge.cemiuiler.utils.getObjectFieldAs\nimport com.sevtinge.cemiuiler.utils.isStatic\n\nobject ShowBatteryTemperatureNew : BaseHook() {\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        // if (!getBoolean(\"securitycenter_show_battery_temperature\", false)) return\n        val batteryFragmentClass = \"com.miui.powercenter.BatteryFragment\".findClassOrNull()\n        if (batteryFragmentClass != null) {\n            loadClass(\"com.miui.powercenter.BatteryFragment\").methodFinder().first {\n                paramCount == 1 && returnType == String::class.java && isStatic\n            }\n        } else {\n            loadClass(\"com.miui.powercenter.a\").methodFinder().first {\n                paramCount == 1 && returnType == String::class.java && isStatic\n            }\n        }.createHook {\n            after {\n                it.result = getBatteryTemperature(it.args[0] as Context).toString()\n            }\n        }\n\n        if (batteryFragmentClass != null) {\n            loadClass(\"com.miui.powercenter.BatteryFragment\\$a\").methodFinder().first {\n                name == \"run\"\n            }\n        } else {\n            loadClass(\"com.miui.powercenter.a\\$a\").methodFinder().first {\n                name == \"run\"\n            }\n        }.createHook {\n            after { hookParam ->\n                val context = AndroidAppHelper.currentApplication().applicationContext\n                val isDarkMode =\n                    context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES\n                val currentTemperatureState =\n                    context.resources.getIdentifier(\"current_temperature_state\", \"id\", \"com.miui.securitycenter\")\n                val view = hookParam.thisObject.getObjectFieldAs<View>(\"a\")\n\n                val textView = view.findViewById<TextView>(currentTemperatureState)\n                textView.apply {\n                    when (layoutParams) {\n                        is LinearLayout.LayoutParams -> {\n                            (layoutParams as LinearLayout.LayoutParams).topMargin = 0\n                            setPadding(0, dip2px(context, 4f), 0, 0)\n                            height = dip2px(context, 49f)\n                        }\n                    }\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 36.4f)\n                    gravity = Gravity.NO_GRAVITY\n                    typeface = Typeface.create(null, 700, false)\n                    textAlignment = View.TEXT_ALIGNMENT_VIEW_START\n                }\n\n                val temperatureContainer =\n                    context.resources.getIdentifier(\"temperature_container\", \"id\", \"com.miui.securitycenter\")\n                when (val childView = view.findViewById<LinearLayout>(temperatureContainer).getChildAt(1)) {\n                    is LinearLayout -> {\n                        childView.orientation = LinearLayout.VERTICAL\n                        val l1 = childView.getChildAt(0)\n                        val l2 = childView.getChildAt(1)\n                        val linearLayout = LinearLayout(context)\n                        val linearLayout1 = LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL }\n                        val tempView = TextView(context).apply {\n                            layoutParams = LinearLayout.LayoutParams(\n                                LinearLayout.LayoutParams.WRAP_CONTENT,\n                                LinearLayout.LayoutParams.WRAP_CONTENT\n                            )\n                            (layoutParams as LinearLayout.LayoutParams).marginStart = dip2px(context, 3.6f)\n                            setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13.1f)\n                            setTextColor(Color.parseColor(if (isDarkMode) \"#e6e6e6\" else \"#333333\"))\n                            setPadding(0, dip2px(context, 26f), 0, 0)\n                            text = \"℃\"\n                            gravity = Gravity.NO_GRAVITY\n                            typeface = Typeface.create(null, 700, false)\n                            textAlignment = View.TEXT_ALIGNMENT_VIEW_START\n                        }\n                        childView.removeAllViews()\n                        linearLayout.addView(l1)\n                        linearLayout1.addView(l2)\n                        linearLayout1.addView(tempView)\n                        childView.addView(linearLayout)\n                        childView.addView(linearLayout1)\n                    }\n\n                    is RelativeLayout -> {\n                        val relativeLayout = RelativeLayout(context)\n                        val l1 = childView.getChildAt(0)\n                        val l2 = childView.getChildAt(1).apply {\n                            layoutParams = RelativeLayout.LayoutParams(\n                                RelativeLayout.LayoutParams.WRAP_CONTENT,\n                                RelativeLayout.LayoutParams.WRAP_CONTENT\n                            ).also {\n                                it.addRule(RelativeLayout.BELOW, l1.id)\n                                it.addRule(RelativeLayout.ALIGN_START, l1.id)\n                            }\n                            (layoutParams as RelativeLayout.LayoutParams).topMargin = -dip2px(context, 0.78f)\n                        }\n                        val tempView = TextView(context).apply {\n                            layoutParams = RelativeLayout.LayoutParams(\n                                RelativeLayout.LayoutParams.WRAP_CONTENT,\n                                RelativeLayout.LayoutParams.WRAP_CONTENT\n                            ).also {\n                                it.addRule(RelativeLayout.END_OF, l2.id)\n                                it.addRule(RelativeLayout.ALIGN_BOTTOM, l2.id)\n                            }\n                            setPadding(dip2px(context, 3.6f), 0, 0, dip2px(context, 5.9f))\n                            setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13.1f)\n                            setTextColor(Color.parseColor(if (isDarkMode) \"#e6e6e6\" else \"#333333\"))\n                            text = \"℃\"\n                            gravity = Gravity.NO_GRAVITY\n                            typeface = Typeface.create(null, 700, false)\n                            textAlignment = View.TEXT_ALIGNMENT_VIEW_START\n                        }\n                        childView.removeAllViews()\n                        relativeLayout.addView(l1)\n                        relativeLayout.addView(l2)\n                        relativeLayout.addView(tempView)\n                        childView.addView(relativeLayout)\n                    }\n                }\n            }\n        }\n    }\n\n    private fun getBatteryTemperature(context: Context): Int {\n        return context.registerReceiver(\n            null as BroadcastReceiver?,\n            IntentFilter(\"android.intent.action.BATTERY_CHANGED\")\n        )!!\n            .getIntExtra(\"temperature\", 0) / 10\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/battery/UnlockSmartCharge.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.battery\n\nimport com.github.kyuubiran.ezxhelper.ClassLoaderProvider.classLoader\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockSmartCharge : BaseHook() {\n    private val smartChg by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"persist.vendor.smartchg\")\n            }\n        }.map { it.getMethodInstance(classLoader) }.toList()\n    }\n\n    override fun init() {\n        smartChg.createHooks {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/battery/UnlockSuperWirelessCharge.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.battery\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockSuperWirelessCharge : BaseHook() {\n\n    private val superWirelessCharge by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"persist.vendor.tx.speed.control\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(EzXHelper.classLoader)\n    }\n\n    private val superWirelessChargeTip by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"key_is_connected_super_wls_tx\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(EzXHelper.classLoader)\n    }\n\n    override fun init() {\n        superWirelessCharge?.createHook {\n            returnConstant(true)\n        }\n\n        superWirelessChargeTip?.createHook {\n            returnConstant(true)\n        }\n\n        /*try {\n            val result: List<DexMethodDescriptor> =\n                java.util.Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    SecurityCenterDexKit.mSecurityCenterResultMap[\"SuperWirelessCharge\"]\n                )\n            for (descriptor in result) {\n                val SuperWirelessCharge: java.lang.reflect.Method =\n                    descriptor.getMethodInstance(lpparam.classLoader)\n                log(\"SuperWirelessCharge method is $SuperWirelessCharge\")\n                if (SuperWirelessCharge.returnType == Boolean::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(\n                        SuperWirelessCharge,\n                        XC_MethodReplacement.returnConstant(true)\n                    )\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }\n        try {\n            val result: List<DexMethodDescriptor> =\n                java.util.Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    SecurityCenterDexKit.mSecurityCenterResultMap[\"SuperWirelessChargeTip\"]\n                )\n            for (descriptor in result) {\n                val SuperWirelessChargeTip: java.lang.reflect.Method =\n                    descriptor.getMethodInstance(lpparam.classLoader)\n                log(\"SuperWirelessChargeTip method is $SuperWirelessChargeTip\")\n                if (SuperWirelessChargeTip.returnType == Boolean::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(\n                        SuperWirelessChargeTip,\n                        XC_MethodReplacement.returnConstant(true)\n                    )\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/beauty/BeautyFace.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.beauty\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport java.lang.reflect.Method\n\nobject BeautyFace : BaseHook() {\n    var beautyFace: Method? = null\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"taoyao\", \"IN\", \"persist.vendor.vcb.ability\")\n                returnType = \"boolean\"\n            }\n        }.forEach {\n            beautyFace = it.getMethodInstance(lpparam.classLoader)\n        }\n\n        beautyFace!!.createHook {\n            returnConstant(true)\n        }\n\n        /*try {\n            val result: List<DexMethodDescriptor> =\n                Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    SecurityCenterDexKit.mSecurityCenterResultMap.get(\"BeautyFace\")\n                )\n            for (descriptor in result) {\n                beautyFace = descriptor.getMethodInstance(lpparam.classLoader)\n                log(\"beautyFace method is \" + beautyFace)\n                if (beautyFace!!.returnType == Boolean::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(beautyFace, XC_MethodReplacement.returnConstant(true))\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/beauty/BeautyLightAuto.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.beauty\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedBridge\n\nobject BeautyLightAuto : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"taoyao\")\n                returnType = \"boolean\"\n            }\n        }.forEach {\n            if (!java.lang.String.valueOf(it).contains(\"<clinit>\")) {\n                val beautyLightAuto: java.lang.reflect.Method =\n                    it.getMethodInstance(lpparam.classLoader)\n                if (!java.lang.String.valueOf(it).contains(BeautyFace.beautyFace.toString())) {\n                    XposedLogUtils.logI(\"beautyLightAuto method is $beautyLightAuto\")\n                    XposedBridge.hookMethod(\n                        beautyLightAuto,\n                        XC_MethodReplacement.returnConstant(true)\n                    )\n                }\n            }\n        }\n\n\n        /*try {\n            val result: List<DexMethodDescriptor> =\n                java.util.Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    SecurityCenterDexKit.mSecurityCenterResultMap.get(\"BeautyLightAuto\")\n                )\n            for (descriptor in result) {\n                if (!java.lang.String.valueOf(descriptor).contains(\"<clinit>\")) {\n                    val beautyLightAuto: java.lang.reflect.Method =\n                        descriptor.getMethodInstance(lpparam.classLoader)\n                    if (beautyLightAuto.returnType == Boolean::class.javaPrimitiveType && !java.lang.String.valueOf(\n                            descriptor\n                        ).contains(BeautyFace.beautyFace.toString())\n                    ) {\n                        log(\"beautyLightAuto method is $beautyLightAuto\")\n                        XposedBridge.hookMethod(\n                            beautyLightAuto,\n                            XC_MethodReplacement.returnConstant(true)\n                        )\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/beauty/BeautyPc.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.beauty\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\n\nobject BeautyPc : BaseHook() {\n    override fun init() {\n       dexKitBridge.findMethod {\n          matcher {\n              addUsingStringsEquals(\"persist.vendor.camera.facetracker.support\")\n              returnType = \"boolean\"\n          }\n       }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n           returnConstant(true)\n       }\n\n       /* try {\n            val result: List<DexMethodDescriptor> =\n                java.util.Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    SecurityCenterDexKit.mSecurityCenterResultMap.get(\"BeautyPc\")\n                )\n            for (descriptor in result) {\n                val beautyPc: java.lang.reflect.Method =\n                    descriptor.getMethodInstance(lpparam.classLoader)\n                log(\"beautyPc method is $beautyPc\")\n                if (beautyPc.returnType == Boolean::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(beautyPc, XC_MethodReplacement.returnConstant(true))\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/beauty/BeautyPrivacy.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.beauty\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nobject BeautyPrivacy : BaseHook() {\n    private val privateCls by lazy {\n        dexKitBridge.findClass {\n            matcher {\n                usingStrings = listOf(\"persist.sys.privacy_camera\")\n            }\n        }.first().getInstance(EzXHelper.classLoader)\n    }\n\n    private val R0 by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"persist.sys.privacy_camera\")\n            }\n        }.first().getMethodInstance(EzXHelper.classLoader)\n    }\n\n    private val invokeMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                declaredClass = privateCls.name\n                paramTypes = emptyList()\n                returnType = \"boolean\"\n                addInvoke {\n                    returnType = R0.returnType.name\n                    paramTypes = listOf(R0.parameterTypes[0].name)\n                    declaredClass = privateCls.name\n                }\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.toList()\n    }\n\n    override fun init() {\n        R0.createHook {\n            before {\n                it.args[0] = true\n            }\n        }\n\n        invokeMethod.createHooks {\n            returnConstant(true)\n        }\n\n       /* try {\n            val appVersionCode = Helpers.getPackageVersionCode(lpparam)\n            val result =\n                Objects.requireNonNull(SecurityCenterDexKit.mSecurityCenterResultClassMap[\"BeautyLight\"])\n            for (descriptor in result) {\n                val beautyPrivacyUtils = descriptor.getClassInstance(lpparam.classLoader)\n                beautyPrivacyUtils.methodFinder().first {\n                    if (!IS_TABLET) {\n                        when {\n                            appVersionCode in 40000749..40000750 -> name == \"X\"\n                            appVersionCode in 40000754..40000756 -> name == \"Q\"\n                            appVersionCode in 40000761..40000762 -> name == \"R\"\n                            appVersionCode in 40000771..40000772 -> name == \"X\"\n                            appVersionCode in 40000774..40000799 || appVersionCode in 40000803..40000809 -> name == \"Y\"\n                            appVersionCode >= 40000800 -> name == \"Z\" // 手机端截止到  8.1.0-230721.0.1 版本\n                            else -> name == \"M\" // 未混淆分类\n                        }\n                    } else {\n                        when {\n                            appVersionCode == 40010749 -> name == \"f\"\n                            appVersionCode == 40010750 -> name == \"l\"\n                            appVersionCode == 40010771 -> name == \"X\"\n                            appVersionCode in 40010774..40010799 -> name == \"Y\"\n                            appVersionCode >= 40010800 -> name == \"Z\"// 平板端截止到 8.1.0-230721.0.1.pad 版本\n                            else -> name == \"l\" // 未混淆分类\n                        }\n                    }\n                }.createHook {\n                    returnConstant(true)\n                }\n            }\n        } catch (e: Exception) {\n           log(\"BeautyPrivacy -> $e\")\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/lab/AiClipboardEnable.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.lab\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.lab.LabUtilsClass.labUtilClass\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\n\nobject AiClipboardEnable : BaseHook() {\n    private var labUtils: Class<*>? = null\n    override fun init() {\n        labUtilClass.forEach {\n            labUtils = it.getInstance(EzXHelper.classLoader)\n            XposedLogUtils.logI(\"labUtils class is $labUtils\")\n            findAndHookMethod(\n                \"com.miui.permcenter.settings.PrivacyLabActivity\",\n                \"onCreateFragment\",\n                object : MethodHook() {\n                    override fun before(param: MethodHookParam) {\n                        val fm = Helpers.getStaticObjectFieldSilently(labUtils, \"b\")\n                        if (fm != null) {\n                            try {\n                                val featMap = fm as MutableMap<String, Int>\n                                featMap[\"mi_lab_ai_clipboard_enable\"] = 0\n                                // featMap.put(\"mi_lab_blur_location_enable\", 0);\n                            } catch (ignore: Throwable) {\n                            }\n                        }\n                    }\n                })\n        }\n\n       /* try {\n            val result: List<DexClassDescriptor> = Objects.requireNonNull<List<DexClassDescriptor>>(\n                SecurityCenterDexKit.mSecurityCenterResultClassMap.get(\"LabUtils\")\n            )\n            for (descriptor in result) {\n                labUtils = descriptor.getClassInstance(lpparam.classLoader)\n                log(\"labUtils class is $labUtils\")\n                findAndHookMethod(\n                    \"com.miui.permcenter.settings.PrivacyLabActivity\",\n                    \"onCreateFragment\",\n                    object : MethodHook() {\n                        protected override fun before(param: MethodHookParam) {\n                            val fm = Helpers.getStaticObjectFieldSilently(labUtils, \"b\")\n                            if (fm != null) {\n                                try {\n                                    val featMap = fm as MutableMap<String, Int>\n                                    featMap[\"mi_lab_ai_clipboard_enable\"] = 0\n                                    // featMap.put(\"mi_lab_blur_location_enable\", 0);\n                                } catch (ignore: Throwable) {\n                                }\n                            }\n                        }\n                    })\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/lab/BlurLocationEnable.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.lab\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.lab.LabUtilsClass.labUtilClass\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject BlurLocationEnable : BaseHook() {\n    private var labUtils: Class<*>? = null\n\n    override fun init() {\n        labUtilClass.forEach {\n            labUtils = it.getInstance(EzXHelper.classLoader)\n            XposedLogUtils.logI(\"labUtils class is $labUtils\")\n            findAndHookMethod(\n                \"com.miui.permcenter.settings.PrivacyLabActivity\",\n                \"onCreateFragment\",\n                object : MethodHook() {\n                    @Throws(Throwable::class)\n                    override fun before(param: MethodHookParam) {\n                        val fm = Helpers.getStaticObjectFieldSilently(labUtils, \"b\")\n                        if (fm != null) {\n                            try {\n                                val featMap = fm as MutableMap<String, Int>\n                                featMap[\"mi_lab_blur_location_enable\"] = 0\n                                // featMap.put(\"mi_lab_blur_location_enable\", 0);\n                            } catch (ignore: Throwable) {\n                            }\n                        }\n                    }\n                })\n        }\n\n        /*try {\n            val result: List<DexClassDescriptor> = Objects.requireNonNull<List<DexClassDescriptor>>(\n                SecurityCenterDexKit.mSecurityCenterResultClassMap.get(\"LabUtils\")\n            )\n            for (descriptor in result) {\n                labUtils = descriptor.getClassInstance(lpparam.classLoader)\n                log(\"labUtils class is $labUtils\")\n                findAndHookMethod(\n                    \"com.miui.permcenter.settings.PrivacyLabActivity\",\n                    \"onCreateFragment\",\n                    object : BaseHook.MethodHook() {\n                        @Throws(Throwable::class)\n                        protected override fun before(param: MethodHookParam) {\n                            val fm = Helpers.getStaticObjectFieldSilently(labUtils, \"b\")\n                            if (fm != null) {\n                                try {\n                                    val featMap = fm as MutableMap<String, Int>\n                                    featMap[\"mi_lab_blur_location_enable\"] = 0\n                                    // featMap.put(\"mi_lab_blur_location_enable\", 0);\n                                } catch (ignore: Throwable) {\n                                }\n                            }\n                        }\n                    })\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/lab/GetNumberEnable.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.lab\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.module.hook.securitycenter.lab.LabUtilsClass.labUtilClass\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject GetNumberEnable : BaseHook() {\n    private var labUtils: Class<*>? = null\n    override fun init() {\n        labUtilClass.forEach {\n            labUtils = it.getInstance(EzXHelper.classLoader)\n            XposedLogUtils.logI(\"labUtils class is $labUtils\")\n            findAndHookMethod(\n                \"com.miui.permcenter.settings.PrivacyLabActivity\",\n                \"onCreateFragment\",\n                object : MethodHook() {\n                    @Throws(Throwable::class)\n                    override fun before(param: MethodHookParam) {\n                        val fm = Helpers.getStaticObjectFieldSilently(labUtils, \"b\")\n                        if (fm != null) {\n                            try {\n                                val featMap = fm as MutableMap<String, Int>\n                                featMap[\"mi_lab_operator_get_number_enable\"] = 0\n                                // featMap.put(\"mi_lab_blur_location_enable\", 0);\n                            } catch (ignore: Throwable) {\n                            }\n                        }\n                    }\n                })\n        }\n\n        /*   val result: List<DexClassDescriptor> = Objects.requireNonNull<List<DexClassDescriptor>>(\n               SecurityCenterDexKit.mSecurityCenterResultClassMap.get(\"LabUtils\")\n           )\n           for (descriptor in result) {\n               labUtils = descriptor.getClassInstance(lpparam.classLoader)\n               log(\"labUtils class is $labUtils\")\n               findAndHookMethod(\n                   \"com.miui.permcenter.settings.PrivacyLabActivity\",\n                   \"onCreateFragment\",\n                   object : BaseHook.MethodHook() {\n                       @Throws(Throwable::class)\n                       protected override fun before(param: MethodHookParam) {\n                           val fm = Helpers.getStaticObjectFieldSilently(labUtils, \"b\")\n                           if (fm != null) {\n                               try {\n                                   val featMap = fm as MutableMap<String, Int>\n                                   featMap[\"mi_lab_operator_get_number_enable\"] = 0\n                                   // featMap.put(\"mi_lab_blur_location_enable\", 0);\n                               } catch (ignore: Throwable) {\n                               }\n                           }\n                       }\n                   })\n           }\n       } catch (e: Throwable) {\n           e.printStackTrace()\n       }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/lab/LabUtilsClass.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.lab\n\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject LabUtilsClass {\n    val labUtilClass by lazy {\n        dexKitBridge.findClass {\n            matcher {\n                addUsingStringsEquals(\"mi_lab_ai_clipboard_enable\", \"mi_lab_blur_location_enable\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/other/DisableRootCheck.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.other\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject DisableRootCheck : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"key_check_item_root\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n            returnConstant(false)\n        }\n\n        /*try {\n            val result: List<DexMethodDescriptor> =\n                Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    SecurityCenterDexKit.mSecurityCenterResultMap[\"rootCheck\"]\n                )\n            for (descriptor in result) {\n                val checkIsRooted: Method = descriptor.getMethodInstance(lpparam.classLoader)\n                if (checkIsRooted.returnType == Boolean::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(\n                        checkIsRooted,\n                        XC_MethodReplacement.returnConstant(false)\n                    )\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/other/FuckRiskPkg.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.other\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject FuckRiskPkg : BaseHook() {\n    private val pkg by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\n                    \"riskPkgList\", \"key_virus_pkg_list\", \"show_virus_notification\"\n                )\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.toList()\n    }\n\n    override fun init() {\n        pkg.createHooks {\n            before { param ->\n                param.result = null\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/other/LockOneHundredPoints.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.other\n\nimport android.view.View\nimport com.github.kyuubiran.ezxhelper.ClassLoaderProvider.classLoader\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport org.luckypray.dexkit.query.enums.StringMatchType\n\nobject LockOneHundredPoints : BaseHook() {\n   /* var mScoreManagerCls: Class<*>? = null\n    var mMainContentFrameCls: Class<*>? = null\n    override fun init() {\n        mScoreManagerCls = findClassIfExists(\"com.miui.securityscan.scanner.ScoreManager\")\n        mMainContentFrameCls = findClassIfExists(\"com.miui.securityscan.ui.main.MainContentFrame\")\n        try {\n            val result: List<DexMethodDescriptor> =\n                Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    SecurityCenterDexKit.mSecurityCenterResultMap.get(\"ScoreManager\")\n                )\n            for (descriptor in result) {\n                val lockOneHundredPoints: Method = descriptor.getMethodInstance(lpparam.classLoader)\n                log(\"lock 100 points method is $lockOneHundredPoints\")\n                if (lockOneHundredPoints.returnType == Int::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(\n                        lockOneHundredPoints,\n                        XC_MethodReplacement.returnConstant(0)\n                    )\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }\n\n        *//*findAndHookMethod(mScoreManagerCls, \"B\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                if(PrefsUtils.mSharedPreferences.getBoolean(\"prefs_key_security_center_score\", false)) param.setResult(0);\n            }\n        });*//*findAndHookMethod(\n            mMainContentFrameCls,\n            \"onClick\",\n            View::class.java,\n            object : BaseHook.MethodHook() {\n                @Throws(Throwable::class)\n                protected override fun before(param: MethodHookParam) {\n                    if (PrefsUtils.mSharedPreferences.getBoolean(\n                            \"prefs_key_security_center_score\",\n                            false\n                        )\n                    ) param.setResult(null)\n                }\n            })\n    }*/\n    private val score by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingString(\"getMinusPredictScore\", StringMatchType.Contains)\n            }\n        }.firstOrNull()?.getMethodInstance(classLoader)\n    }\n\n    override fun init() {\n        loadClass(\"com.miui.securityscan.ui.main.MainContentFrame\").methodFinder()\n            .filterByName(\"onClick\")\n            .filterByParamTypes(View::class.java)\n            .first().createHook {\n                before {\n                    it.result = null\n                }\n            }\n\n        score?.createHook {\n            returnConstant(0)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/other/NoLowBatteryWarning.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.other\n\nimport android.provider.Settings\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\n\nobject NoLowBatteryWarning : BaseHook() {\n    override fun init() {\n        val settingHook: MethodHook = object : MethodHook() {\n            override fun before(param: MethodHookParam) {\n                val key = param.args[1] as String\n                if (\"low_battery_dialog_disabled\" == key) param.result = 1\n                else if (\"low_battery_sound\" == key) param.result = null\n            }\n        }\n        Helpers.hookAllMethods(Settings.System::class.java, \"getInt\", settingHook)\n        Helpers.hookAllMethods(Settings.Global::class.java, \"getString\", settingHook)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/other/SkipCountDownLimit.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.other;\n\nimport android.os.Handler;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SkipCountDownLimit extends BaseHook {\n\n    Class<?> mHandlerClass = null;\n    Class<?> mInterceptBaseFragmentCls;\n    Class<?>[] mInnerClasses;\n\n    @Override\n    public void init() {\n\n        mInterceptBaseFragmentCls = findClassIfExists(\"com.miui.permcenter.privacymanager.InterceptBaseFragment\");\n        mInnerClasses = mInterceptBaseFragmentCls.getDeclaredClasses();\n\n\n        findAndHookMethod(\"android.widget.TextView\", \"setEnabled\", boolean.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.args[0] = true;\n            }\n        });\n\n        for (Class<?> mInnerClass : mInnerClasses) {\n            if (Handler.class.isAssignableFrom(mInnerClass)) {\n                mHandlerClass = mInnerClass;\n                break;\n            }\n        }\n\n        if (mHandlerClass != null) {\n            hookAllConstructors(mHandlerClass, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    if (param.args.length == 2) {\n                        param.args[1] = 0;\n                    }\n                }\n            });\n\n            Method[] methods = XposedHelpers.findMethodsByExactParameters(mHandlerClass, void.class, int.class);\n            if (methods.length > 0) {\n                hookMethod(methods[0], new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        param.args[0] = 0;\n                    }\n                });\n            }\n        }\n\n\n        /*findAndHookMethod(\"android.widget.TextView\", \"setText\", CharSequence.class, TextView.BufferType.class, boolean.class, int.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Object[] mParam = param.args;\n                String mText = param.args[0].toString();\n                if (mParam.length != 0 && mText.startsWith(\"确定(\")) {\n                    param.args[0] = \"确定\";\n                }\n            }\n        });*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/AddSideBarExpandReceiver.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.graphics.Canvas;\nimport android.graphics.Rect;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.os.SystemClock;\nimport android.view.MotionEvent;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Method;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AddSideBarExpandReceiver extends BaseHook {\n    @Override\n    public void init() {\n        final boolean[] isHooked = {false, false};\n        boolean enableSideBar = mPrefsMap.getBoolean(\"security_center_leave_open\");\n        if (!enableSideBar) {\n            mResHook.setDensityReplacement(\"com.miui.securitycenter\", \"dimen\", \"sidebar_height_default\", 8);\n            mResHook.setDensityReplacement(\"com.miui.securitycenter\", \"dimen\", \"sidebar_height_vertical\", 8);\n        }\n        Class <?> RegionSamplingHelper = findClassIfExists(\"com.android.systemui.navigationbar.gestural.RegionSamplingHelper\", lpparam.classLoader);\n        if (RegionSamplingHelper == null) {\n            XposedLogUtils.logI(\"failed to find RegionSamplingHelper\");\n        }\n        hookAllConstructors(RegionSamplingHelper, new MethodHook() {\n            private int originDockLocation = -1;\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                if (!isHooked[0]) {\n                    isHooked[0] = true;\n                    View view = (View) param.args[0];\n                    if (originDockLocation == -1) {\n                        originDockLocation = view.getContext().getSharedPreferences(\"sp_video_box\", 0).getInt(\"dock_line_location\", 0);;\n                    }\n                    BroadcastReceiver showReceiver = new BroadcastReceiver() {\n                        @Override\n                        public void onReceive(Context context, Intent intent) {\n                            Bundle bundle = intent.getBundleExtra(\"actionInfo\");\n                            int pos = originDockLocation;\n                            if (bundle != null) {\n                                pos = bundle.getInt(\"inDirection\", 0);\n                                view.getContext().getSharedPreferences(\"sp_video_box\", 0).edit().putInt(\"dock_line_location\", pos).commit();\n                            }\n                            showSideBar(view, pos);\n                        }\n                    };\n                    view.getContext().registerReceiver(showReceiver, new IntentFilter(ACTION_PREFIX + \"ShowSideBar\"));\n                    XposedHelpers.setAdditionalInstanceField(param.thisObject, \"showReceiver\", showReceiver);\n\n                    if (!isHooked[1]) {\n                        isHooked[1] = true;\n                        Handler myhandler = new Handler(Looper.myLooper());\n                        Runnable removeBg = new Runnable() {\n                            @Override\n                            public void run() {\n                                myhandler.removeCallbacks(this);\n                                if (!enableSideBar) {\n                                    Object li = XposedHelpers.getObjectField(view, \"mListenerInfo\");\n                                    Object mOnTouchListener = XposedHelpers.getObjectField(li, \"mOnTouchListener\");\n                                    findAndHookMethod(mOnTouchListener.getClass(), \"onTouch\", View.class, MotionEvent.class, new MethodHook() {\n                                        @Override\n                                        protected void before(MethodHookParam param) throws Throwable {\n                                            MotionEvent me = (MotionEvent) param.args[1];\n                                            if (me.getSource() != 9999) {\n                                                param.setResult(false);\n                                            }\n                                        }\n                                    });\n                                }\n                                Class <?> bgDrawable = view.getBackground().getClass();\n                                findAndHookMethod(bgDrawable, \"draw\", Canvas.class, new MethodHook() {\n                                    @Override\n                                    protected void before(MethodHookParam param) throws Throwable {\n                                        param.setResult(null);\n                                    }\n                                });\n                                view.setBackground(null);\n                            }\n                        };\n                        myhandler.postDelayed(removeBg, 150);\n                    }\n                }\n            }\n        });\n        findAndHookMethod(RegionSamplingHelper, \"onViewDetachedFromWindow\", android.view.View.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                isHooked[0] = false;\n                BroadcastReceiver showReceiver = (BroadcastReceiver) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"showReceiver\");\n                if (showReceiver != null) {\n                    View view = (View) param.args[0];\n                    view.getContext().unregisterReceiver(showReceiver);\n                    XposedHelpers.removeAdditionalInstanceField(param.thisObject, \"showReceiver\");\n                }\n            }\n        });\n        Method[] methods = XposedHelpers.findMethodsByExactParameters(RegionSamplingHelper, void.class, Rect.class);\n        if (methods.length == 0) {\n            XposedLogUtils.logI(\"Cannot find appropriate start method\");\n            return;\n        }\n        hookMethod(methods[0], new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(null);\n            }\n        });\n    }\n\n    private static void showSideBar(View view, int dockLocation) {\n        int[] location = new int[2];\n        view.getLocationOnScreen(location);\n        int y = location[1];\n        long uptimeMillis = SystemClock.uptimeMillis();\n        MotionEvent downEvent, moveEvent, upEvent;\n        if (dockLocation == 0) { // left\n            downEvent = MotionEvent.obtain(uptimeMillis, uptimeMillis, MotionEvent.ACTION_DOWN,  4, y + 15, 0);\n            moveEvent = MotionEvent.obtain(uptimeMillis, uptimeMillis + 20, MotionEvent.ACTION_MOVE, 160, y + 15, 0);\n            upEvent = MotionEvent.obtain(uptimeMillis, uptimeMillis + 21, MotionEvent.ACTION_UP, 160, y + 15, 0);\n        }\n        else {\n            int x = location[0];\n            downEvent = MotionEvent.obtain(uptimeMillis, uptimeMillis, MotionEvent.ACTION_DOWN, x - 4, y + 15, 0);\n            moveEvent = MotionEvent.obtain(uptimeMillis, uptimeMillis + 20, MotionEvent.ACTION_MOVE, x - 160, y + 15, 0);\n            upEvent = MotionEvent.obtain(uptimeMillis, uptimeMillis + 21, MotionEvent.ACTION_UP, x - 160, y + 15, 0);\n        }\n        downEvent.setSource(9999);\n        moveEvent.setSource(9999);\n        upEvent.setSource(9999);\n        view.dispatchTouchEvent(downEvent);\n        view.dispatchTouchEvent(moveEvent);\n        view.dispatchTouchEvent(upEvent);\n        downEvent.recycle();\n        moveEvent.recycle();\n        upEvent.recycle();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/DisableDockSuggest.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.ArrayList;\n\npublic class DisableDockSuggest extends BaseHook {\n    @Override\n    public void init() {\n        MethodHook clearHook = new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                ArrayList<String> blackList = new ArrayList<String>();\n                blackList.add(\"xx.yy.zz\");\n                int topMethod = 10;\n                StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();\n                for (StackTraceElement el: stackTrace) {\n                    if (el != null && topMethod < 20\n                        && (el.getClassName().contains(\"edit.DockAppEditActivity\") || el.getClassName().contains(\"BubblesSettings\"))\n                    ) {\n                        return;\n                    }\n                    topMethod++;\n                }\n                param.setResult(blackList);\n            }\n        };\n        hookAllMethodsSilently(\"android.util.MiuiMultiWindowUtils\", \"getFreeformSuggestionList\", clearHook);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/game/RemoveMacroBlackList.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.game\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nclass RemoveMacroBlackList : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                usingStrings = listOf(\"pref_gb_unsupport_macro_apps\")\n                paramTypes = listOf(\"java.util.ArrayList\")\n                returnType = \"void\"\n            }\n        }.first().getMethodInstance(EzXHelper.classLoader).createHook {\n            before {\n                it.result = ArrayList<String>()\n            }\n        }\n\n        dexKitBridge.findClass {\n            matcher {\n                usingStrings = listOf(\"com.netease.sky.mi\")\n            }\n        }.first().getInstance(EzXHelper.classLoader).methodFinder()\n            .filterByReturnType(Boolean::class.java)\n            .filterByParamCount(1)\n            .first().createHook {\n                returnConstant(false)\n            }\n\n        dexKitBridge.findClass {\n            matcher {\n                usingStrings =\n                    listOf(\"content://com.xiaomi.macro.MacroStatusProvider/game_macro_change\")\n            }\n        }.first().getInstance(EzXHelper.classLoader).methodFinder()\n            .filterByReturnType(Boolean::class.java)\n            .filterByParamCount(2)\n            .first().createHook {\n                returnConstant(true)\n            }\n\n        /*val macro = SecurityCenterDexKit.mSecurityCenterResultClassMap[\"Macro\"]!!\n        assert(macro.size == 1)\n        val macroDescriptor = macro.first()\n        val macroClass: Class<*> = macroDescriptor.getClassInstance(lpparam.classLoader)\n        macroClass.methodFinder().first {\n            returnType == Boolean::class.java && parameterCount == 1\n        }.createHook {\n            returnConstant(false)\n        }\n\n        val macro1 = SecurityCenterDexKit.mSecurityCenterResultClassMap[\"Macro1\"]!!\n        assert(macro1.size == 1)\n        val macro1Descriptor = macro1.first()\n        val macro1Class: Class<*> = macro1Descriptor.getClassInstance(lpparam.classLoader)\n        macro1Class.methodFinder().first {\n            returnType == Boolean::class.java && parameterCount == 2\n        }.createHook {\n            returnConstant(true)\n        }\n\n        val macro2 = SecurityCenterDexKit.mSecurityCenterResultMap[\"Macro2\"]!!\n        assert(macro2.isNotEmpty())\n        var macro2Descriptor = macro2[0]\n        var macroMethod: Method = macro2Descriptor.getMethodInstance(lpparam.classLoader)\n        if (macroMethod.returnType != ArrayList::class.java) {\n            macro2Descriptor = macro2[1]\n            macroMethod = macro2Descriptor.getMethodInstance(lpparam.classLoader)\n        }\n        macroMethod.createHook {\n            before {\n                it.result = ArrayList<String>()\n            }\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/game/UnlockGunService.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.game\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockGunService : BaseHook() {\n    override fun init() {\n        dexKitBridge.findClass {\n            matcher {\n                usingStrings = listOf(\"gb_game_collimator_status\")\n            }\n        }.map {\n            val gbGameCollimatorClass = it.getInstance(EzXHelper.classLoader)\n            dexKitBridge.findMethod {\n                matcher {\n                    declaredClass = gbGameCollimatorClass.name\n                    returnType = \"boolean\"\n                    paramTypes = listOf(\"java.lang.String\")\n                }\n            }.single().getMethodInstance(EzXHelper.classLoader).createHook {\n                returnConstant(true)\n            }\n        }\n\n        /*val gbGameCollimator = mSecurityCenterResultClassMap[\"GbGameCollimator\"]!!\n        assert(gbGameCollimator.size == 1)\n        val gbGameCollimatorDescriptor = gbGameCollimator.first()\n        val gbGameCollimatorClass: Class<*> = gbGameCollimatorDescriptor.getClassInstance(lpparam.classLoader)\n        gbGameCollimatorClass.methodFinder().first {\n            returnType == Boolean::class.java && parameterCount == 1\n        }.createHook {\n            XposedLogUtils.logI(\"GunService class is $gbGameCollimatorClass\")\n            returnConstant(true)\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/video/DisableRemoveScreenHoldOn.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject DisableRemoveScreenHoldOn : BaseHook() {\n    /*override fun init() {\n        try {\n            val result: List<DexMethodDescriptor> =\n                Objects.requireNonNull(SecurityCenterDexKit.mSecurityCenterResultMap.get(\"RemoveScreenHoldOn\"))\n            for (descriptor in result) {\n                val removeScreenHoldOn: Method = descriptor.getMethodInstance(lpparam.classLoader)\n                log(\"removeScreenHoldOn method is $removeScreenHoldOn\")\n                if (removeScreenHoldOn.returnType == Boolean::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(\n                        removeScreenHoldOn,\n                        XC_MethodReplacement.returnConstant(false)\n                    )\n                }\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }\n    }*/\n\n    private val screen by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                usingStrings = listOf(\"remove_screen_off_hold_on\")\n                returnType = \"boolean\"\n            }\n        }.firstOrNull()?.getMethodInstance(EzXHelper.classLoader)\n    }\n\n    override fun init() {\n        screen?.createHook {\n            before {\n                it.result = false\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/video/UnlockEnhanceContours.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockEnhanceContours : BaseHook() {\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                usingStrings = listOf(\"ro.vendor.media.video.frc.support\")\n            }\n        }.forEach {\n            val qaq = it.getClassInstance(EzXHelper.classLoader)\n            var counter = 0\n            dexKitBridge.findMethod {\n                matcher {\n                    declaredClass = qaq.name\n                    returnType = \"boolean\"\n                    paramTypes = listOf(\"java.lang.String\")\n                }\n            }.forEach { methods ->\n                counter++\n                if (counter == 3) {\n                    methods.getMethodInstance(EzXHelper.classLoader).createHook {\n                        returnConstant(true)\n                    }\n                }\n            }\n            val tat = dexKitBridge.findMethod {\n                matcher {\n                    usingStrings = listOf(\"debug.config.media.video.ais.support\")\n                    declaredClass = qaq.name\n                }\n            }.first().getMethodInstance(EzXHelper.classLoader)\n            val newChar = tat.name.toCharArray()\n            for (i in newChar.indices) {\n                newChar[i]++\n            }\n            val newName = String(newChar)\n            tat.declaringClass.methodFinder()\n                .filterByName(newName)\n                .first().createHook {\n                    returnConstant(true)\n                }\n        }\n\n        /*initDexKit(lpparam)\n        try {\n            val result = Objects.requireNonNull(\n                SecurityCenterDexKit.mSecurityCenterResultClassMap[\"FrcSupport\"]\n            )\n            for (descriptor in result) {\n                val frcSupport = descriptor.getClassInstance(lpparam.classLoader)\n                XposedLogUtils.logI(\"frcSupport class is $frcSupport\")\n                var counter = 0\n                dexKitBridge.findMethod {\n                    methodDeclareClass = frcSupport.name\n                    methodReturnType = \"boolean\"\n                    methodParamTypes = arrayOf(\"java.lang.String\")\n                }.forEach { methods ->\n                    counter++\n                    if (counter == 3) {\n                        methods.getMethodInstance(EzXHelper.classLoader).createHook {\n                            returnConstant(true)\n                        }\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            logE(\"FrcSupport\", e)\n        }\n        try {\n            val result = Objects.requireNonNull(\n                SecurityCenterDexKit.mSecurityCenterResultMap[\"AisSupport\"]\n            )\n            for (descriptor in result) {\n                val aisSupport = descriptor.getMethodInstance(lpparam.classLoader)\n                XposedLogUtils.logI(\"aisSupport method is $aisSupport\")\n                val newChar = aisSupport.name.toCharArray()\n                for (i in newChar.indices) {\n                    newChar[i]++\n                }\n                val newName = String(newChar)\n                aisSupport.declaringClass.methodFinder()\n                    .filterByName(newName)\n                    .first().createHook {\n                        returnConstant(true)\n                    }\n            }\n        } catch (e: Throwable) {\n            logE(\"AisSupport\", e)\n        }\n        closeDexKit()*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/video/UnlockMemc.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper.classLoader\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockMemc : BaseHook() {\n    override fun init() {\n        dexKitBridge.findClass {\n            matcher {\n                usingStrings = listOf(\"ro.vendor.media.video.frc.support\")\n            }\n        }.map {\n            val frcSupport = it.getInstance(classLoader)\n            var counter = 0\n            dexKitBridge.findMethod {\n                matcher {\n                    declaredClass = frcSupport.name\n                    returnType = \"boolean\"\n                    paramTypes = listOf(\"java.lang.String\")\n                }\n            }.forEach { methods ->\n                counter++\n                if (counter == 5) {\n                    methods.getMethodInstance(classLoader).createHook {\n                        returnConstant(true)\n                    }\n                }\n            }\n        }\n\n       /* initDexKit(lpparam)\n        try {\n            val result = Objects.requireNonNull(\n                SecurityCenterDexKit.mSecurityCenterResultClassMap[\"FrcSupport\"]\n            )\n            for (descriptor in result) {\n                val frcSupport = descriptor.getClassInstance(lpparam.classLoader)\n                XposedLogUtils.logI(\"frcSupport class is $frcSupport\")\n                var counter = 0\n                dexKitBridge.findMethod {\n                    methodDeclareClass = frcSupport.name\n                    methodReturnType = \"boolean\"\n                    methodParamTypes = arrayOf(\"java.lang.String\")\n                }.forEach { methods ->\n                    counter++\n                    if (counter == 5) {\n                        methods.getMethodInstance(classLoader).createHook {\n                            returnConstant(true)\n                        }\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            logE(\"FrcSupport\", e)\n        }\n        closeDexKit()*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/securitycenter/sidebar/video/UnlockSuperResolution.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.securitycenter.sidebar.video\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockSuperResolution : BaseHook() {\n    override fun init() {\n        dexKitBridge.findClass {\n            matcher {\n                usingStrings = listOf(\"ro.vendor.media.video.frc.support\")\n            }\n        }.map {\n            val qaq = it.getInstance(EzXHelper.classLoader)\n            var counter = 0\n            dexKitBridge.findMethod {\n                matcher {\n                    declaredClass = qaq.name\n                    returnType = \"boolean\"\n                    paramTypes = listOf(\"java.lang.String\")\n                }\n            }.forEach { methods ->\n                counter++\n                if (counter == 1) {\n                    methods.getMethodInstance(EzXHelper.classLoader).createHook {\n                        returnConstant(true)\n                    }\n                }\n            }\n            dexKitBridge.findMethod {\n                matcher {\n                    declaredClass = qaq.name\n                    usingStrings = listOf(\"debug.config.media.video.ais.support\")\n                }\n            }.first().getMethodInstance(EzXHelper.classLoader).createHook {\n                returnConstant(true)\n            }\n        }\n\n       /* initDexKit(lpparam)\n        try {\n            val result = Objects.requireNonNull(\n                SecurityCenterDexKit.mSecurityCenterResultClassMap[\"FrcSupport\"]\n            )\n            for (descriptor in result) {\n                val frcSupport = descriptor.getClassInstance(lpparam.classLoader)\n                XposedLogUtils.logI(\"frcSupport class is $frcSupport\")\n                var counter = 0\n                dexKitBridge.findMethod {\n                    methodDeclareClass = frcSupport.name\n                    methodReturnType = \"boolean\"\n                    methodParamTypes = arrayOf(\"java.lang.String\")\n                }.forEach { methods ->\n                    counter++\n                    if (counter == 1) {\n                        methods.getMethodInstance(EzXHelper.classLoader).createHook {\n                            returnConstant(true)\n                        }\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            logE(\"FrcSupport\", e)\n        }\n        try {\n            val result = Objects.requireNonNull(\n                SecurityCenterDexKit.mSecurityCenterResultMap[\"AisSupport\"]\n            )\n            for (descriptor in result) {\n                val aisSupport = descriptor.getMethodInstance(lpparam.classLoader)\n                XposedLogUtils.logI(\"aisSupport method is $aisSupport\")\n                if (aisSupport.returnType == Boolean::class.javaPrimitiveType) {\n                    XposedBridge.hookMethod(aisSupport, XC_MethodReplacement.returnConstant(true))\n                }\n            }\n        } catch (e: Throwable) {\n            logE(\"AisSupport\", e)\n        }\n        closeDexKit()*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/settings/CemiuilerSettings.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.settings;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.res.Resources;\nimport android.os.Bundle;\nimport android.os.UserHandle;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.ui.MainActivity;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\nimport moralnorm.os.Build;\n\npublic class CemiuilerSettings extends BaseHook {\n\n    private int settingsIconResId;\n\n    private Class<?> mPreferenceHeader;\n\n    int mIconModeInt = mPrefsMap.getStringAsInt(\"prefs_key_settings_icon_mode\", 0);\n\n    @Override\n    public void init() {\n        addIconResource();\n\n        Class<?> mMiuiSettings = findClassIfExists(\"com.android.settings.MiuiSettings\");\n\n        findAndHookMethod(mMiuiSettings, \"updateHeaderList\", List.class, new MethodHook() {\n            @Override\n            @SuppressLint(\"DiscouragedApi\")\n            protected void after(MethodHookParam param) throws Throwable {\n                if (param.args[0] == null) return;\n\n                Context mContext = ((Activity) param.thisObject).getBaseContext();\n                int opt = Integer.parseInt(mPrefsMap.getString(\"settings_icon\", \"0\"));\n                if (opt == 0) return;\n\n                Resources modRes = Helpers.getModuleRes(mContext);\n                mPreferenceHeader = findClassIfExists(\"com.android.settingslib.miuisettings.preference.PreferenceActivity$Header\");\n                if (mPreferenceHeader == null) return;\n\n                Intent mIntent = new Intent();\n                mIntent.putExtra(\"isDisplayHomeAsUpEnabled\", true);\n                mIntent.setClassName(Helpers.mAppModulePkg, MainActivity.class.getCanonicalName());\n\n                Object header = XposedHelpers.newInstance(mPreferenceHeader);\n                XposedHelpers.setLongField(header, \"id\", 666);\n                XposedHelpers.setObjectField(header, \"intent\", mIntent);\n                XposedHelpers.setIntField(header, \"iconRes\", settingsIconResId);\n                XposedHelpers.setObjectField(header, \"title\", modRes.getString(R.string.app_name));\n\n                Bundle bundle = new Bundle();\n                ArrayList<UserHandle> users = new ArrayList<>();\n                users.add((UserHandle) XposedHelpers.newInstance(UserHandle.class, 0));\n                bundle.putParcelableArrayList(\"header_user\", users);\n                XposedHelpers.setObjectField(header, \"extras\", bundle);\n\n                int themes = mContext.getResources().getIdentifier(\"launcher_settings\", \"id\", mContext.getPackageName());\n                int special = mContext.getResources().getIdentifier(\"other_special_feature_settings\", \"id\", mContext.getPackageName());\n                int timer = mContext.getResources().getIdentifier(\"app_timer\", \"id\", mContext.getPackageName());\n\n                List<Object> headers = (List<Object>) param.args[0];\n                int position = 0;\n                for (Object head : headers) {\n                    position++;\n                    long id = XposedHelpers.getLongField(head, \"id\");\n                    if (opt == 1 && id == -1) {\n                        headers.add(position - 1, header);\n                    } else if (opt == 2 && id == themes) {\n                        headers.add(position, header);\n                    } else if (opt == 3 && id == (Integer.parseInt(Build.getMiuiVersionCode()) < 14 ? special : timer)) {\n                        headers.add(position, header);\n                    }\n                }\n                if (headers.size() > 25) {\n                    headers.add(25, header);\n                } else {\n                    headers.add(header);\n                }\n            }\n        });\n    }\n\n\n    private void addIconResource() {\n        if (mIconModeInt == 0) {\n            settingsIconResId = mResHook.addResource(\"ic_cemiuiler_settings\", R.drawable.ic_cemiuiler_settings_v140);\n        } else {\n            settingsIconResId = mResHook.addResource(\"ic_cemiuiler_settings\", R.drawable.ic_cemiuiler_settings_v130);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/settings/NotificationImportance.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.settings;\n\nimport android.app.NotificationChannel;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.lang.reflect.InvocationHandler;\nimport java.lang.reflect.Method;\nimport java.lang.reflect.Proxy;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class NotificationImportance extends BaseHook {\n\n    Class<?> mBaseNotificationSettings;\n    Class<?> mChannelNotificationSettings;\n\n    @Override\n    public void init() {\n        mBaseNotificationSettings = findClassIfExists(\"com.android.settings.notification.BaseNotificationSettings\");\n        mChannelNotificationSettings = findClassIfExists(\"com.android.settings.notification.ChannelNotificationSettings\");\n\n\n        hookAllMethods(mBaseNotificationSettings, \"setPrefVisible\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Object pref = param.args[0];\n                if (pref != null) {\n                    String prefKey = (String) XposedHelpers.callMethod(pref, \"getKey\");\n                    if (\"importance\".equals(prefKey)) {\n                        param.args[1] = true;\n                    }\n                }\n            }\n        });\n\n        findAndHookMethod(mChannelNotificationSettings, \"setupChannelDefaultPrefs\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Object pref = XposedHelpers.callMethod(param.thisObject, \"findPreference\", \"importance\");\n                XposedHelpers.setObjectField(param.thisObject, \"mImportance\", pref);\n                int mBackupImportance = (int) XposedHelpers.getObjectField(param.thisObject, \"mBackupImportance\");\n                if (mBackupImportance > 0) {\n                    int index = (int) XposedHelpers.callMethod(pref, \"findSpinnerIndexOfValue\", String.valueOf(mBackupImportance));\n                    if (index > -1) {\n                        XposedHelpers.callMethod(pref, \"setValueIndex\", index);\n                    }\n                    Class<?> ImportanceListener = XposedHelpers.findClassIfExists(\"androidx.preference.Preference$OnPreferenceChangeListener\", lpparam.classLoader);\n                    InvocationHandler handler = new InvocationHandler() {\n                        @Override\n                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n                            if (method.getName().equals(\"onPreferenceChange\")) {\n                                int mBackupImportance = Integer.parseInt((String) args[1]);\n                                XposedHelpers.setObjectField(param.thisObject, \"mBackupImportance\", mBackupImportance);\n                                NotificationChannel mChannel = (NotificationChannel) XposedHelpers.getObjectField(param.thisObject, \"mChannel\");\n                                mChannel.setImportance(mBackupImportance);\n                                XposedHelpers.callMethod(mChannel, \"lockFields\", 4);\n                                Object mBackend = XposedHelpers.getObjectField(param.thisObject, \"mBackend\");\n                                String mPkg = (String) XposedHelpers.getObjectField(param.thisObject, \"mPkg\");\n                                int mUid = (int) XposedHelpers.getObjectField(param.thisObject, \"mUid\");\n                                XposedHelpers.callMethod(mBackend, \"updateChannel\", mPkg, mUid, mChannel);\n                                XposedHelpers.callMethod(param.thisObject, \"updateDependents\", false);\n                            }\n                            return true;\n                        }\n                    };\n                    Object mImportanceListener = Proxy.newProxyInstance(\n                        lpparam.classLoader,\n                        new Class[]{ImportanceListener},\n                        handler\n                    );\n                    XposedHelpers.callMethod(pref, \"setOnPreferenceChangeListener\", mImportanceListener);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/settings/VolumeSeparateControlForSettings.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.settings;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Method;\nimport java.lang.reflect.Modifier;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class VolumeSeparateControlForSettings extends BaseHook {\n\n    Class<?> mVsbCls;\n    Class<?> mPreferenceGroupCls;\n    Class<?> mPreferenceCls;\n\n    public static int mSystemResId;\n    public static int mCallsResId;\n    public static int mNotificationVolumeResId;\n\n    @Override\n    public void init() {\n\n        mVsbCls = findClassIfExists(\"com.android.settings.sound.VolumeSeekBarPreference\");\n        mPreferenceGroupCls = findClassIfExists(\"androidx.preference.PreferenceGroup\");\n        mPreferenceCls = findClassIfExists(\"androidx.preference.Preference\");\n\n        findAndHookMethod(\"com.android.settings.MiuiSoundSettings\", \"onCreate\", Bundle.class, new MethodHook() {\n            @SuppressLint(\"DiscouragedApi\")\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Object fragment = param.thisObject;\n                Context context = (Context) XposedHelpers.callMethod(fragment, \"getActivity\");\n                Resources modRes = Helpers.getModuleRes(context);\n                int order = 6;\n\n                Method[] initSeekBar;\n                String addPreference = \"addPreference\";\n\n                try {\n                    initSeekBar = XposedHelpers.findMethodsByExactParameters(fragment.getClass(), void.class, String.class, int.class, int.class);\n                    if (mVsbCls == null || initSeekBar.length == 0) {\n                        XposedLogUtils.logI(TAG, \"Unable to find class/method in Settings to hook\");\n                        return;\n                    } else {\n                        initSeekBar[0].setAccessible(true);\n                    }\n\n                    Method[] methods = XposedHelpers.findMethodsByExactParameters(mPreferenceGroupCls, void.class, mPreferenceCls);\n                    for (Method method : methods) {\n                        if (Modifier.isPublic(method.getModifiers())) {\n                            addPreference = method.getName();\n                            break;\n                        }\n                    }\n                } catch (Throwable t) {\n                    XposedLogUtils.logI(TAG, \"Unable to find class/method in Settings to hook\");\n                    return;\n                }\n\n                Object media = XposedHelpers.callMethod(fragment, \"findPreference\", \"media_volume\");\n                if (media != null) order = (int) XposedHelpers.callMethod(media, \"getOrder\");\n\n                Object prefScreen = XposedHelpers.callMethod(fragment, \"getPreferenceScreen\");\n                Object pref = XposedHelpers.newInstance(mVsbCls, context);\n\n                XposedHelpers.callMethod(pref, \"setKey\", \"system_volume\");\n                XposedHelpers.callMethod(pref, \"setTitle\", modRes.getString(R.string.system_volume));\n                XposedHelpers.callMethod(pref, \"setPersistent\", true);\n                XposedHelpers.callMethod(prefScreen, addPreference, pref);\n                initSeekBar[0].invoke(fragment, \"system_volume\", 1, context.getResources().getIdentifier(\"ic_audio_vol\", \"drawable\", context.getPackageName()));\n                XposedHelpers.callMethod(pref, \"setOrder\", order);\n\n                pref = XposedHelpers.newInstance(mVsbCls, context);\n                XposedHelpers.callMethod(pref, \"setKey\", \"notification_volume\");\n                XposedHelpers.callMethod(pref, \"setTitle\", modRes.getString(R.string.notification_volume));\n                XposedHelpers.callMethod(pref, \"setPersistent\", true);\n                XposedHelpers.callMethod(prefScreen, addPreference, pref);\n                initSeekBar[0].invoke(fragment, \"notification_volume\", 5, context.getResources().getIdentifier(\"ic_audio_ring_notif\", \"drawable\", context.getPackageName()));\n                XposedHelpers.callMethod(pref, \"setOrder\", order);\n\n                Object mRingVolume = XposedHelpers.callMethod(param.thisObject, \"findPreference\", \"ring_volume\");\n                XposedHelpers.callMethod(mRingVolume, \"setTitle\", mCallsResId);\n            }\n        });\n    }\n\n\n    public static void initRes() {\n        mSystemResId = XposedInit.mResHook.addResource(\"ic_audio_system\", R.drawable.ic_audio_system);\n        mNotificationVolumeResId = XposedInit.mResHook.addResource(\"ic_notification_volume\", R.drawable.ic_miui_volume_notification);\n        /*mCallsResId = XposedInit.mResHook.addResource(\"ring_volume_option_newtitle\", R.string.calls);*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/AllRotations.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AllRotations extends BaseHook {\n    @Override\n    public void init() {\n        hookAllConstructors(\"com.android.server.wm.DisplayRotation\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.setIntField(param.thisObject, \"mAllowAllRotations\", mPrefsMap.getBoolean(\"system_framework_screen_all_rotations\") ? 1 : 0);\n            }\n        });\n    }\n\n    /*public static void initZygote() {\n        XposedInit.mResourcesHook.setObjectReplacement(\"android\", \"bool\", \"config_allowAllRotations\", mPrefsMap.getBoolean(\"system_framework_screen_all_rotations\"));\n    }*/\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/AllowUninstall.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport dalvik.system.PathClassLoader;\nimport de.robv.android.xposed.IXposedHookZygoteInit;\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AllowUninstall implements IXposedHookZygoteInit {\n\n    private final String SecurityManagerServiceName = \"com.miui.server.SecurityManagerService$1\";\n\n    private PathClassLoader servicesClassLoader = null;\n\n    private Class<?> SecurityManagerServiceClazz = null;\n\n    private java.util.Set<XC_MethodHook.Unhook> pathClassLoaderHook = null;\n\n    @Override\n    public void initZygote(StartupParam startupParam) {\n        XposedBridge.log(\"[Cemiuiler][I][AllowUninstall]: hook all PathClassLoader Constructors\");\n        pathClassLoaderHook =\n            XposedBridge.hookAllConstructors(PathClassLoader.class, new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    String path = param.args[0].toString();\n                    if (path.contains(\"/system/framework/services.jar\")) {\n                        XposedBridge.log(\"[Cemiuiler][I][AllowUninstall]: find services.jar ClassLoader\");\n                        try {\n                            servicesClassLoader = (PathClassLoader) param.thisObject;\n                            SecurityManagerServiceClazz = XposedHelpers.findClass(\n                                SecurityManagerServiceName,\n                                servicesClassLoader);\n                            XposedBridge.log(\"[Cemiuiler][I][AllowUninstall]: findClass SecurityManagerService$1\");\n                            XposedHelpers.findAndHookMethod(SecurityManagerServiceClazz,\n                                \"run\", new XC_MethodReplacement() {\n                                    @Override\n                                    protected Object replaceHookedMethod(MethodHookParam unused) {\n                                        XposedBridge.log(\"[Cemiuiler][I][AllowUninstall]: hooked checkSystemSelfProtection invoke\");\n                                        return null;\n                                    }\n                                });\n                            XposedBridge.log(\"[Cemiuiler][I][AllowUninstall]: hook method 'SecurityManagerService$1.run()'\");\n                        } catch (Exception e) {\n                            XposedBridge.log(\"[Cemiuiler][E][AllowUninstall]: AllowUninstall Exception!\");\n                            e.printStackTrace();\n                        } finally {\n                            for (Unhook hook : pathClassLoaderHook) {\n                                hook.unhook();\n                            }\n                            XposedBridge.log(\"[Cemiuiler][I][AllowUninstall]: unhook all PathClassLoader Constructors\");\n                        }\n                    }\n                }\n            });\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/AllowUntrustedTouch.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class AllowUntrustedTouch extends BaseHook {\n\n    Class<?> mInputManager;\n\n    @Override\n    public void init() {\n        mInputManager = findClassIfExists(\"android.hardware.input.InputManager\");\n        hookAllMethods(mInputManager, \"getBlockUntrustedTouchesMode\", XC_MethodReplacement.returnConstant(0));// error\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/AppDisableService.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\n\npublic class AppDisableService extends BaseHook {\n\n    public ArrayList<String> mMiuiCoreApps = new ArrayList<>(Arrays.asList(\n        \"com.lbe.security.miui\",\n        \"com.miui.securitycenter\"\n    ));\n\n    @Override\n    public void init() {\n\n        findAndHookMethod(\"com.android.server.pm.PackageManagerServiceImpl\", \"canBeDisabled\", String.class, int.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                boolean canBeDisabled = (boolean) param.getResult();\n                if (!canBeDisabled && !mMiuiCoreApps.contains(param.args[0])) {\n                    param.setResult(true);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/AppLinkVerify.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class AppLinkVerify extends BaseHook {\n\n    @Override\n    public void init() {\n        try {\n            hookAllMethods(\"com.android.server.pm.verify.domain.DomainVerificationUtils\", \"isDomainVerificationIntent\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        param.setResult(false);\n                    }\n                }\n            );\n        } catch (Throwable t) {\n            XposedLogUtils.logE(TAG, t);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/BackgroundBlurDrawable.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport android.graphics.Canvas\nimport com.sevtinge.cemiuiler.utils.HookUtils\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.logI\nimport de.robv.android.xposed.IXposedHookZygoteInit\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\n\nclass BackgroundBlurDrawable : IXposedHookZygoteInit {\n    override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam) {\n        val classLoader = startupParam.javaClass.classLoader\n        val mBackgroundBlurDrawableClass = classLoader?.let {\n            HookUtils.getClass(\"com.android.internal.graphics.drawable.BackgroundBlurDrawable\", it)\n        } ?: return\n        // 为 BackgroundBlurDrawable 应当增加一个判断\n        // 此处应该可以为AOSP提交修复补丁\n        XposedBridge.hookAllMethods(\n            mBackgroundBlurDrawableClass,\n            \"draw\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    val canvas = param.args[0] as Canvas\n                    if (!canvas.isHardwareAccelerated) {\n                        XposedLogUtils.logI(\"BackgroundBlurDrawable canvas is not HardwareAccelerated.\")\n                        param.result = null\n                    }\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/CleanOpenMenu.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.content.pm.ResolveInfo;\nimport android.net.Uri;\nimport android.os.BadParcelableException;\nimport android.os.Handler;\nimport android.util.Pair;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Set;\n\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class CleanOpenMenu extends BaseHook {\n\n    Class<?> mPackageManagerService;\n\n    @Override\n    public void init() {\n\n        mPackageManagerService = findClassIfExists(\"com.android.server.pm.PackageManagerService\");\n\n        findAndHookMethod(mPackageManagerService, \"systemReady\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                Handler mHandler = (Handler) XposedHelpers.getObjectField(param.thisObject, \"mHandler\");\n\n                new PrefsUtils.SharedPrefsObserver(mContext, mHandler) {\n                    @Override\n                    public void onChange(Uri uri) {\n                        try {\n                            String type = uri.getPathSegments().get(1);\n                            String key = uri.getPathSegments().get(2);\n                            if (!key.contains(\"pref_key_system_framework_clean_open_apps\")) return;\n\n                            switch (type) {\n                                case \"stringset\" ->\n                                    mPrefsMap.put(key, Helpers.getSharedStringSetPref(mContext, key));\n\n                                case \"integer\" ->\n                                    mPrefsMap.put(key, Helpers.getSharedIntPref(mContext, key, 0));\n                            }\n                        } catch (Throwable t) {\n                            XposedLogUtils.logE(TAG, t);\n                        }\n                    }\n                };\n            }\n        });\n\n        MethodHook hook = new MethodHook() {\n            @Override\n            @SuppressWarnings(\"unchecked\")\n            protected void after(MethodHookParam param) {\n                try {\n                    if (param.args[0] == null) return;\n                    if (param.args.length < 6) return;\n                    Intent origIntent = (Intent) param.args[0];\n                    Intent intent = (Intent) origIntent.clone();\n                    String action = intent.getAction();\n                    // XposedBridge.log(action + \": \" + intent.getType() + \" | \" + intent.getDataString());\n                    if (!Intent.ACTION_VIEW.equals(action)) return;\n                    if (intent.hasExtra(\"Cemiuiler\") && intent.getBooleanExtra(\"Cemiuiler\", false)) return;\n                    String scheme = intent.getScheme();\n                    boolean validSchemes = \"http\".equals(scheme) || \"https\".equals(scheme) || \"vnd.youtube\".equals(scheme);\n                    if (intent.getType() == null && !validSchemes) return;\n\n                    Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                    String mimeType = getContentType(mContext, intent);\n                    // XposedBridge.log(\"mimeType: \" + mimeType);\n\n                    String key = \"system_framework_clean_open_apps\";\n                    Set<String> selectedApps = mPrefsMap.getStringSet(key);\n                    List<ResolveInfo> resolved = (List<ResolveInfo>) param.getResult();\n                    ResolveInfo resolveInfo;\n                    PackageManager pm = mContext.getPackageManager();\n                    Iterator<ResolveInfo> itr = resolved.iterator();\n                    while (itr.hasNext()) {\n                        resolveInfo = itr.next();\n                        Pair<Boolean, Boolean> isRemove = isRemoveApp(false, mContext, resolveInfo.activityInfo.packageName, selectedApps, mimeType);\n                        boolean hasDual = false;\n                        try {\n                            hasDual = XposedHelpers.callMethod(pm, \"getPackageInfoAsUser\", resolveInfo.activityInfo.packageName, 0, 999) != null;\n                        } catch (Throwable ignore) {\n                        }\n                        if ((isRemove.first && !hasDual) || isRemove.first && hasDual && isRemove.second) itr.remove();\n                    }\n\n                    param.setResult(resolved);\n                } catch (Throwable t) {\n                    if (!(t instanceof BadParcelableException)) XposedBridge.log(t);\n                }\n            }\n        };\n\n        String ActQueryService = isMoreAndroidVersion(33) ? \"com.android.server.pm.ComputerEngine\" : \"com.android.server.pm.PackageManagerService$ComputerEngine\";\n        Helpers.hookAllMethods(ActQueryService, lpparam.classLoader, \"queryIntentActivitiesInternal\", hook);\n\n        // if (!findAndHookMethodSilently(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, int.class, int.class, int.class, boolean.class, boolean.class, hook))\n        // findAndHookMethod(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, int.class, int.class, hook);//error\n    }\n    // if (!findAndHookMethodSilently(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, long.class, long.class, int.class, boolean.class, boolean.class, hook))\n    // findAndHookMethod(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, long.class, int.class, hook);\n    //}\n\n\n    // 存在问题\n    private static Pair<Boolean, Boolean> isRemoveApp(boolean dynamic, Context context, String pkgName, Set<String> selectedApps, String mimeType) {\n        String key = \"system_framework_clean_open_apps\";\n        int mimeFlags0;\n        int mimeFlags999;\n        if (dynamic) {\n            mimeFlags0 = Helpers.getSharedIntPref(context, \"pref_key_\" + key + \"_\" + pkgName + \"|0\", Helpers.MimeType.ALL);\n            mimeFlags999 = Helpers.getSharedIntPref(context, \"pref_key_\" + key + \"_\" + pkgName + \"|999\", Helpers.MimeType.ALL);\n        } else {\n            mimeFlags0 = mPrefsMap.getInt(key + \"_\" + pkgName + \"|0\", Helpers.MimeType.ALL);\n            mimeFlags999 = mPrefsMap.getInt(key + \"_\" + pkgName + \"|999\", Helpers.MimeType.ALL);\n        }\n        boolean removeOriginal = (selectedApps.contains(pkgName) || selectedApps.contains(pkgName + \"|0\")) && hideMimeType(mimeFlags0, mimeType);\n        boolean removeDual = selectedApps.contains(pkgName + \"|999\") && hideMimeType(mimeFlags999, mimeType);\n        return new Pair<Boolean, Boolean>(removeOriginal, removeDual);\n    }\n\n    private static String getContentType(Context context, Intent intent) {\n        String scheme = intent.getScheme();\n        boolean linkSchemes = \"http\".equals(scheme) || \"https\".equals(scheme) || \"vnd.youtube\".equals(scheme);\n        String mimeType = intent.getType();\n        if (mimeType == null && linkSchemes) mimeType = \"link/*\";\n        if (mimeType == null && intent.getData() != null) try {\n            mimeType = context.getContentResolver().getType(intent.getData());\n        } catch (Throwable ignore) {\n        }\n        return mimeType;\n    }\n\n    private static boolean hideMimeType(int mimeFlags, String mimeType) {\n        int dataType = Helpers.MimeType.OTHERS;\n        if (mimeType != null)\n            if (mimeType.startsWith(\"image/\")) dataType = Helpers.MimeType.IMAGE;\n            else if (mimeType.startsWith(\"audio/\")) dataType = Helpers.MimeType.AUDIO;\n            else if (mimeType.startsWith(\"video/\")) dataType = Helpers.MimeType.VIDEO;\n            else if (mimeType.startsWith(\"text/\") ||\n                mimeType.startsWith(\"application/pdf\") ||\n                mimeType.startsWith(\"application/msword\") ||\n                mimeType.startsWith(\"application/vnd.ms-\") ||\n                mimeType.startsWith(\"application/vnd.openxmlformats-\")) dataType = Helpers.MimeType.DOCUMENT;\n            else if (mimeType.startsWith(\"application/vnd.android.package-archive\") ||\n                mimeType.startsWith(\"application/zip\") ||\n                mimeType.startsWith(\"application/x-zip\") ||\n                mimeType.startsWith(\"application/octet-stream\") ||\n                mimeType.startsWith(\"application/rar\") ||\n                mimeType.startsWith(\"application/x-rar\") ||\n                mimeType.startsWith(\"application/x-tar\") ||\n                mimeType.startsWith(\"application/x-bzip\") ||\n                mimeType.startsWith(\"application/gzip\") ||\n                mimeType.startsWith(\"application/x-lz\") ||\n                mimeType.startsWith(\"application/x-compress\") ||\n                mimeType.startsWith(\"application/x-7z\") ||\n                mimeType.startsWith(\"application/java-archive\")) dataType = Helpers.MimeType.ARCHIVE;\n            else if (mimeType.startsWith(\"link/\")) dataType = Helpers.MimeType.LINK;\n        return (mimeFlags & dataType) == dataType;\n    }\n\n    public static void initRes() {\n        Helpers.hookAllMethods(\"miui.securityspace.XSpaceResolverActivityHelper.ResolverActivityRunner\", null, \"run\", new Helpers.MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Intent mOriginalIntent = (Intent) XposedHelpers.getObjectField(param.thisObject, \"mOriginalIntent\");\n                if (mOriginalIntent == null) return;\n                String action = mOriginalIntent.getAction();\n                if (!Intent.ACTION_VIEW.equals(action)) return;\n                // if (mOriginalIntent.getDataString() != null && mOriginalIntent.getDataString().contains(\":\")) return;\n\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                String mAimPackageName = (String) XposedHelpers.getObjectField(param.thisObject, \"mAimPackageName\");\n                if (mContext == null || mAimPackageName == null) return;\n                Set<String> selectedApps = Helpers.getSharedStringSetPref(mContext, \"system_framework_clean_open_apps\");\n                String mimeType = getContentType(mContext, mOriginalIntent);\n                Pair<Boolean, Boolean> isRemove = isRemoveApp(true, mContext, mAimPackageName, selectedApps, mimeType);\n\n                View mRootView = (View) XposedHelpers.getObjectField(param.thisObject, \"mRootView\");\n                int appResId1 = mContext.getResources().getIdentifier(\"app1\", \"id\", \"android.miui\");\n                int appResId2 = mContext.getResources().getIdentifier(\"app2\", \"id\", \"android.miui\");\n                View originalApp = mRootView.findViewById(appResId1);\n                View dualApp = mRootView.findViewById(appResId2);\n                if (isRemove.first) dualApp.performClick();\n                else if (isRemove.second) originalApp.performClick();\n            }\n        });\n    }\n\n\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/CleanShareMenu.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.content.pm.ResolveInfo;\nimport android.os.BadParcelableException;\nimport android.os.Handler;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Set;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class CleanShareMenu extends BaseHook {\n\n    Class<?> mPackageManagerService;\n\n    @Override\n    public void init() {\n\n        mPackageManagerService = findClassIfExists(\"com.android.server.pm.PackageManagerService\");\n\n        findAndHookMethod(mPackageManagerService, \"systemReady\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                Handler mHandler = (Handler) XposedHelpers.getObjectField(param.thisObject, \"mHandler\");\n\n                new PrefsUtils.SharedPrefsObserver(mContext, mHandler, \"prefs_key_system_framework_clean_share_apps\") {\n                    @Override\n                    public void onChange(String name) {\n                        mPrefsMap.put(name, PrefsUtils.getSharedStringSetPrefs(mContext, name));\n                    }\n                };\n            }\n        });\n\n        MethodHook hook = new MethodHook() {\n            @Override\n            @SuppressWarnings(\"unchecked\")\n            protected void after(MethodHookParam param) throws Throwable {\n                try {\n                    if (param.args[0] == null) return;\n                    Intent origIntent = (Intent) param.args[0];\n                    String action = origIntent.getAction();\n                    if (action == null) return;\n                    if (!action.equals(Intent.ACTION_SEND) && !action.equals(Intent.ACTION_SENDTO) && !action.equals(Intent.ACTION_SEND_MULTIPLE))\n                        return;\n                    Intent intent = (Intent) origIntent.clone();\n                    if (intent.getDataString() != null && intent.getDataString().contains(\":\")) return;\n                    if (intent.hasExtra(\"Cemiuiler\") && intent.getBooleanExtra(\"Cemiuiler\", false)) return;\n                    Set<String> selectedApps = mPrefsMap.getStringSet(\"system_framework_clean_share_apps\");\n                    List<ResolveInfo> resolved = (List<ResolveInfo>) param.getResult();\n                    ResolveInfo resolveInfo;\n                    Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                    PackageManager pm = mContext.getPackageManager();\n                    Iterator<ResolveInfo> itr = resolved.iterator();\n                    while (itr.hasNext()) {\n                        resolveInfo = itr.next();\n                        boolean removeOriginal = selectedApps.contains(resolveInfo.activityInfo.packageName) || selectedApps.contains(resolveInfo.activityInfo.packageName + \"|0\");\n                        boolean removeDual = selectedApps.contains(resolveInfo.activityInfo.packageName + \"|999\");\n                        boolean hasDual = false;\n                        try {\n                            hasDual = XposedHelpers.callMethod(pm, \"getPackageInfoAsUser\", resolveInfo.activityInfo.packageName, 0, 999) != null;\n                        } catch (Throwable ignore) {\n                        }\n                        if ((removeOriginal && !hasDual) || removeOriginal && hasDual && removeDual) itr.remove();\n                    }\n                    param.setResult(resolved);\n                } catch (Throwable t) {\n                    if (!(t instanceof BadParcelableException)) XposedLogUtils.logE(TAG, t);\n                }\n            }\n        };\n\n        String ActQueryService = isMoreAndroidVersion(33) ? \"com.android.server.pm.ComputerEngine\" : \"com.android.server.pm.PackageManagerService$ComputerEngine\";\n        Helpers.hookAllMethods(ActQueryService, lpparam.classLoader, \"queryIntentActivitiesInternal\", hook);\n\n        // if (!findAndHookMethodSilently(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, int.class, int.class, int.class, boolean.class, boolean.class, hook))\n        // findAndHookMethod(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, int.class, int.class, hook);//error\n    }\n    // if (!findAndHookMethodSilently(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, long.class, long.class, int.class, boolean.class, boolean.class, hook))\n    // findAndHookMethod(mPackageManagerService, \"queryIntentActivitiesInternal\", Intent.class, String.class, long.class, int.class, hook);\n    //}\n\n    public static void initRes() {\n\n        Helpers.hookAllMethods(\"miui.securityspace.XSpaceResolverActivityHelper.ResolverActivityRunner\", null, \"run\", new Helpers.MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Intent mOriginalIntent = (Intent) XposedHelpers.getObjectField(param.thisObject, \"mOriginalIntent\");\n                if (mOriginalIntent == null) return;\n                String action = mOriginalIntent.getAction();\n                if (action == null) return;\n                if (!action.equals(Intent.ACTION_SEND) && !action.equals(Intent.ACTION_SENDTO) && !action.equals(Intent.ACTION_SEND_MULTIPLE))\n                    return;\n                if (mOriginalIntent.getDataString() != null && mOriginalIntent.getDataString().contains(\":\")) return;\n\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                String mAimPackageName = (String) XposedHelpers.getObjectField(param.thisObject, \"mAimPackageName\");\n                if (mContext == null || mAimPackageName == null) return;\n                Set<String> selectedApps = PrefsUtils.getSharedStringSetPrefs(mContext, \"prefs_key_system_framework_clean_share_apps\");\n                View mRootView = (View) XposedHelpers.getObjectField(param.thisObject, \"mRootView\");\n                int appResId1 = mContext.getResources().getIdentifier(\"app1\", \"id\", \"android.miui\");\n                int appResId2 = mContext.getResources().getIdentifier(\"app2\", \"id\", \"android.miui\");\n                boolean removeOriginal = selectedApps.contains(mAimPackageName) || selectedApps.contains(mAimPackageName + \"|0\");\n                boolean removeDual = selectedApps.contains(mAimPackageName + \"|999\");\n                View originalApp = mRootView.findViewById(appResId1);\n                View dualApp = mRootView.findViewById(appResId2);\n                if (removeOriginal) dualApp.performClick();\n                else if (removeDual) originalApp.performClick();\n            }\n        });\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/DeleteOnPostNotification.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DeleteOnPostNotification : BaseHook() {\n\n    override fun init() {\n        findAndHookMethod(\"com.android.server.wm.AlertWindowNotification\", \"onPostNotification\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam?) {\n                    param?.result = null\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/DisableCleaner.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DisableCleaner : BaseHook() {\n    override fun init() {\n        hookAllMethods(\"com.android.server.am.ActivityManagerService\", \"checkExcessivePowerUsage\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.ActivityManagerShellCommand\", \"runKillAll\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.CameraBooster\", \"boostCameraIfNeeded\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.OomAdjuster\", \"shouldKillExcessiveProcesses\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = false\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.OomAdjuster\", \"updateAndTrimProcessLSP\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.args[2] = 0\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.PhantomProcessList\", \"trimPhantomProcessesIfNecessary\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.ProcessMemoryCleaner\", \"checkBackgroundProcCompact\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.ProcessPowerCleaner\", \"handleAutoLockOff\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.am.SystemPressureController\", \"nStartPressureMonitor\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n        hookAllMethods(\"com.android.server.wm.RecentTasks\", \"trimInactiveRecentTasks\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.result = null\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/DisableFreeformBlackList.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class DisableFreeformBlackList extends BaseHook {\n\n    Class<?> mTaskCls;\n    Class<?> mMiuiMultiWindowAdapter;\n    Class<?> mMiuiMultiWindowUtils;\n\n    @Override\n    public void init() {\n\n        mTaskCls = findClassIfExists(\"com.android.server.wm.Task\");\n        mMiuiMultiWindowAdapter = findClassIfExists(\"android.util.MiuiMultiWindowAdapter\");\n        mMiuiMultiWindowUtils = findClassIfExists(\"android.util.MiuiMultiWindowUtils\");\n\n        MethodHook clearHook = new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                List<String> blackList = (List<String>) param.getResult();\n                if (blackList != null) blackList.clear();\n                param.setResult(blackList);\n            }\n        };\n        hookAllMethods(mMiuiMultiWindowAdapter, \"getFreeformBlackList\", clearHook);\n        hookAllMethods(mMiuiMultiWindowAdapter, \"getFreeformBlackListFromCloud\", clearHook);\n        hookAllMethods(mMiuiMultiWindowAdapter, \"setFreeformBlackList\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                List<String> blackList = new ArrayList<String>();\n                blackList.add(\"ab.cd.xyz\");\n                param.args[0] = blackList;\n            }\n        });\n\n        findAndHookMethod(mMiuiMultiWindowUtils, \"isForceResizeable\", XC_MethodReplacement.returnConstant(true));\n        findAndHookMethod(mMiuiMultiWindowUtils, \"supportFreeform\", XC_MethodReplacement.returnConstant(true));\n\n        // 强制所有活动设为可以调整大小\n        /*findAndHookMethod(mTaskCls, \"isResizeable\", XC_MethodReplacement.returnConstant(true));*/\n\n        mResHook.setResReplacement(\"android\", \"array\", \"freeform_black_list\", R.array.miui_freeform_black_list);\n        mResHook.setResReplacement(\"com.miui.rom\", \"array\", \"freeform_black_list\", R.array.miui_freeform_black_list);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/DisablePinVerifyPer72h.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class DisablePinVerifyPer72h extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.server.locksettings.LockSettingsStrongAuth\", \"rescheduleStrongAuthTimeoutAlarm\", long.class, int.class, XC_MethodReplacement.DO_NOTHING);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/FlagSecure.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Member;\nimport java.lang.reflect.Method;\nimport java.util.function.BiConsumer;\nimport java.util.function.BiPredicate;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class FlagSecure extends BaseHook {\n\n    /*@Override\n    public void init() {\n        findAndHookMethod(\"com.android.server.wm.WindowState\", \"isSecureLocked\", XC_MethodReplacement.returnConstant(false));\n    }*/\n\n    private final static Method deoptimizeMethod;\n\n    static {\n        Method m = null;\n        try {\n            m = XposedBridge.class.getDeclaredMethod(\"deoptimizeMethod\", Member.class);\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n        deoptimizeMethod = m;\n    }\n\n    static void deoptimizeMethod(Class<?> c, String n) throws InvocationTargetException, IllegalAccessException {\n        for (Method m : c.getDeclaredMethods()) {\n            if (deoptimizeMethod != null && m.getName().equals(n)) {\n                deoptimizeMethod.invoke(null, m);\n                Log.d(\"DisableFlagSecure\", \"Deoptimized \" + m);\n            }\n        }\n    }\n\n    @Override\n    public void init() {\n        if (lpparam.packageName.equals(\"android\")) {\n            try {\n                Class<?> windowsState = XposedHelpers.findClass(\"com.android.server.wm.WindowState\", lpparam.classLoader);\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                    XposedHelpers.findAndHookMethod(\n                        windowsState,\n                        \"isSecureLocked\",\n                        XC_MethodReplacement.returnConstant(false));\n                } else {\n                    XposedHelpers.findAndHookMethod(\n                        \"com.android.server.wm.WindowManagerService\",\n                        lpparam.classLoader,\n                        \"isSecureLocked\",\n                        windowsState,\n                        XC_MethodReplacement.returnConstant(false));\n                }\n            } catch (Throwable t) {\n                XposedBridge.log(t);\n            }\n            try {\n                deoptimizeMethod(XposedHelpers.findClass(\"com.android.server.wm.WindowStateAnimator\", lpparam.classLoader), \"createSurfaceLocked\");\n                var c = XposedHelpers.findClass(\"com.android.server.display.DisplayManagerService\", lpparam.classLoader);\n                deoptimizeMethod(c, \"setUserPreferredModeForDisplayLocked\");\n                deoptimizeMethod(c, \"setUserPreferredDisplayModeInternal\");\n                c = XposedHelpers.findClass(\"com.android.server.wm.InsetsPolicy$InsetsPolicyAnimationControlListener\", lpparam.classLoader);\n                for (var m : c.getDeclaredConstructors()) {\n                    deoptimizeMethod.invoke(null, m);\n                }\n                c = XposedHelpers.findClass(\"com.android.server.wm.InsetsPolicy\", lpparam.classLoader);\n                deoptimizeMethod(c, \"startAnimation\");\n                deoptimizeMethod(c, \"controlAnimationUnchecked\");\n                for (int i = 0; i < 20; i++) {\n                    c = XposedHelpers.findClassIfExists(\"com.android.server.wm.DisplayContent$$ExternalSyntheticLambda\" + i, lpparam.classLoader);\n                    if (c != null && BiPredicate.class.isAssignableFrom(c)) {\n                        deoptimizeMethod(c, \"test\");\n                    }\n                }\n                c = XposedHelpers.findClass(\"com.android.server.wm.WindowManagerService\", lpparam.classLoader);\n                deoptimizeMethod(c, \"relayoutWindow\");\n                for (int i = 0; i < 20; i++) {\n                    c = XposedHelpers.findClassIfExists(\"com.android.server.wm.RootWindowContainer$$ExternalSyntheticLambda\" + i, lpparam.classLoader);\n                    if (c != null && BiConsumer.class.isAssignableFrom(c)) {\n                        deoptimizeMethod(c, \"accept\");\n                    }\n                }\n            } catch (Throwable t) {\n                XposedLogUtils.logE(TAG, t);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/FreeFormCount.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass FreeFormCount : BaseHook() {\n    override fun init() {\n        val clazzMiuiFreeFormStackDisplayStrategy =\n            loadClass(\"com.android.server.wm.MiuiFreeFormStackDisplayStrategy\")\n        // GetMaxMiuiFreeFormStackCount\n        clazzMiuiFreeFormStackDisplayStrategy.methodFinder().filter {\n            name in setOf(\n                \"getMaxMiuiFreeFormStackCount\",\n                \"getMaxMiuiFreeFormStackCountForFlashBack\"\n            )\n        }.toList().createHooks {\n            returnConstant(256)\n        }\n\n        // ShouldStopStartFreeform\n        clazzMiuiFreeFormStackDisplayStrategy.methodFinder().first {\n            name == \"shouldStopStartFreeform\"\n        }.createHook {\n            returnConstant(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/FreeformBubble.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class FreeformBubble extends BaseHook {\n\n    Class<?> mMiuiMultiWindowUtils;\n\n    @Override\n    public void init() {\n\n        mMiuiMultiWindowUtils = findClassIfExists(\"android.util.MiuiMultiWindowUtils\");\n\n        findAndHookMethod(mMiuiMultiWindowUtils, \"multiFreeFormSupported\", Context.class, XC_MethodReplacement.returnConstant(true));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/LocationSimulation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class LocationSimulation extends BaseHook {\n\n    Class<?> mTelephonyManager;\n\n    @Override\n    public void init() {\n        mTelephonyManager = findClassIfExists(\"android.telephony.TelephonyManager\");\n\n        if (mTelephonyManager != null) {\n\n            findAndHookMethod(mTelephonyManager, \"getNetworkOperatorName\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedLogUtils.logI(TAG, \"getNetworkOperatorName：\" + param.getResult());\n                }\n            });\n\n            findAndHookMethod(mTelephonyManager, \"getSimOperatorName\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedLogUtils.logI(TAG, \"getSimOperatorName：\" + param.getResult());\n                }\n            });\n\n            findAndHookMethod(mTelephonyManager, \"getSimOperator\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedLogUtils.logI(TAG, \"getSimOperator：\" + param.getResult());\n                }\n            });\n\n            findAndHookMethod(mTelephonyManager, \"getNetworkOperator\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedLogUtils.logI(TAG, \"getNetworkOperator：\" + param.getResult());\n                }\n            });\n\n            findAndHookMethod(mTelephonyManager, \"getSimCountryIso\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedLogUtils.logI(TAG, \"getSimCountryIso：\" + param.getResult());\n                }\n            });\n\n            findAndHookMethod(mTelephonyManager, \"getNetworkCountryIso\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedLogUtils.logI(TAG, \"getNetworkCountryIso：\" + param.getResult());\n                }\n            });\n\n            findAndHookMethod(mTelephonyManager, \"getNeighboringCellInfo\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedLogUtils.logI(TAG, \"getNeighboringCellInfo：\" + param.getResult());\n                }\n            });\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/MultiFreeFormSupported.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject MultiFreeFormSupported : BaseHook() {\n    override fun init() {\n        runCatching {\n            if (!mPrefsMap.getBoolean(\"system_framework_freeform_recents_to_small_freeform\")) {\n                loadClass(\"android.util.MiuiMultiWindowUtils\").methodFinder().first {\n                    name == \"multiFreeFormSupported\"\n                }.createHook {\n                    before {\n                        val ex = Throwable()\n                        val stackTrace = ex.stackTrace\n                        var mResult = true\n                        for (i in stackTrace) {\n                            if (i.className == \"com.android.server.wm.MiuiFreeFormGestureController\\$FreeFormReceiver\") {\n                                mResult = false\n                                break\n                            }\n                        }\n                        it.result = mResult\n                    }\n                }\n                XposedLogUtils.logI(\"Hook with recents_to_small_freeform success!\")\n            } else {\n                loadClass(\"android.util.MiuiMultiWindowUtils\").methodFinder().first {\n                    name == \"multiFreeFormSupported\"\n                }.createHook {\n                    returnConstant(true)\n                }\n                XposedLogUtils.logI(\"Hook success!\")\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/PackagePermissions.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.ResolveInfo;\nimport android.os.Build;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class PackagePermissions extends BaseHook {\n    private final ArrayList<String> systemPackages = new ArrayList<>();\n\n    @Override\n    public void init() {\n        systemPackages.add(Helpers.mAppModulePkg);\n\n        // Allow signature level permissions for module\n        String PMSCls = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"com.android.server.pm.permission.PermissionManagerServiceImpl\" : \"com.android.server.pm.permission.PermissionManagerService\";\n\n        // Allow signature level permissions for module\n        hookAllMethods(PMSCls, \"shouldGrantPermissionBySignature\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                String pkgName = (String) XposedHelpers.callMethod(param.args[0], \"getPackageName\");\n                if (systemPackages.contains(pkgName)) param.setResult(true);\n            }\n        });\n\n\n        hookAllMethodsSilently(\"com.android.server.pm.PackageManagerServiceUtils\", \"verifySignatures\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                String pkgName = (String) XposedHelpers.callMethod(param.args[0], \"getName\");\n                if (systemPackages.contains(pkgName)) param.setResult(true);\n            }\n        });\n\n\n        // Make module appear as system app\n        String ActQueryService = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"com.android.server.pm.ComputerEngine\" : \"com.android.server.pm.PackageManagerService\";\n        hookAllMethods(ActQueryService, \"queryIntentActivitiesInternal\", new MethodHook() {\n            @Override\n            @SuppressWarnings(\"unchecked\")\n            protected void after(MethodHookParam param) {\n                if (param.args.length < 6) return;\n                List<ResolveInfo> infos = (List<ResolveInfo>) param.getResult();\n                if (infos != null) {\n                    for (ResolveInfo info : infos) {\n                        if (info != null && info.activityInfo != null && systemPackages.contains(info.activityInfo.packageName)) {\n                            XposedHelpers.setObjectField(info, \"system\", true);\n                        }\n                    }\n                }\n            }\n        });\n\n        findAndHookMethod(\"android.content.pm.ApplicationInfo\", \"isSystemApp\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                ApplicationInfo ai = (ApplicationInfo) param.thisObject;\n                if (ai != null && systemPackages.contains(ai.packageName)) {\n                    param.setResult(true);\n                }\n            }\n        });\n\n        findAndHookMethodSilently(\"android.content.pm.ApplicationInfo\", \"isSignedWithPlatformKey\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                ApplicationInfo ai = (ApplicationInfo) param.thisObject;\n                if (ai != null && systemPackages.contains(ai.packageName)) {\n                    param.setResult(true);\n                }\n            }\n        });\n\n        try {\n            Class<?> dpgpiClass = findClass(\"com.android.server.pm.MiuiDefaultPermissionGrantPolicy\");\n            String[] MIUI_SYSTEM_APPS = (String[]) XposedHelpers.getStaticObjectField(dpgpiClass, \"MIUI_SYSTEM_APPS\");\n            ArrayList<String> mySystemApps = new ArrayList<>(Arrays.asList(MIUI_SYSTEM_APPS));\n            mySystemApps.addAll(systemPackages);\n            XposedHelpers.setStaticObjectField(dpgpiClass, \"MIUI_SYSTEM_APPS\", mySystemApps.toArray(new String[0]));\n        } catch (Throwable t) {\n            XposedLogUtils.logW(TAG, t);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/RemoveSmallWindowRestrictions.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport android.content.Context\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.field\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject RemoveSmallWindowRestrictions : BaseHook() {\n    private val mSettingsClass = loadClass(\"com.android.server.wm.WindowManagerService\\$SettingsObserver\")\n    private val mWindowsUtilsClass = loadClass(\"android.util.MiuiMultiWindowUtils\")\n    private val mWindowsClass = loadClass(\"android.util.MiuiMultiWindowAdapter\")\n\n    override fun init() {\n        try {\n            loadClass(\"com.android.server.wm.ActivityTaskManagerService\").methodFinder().first {\n                name == \"retrieveSettings\"\n            }.createHook {\n                after { param ->\n                    param.thisObject.javaClass.field(\"mDevEnableNonResizableMultiWindow\")\n                        .setBoolean(param.thisObject, true)\n                }\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook retrieveSettings failed by: $e\")\n        }\n\n        try {\n            mSettingsClass.methodFinder().filter {\n                name == \"updateDevEnableNonResizableMultiWindow\"\n            }.toList().createHooks {\n                after { param ->\n                    val this0 = param.thisObject.javaClass.field(\"this\\$0\").get(param.thisObject)\n                    val mAtmService = this0.javaClass.field(\"mAtmService\").get(this0)\n                    mAtmService.javaClass.field(\"mDevEnableNonResizableMultiWindow\").setBoolean(mAtmService, true)\n                }\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook updateDevEnableNonResizableMultiWindow failed by: $e\")\n        }\n\n        try {\n            mSettingsClass.methodFinder().filter {\n                name == \"onChange\"\n            }.toList().createHooks {\n                after { param ->\n                    val this0 = param.thisObject.javaClass.field(\"this\\$0\").get(param.thisObject)\n                    val mAtmService = this0.javaClass.field(\"mAtmService\").get(this0)\n                    mAtmService.javaClass.field(\"mDevEnableNonResizableMultiWindow\").setBoolean(mAtmService, true)\n                }\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook onChange failed by: $e\")\n        }\n\n        try {\n            mWindowsUtilsClass.methodFinder().first {\n                name == \"isForceResizeable\"\n            }.createHook {\n                returnConstant(true)\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook isForceResizeable failed by: $e\")\n        }\n\n        // Author: LittleTurtle2333\n        try {\n            loadClass(\"com.android.server.wm.Task\").methodFinder().first {\n                name == \"isResizeable\"\n            }.createHook {\n                returnConstant(true)\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook isResizeable failed by: $e\")\n        }\n\n        try {\n            mWindowsClass.methodFinder().first {\n                name == \"getFreeformBlackList\"\n            }.createHook {\n                returnConstant(mutableListOf<String>())\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook getFreeformBlackList failed by: $e\")\n        }\n\n        try {\n            mWindowsClass.methodFinder().first {\n                name == \"getFreeformBlackListFromCloud\" && parameterTypes[0] == Context::class.java\n            }.createHook {\n                returnConstant(mutableListOf<String>())\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook getFreeformBlackListFromCloud failed by: $e\")\n        }\n\n        try {\n            mWindowsClass.methodFinder().first {\n                name == \"getStartFromFreeformBlackListFromCloud\"\n            }.createHook {\n                returnConstant(mutableListOf<String>())\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook getStartFromFreeformBlackListFromCloud failed by: $e\")\n        }\n\n        try {\n            mWindowsUtilsClass.methodFinder().first {\n                name == \"supportFreeform\"\n            }.createHook {\n                returnConstant(true)\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logI(\"Hook supportFreeform failed by: $e\")\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/ScreenRotation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ScreenRotation extends BaseHook {\n\n    @Override\n    public void init() {\n\n        findAndHookMethod(\"com.android.internal.view.RotationPolicy\", \"areAllRotationsAllowed\", Context.class, XC_MethodReplacement.returnConstant(mPrefsMap.getBoolean(\"system_framework_screen_all_rotations\")));\n\n        hookAllConstructors(\"com.android.server.wm.DisplayRotation\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.setIntField(param.thisObject, \"mAllowAllRotations\", mPrefsMap.getBoolean(\"system_framework_screen_all_rotations\") ? 1 : 0);\n            }\n        });\n    }\n\n    public static void initRes() {\n        XposedInit.mResHook.setObjectReplacement(\"android\", \"bool\", \"config_allowAllRotations\", mPrefsMap.getBoolean(\"system_framework_screen_all_rotations\"));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/SpeedInstall.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class SpeedInstall extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"android.content.pm.PackageInstaller\", \"isSupportedSpeedInstallV2\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/StickyFloatingWindows.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport android.annotation.SuppressLint;\nimport android.app.ActivityOptions;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.graphics.Rect;\nimport android.provider.Settings;\nimport android.util.Pair;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentHashMap;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class StickyFloatingWindows extends BaseHook {\n\n    public static ConcurrentHashMap<String, Pair<Float, Rect>> fwApps = new ConcurrentHashMap<>();\n\n    @Override\n    public void init() {\n\n        final List<String> fwBlackList = new ArrayList<>();\n        fwBlackList.add(\"com.miui.securitycenter\");\n        fwBlackList.add(\"com.miui.home\");\n        Class<?> MiuiMultiWindowUtils = findClass(\"android.util.MiuiMultiWindowUtils\");\n        hookAllMethods(\"com.android.server.wm.ActivityStarterInjector\", \"modifyLaunchActivityOptionIfNeed\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                if (param.args.length != 8) return;\n                Intent intent = (Intent) param.args[5];\n                if (intent == null || intent.getComponent() == null) return;\n                ActivityOptions options = (ActivityOptions) param.getResult();\n                int windowingMode = options == null ? -1 : (int) XposedHelpers.callMethod(options, \"getLaunchWindowingMode\");\n                String pkgName = intent.getComponent().getPackageName();\n                if (fwBlackList.contains(pkgName)) return;\n                Context mContext;\n                try {\n                    mContext = (Context) XposedHelpers.getObjectField(param.args[0], \"mContext\");\n                } catch (Throwable ignore) {\n                    mContext = (Context) XposedHelpers.getObjectField(XposedHelpers.getObjectField(param.args[0], \"mService\"), \"mContext\");\n                }\n                if (windowingMode != 5 && fwApps.containsKey(pkgName)) {\n                    try {\n                        if (MiuiMultiWindowUtils == null) {\n                            XposedLogUtils.logI(TAG, \"Cannot find MiuiMultiWindowUtils class\");\n                            return;\n                        }\n                        options = patchActivityOptions(mContext, options, pkgName, MiuiMultiWindowUtils);\n                        param.setResult(options);\n                    } catch (Throwable t) {\n                        XposedLogUtils.logW(TAG, \"\", t);\n                    }\n                } else if (windowingMode == 5 && !fwApps.containsKey(pkgName)) {\n                    fwApps.put(pkgName, new Pair<>(0f, null));\n                    storeFwAppsInSetting(mContext);\n                }\n            }\n        });\n\n        hookAllMethods(\"com.android.server.wm.ActivityTaskSupervisor\", \"startActivityFromRecents\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Object safeOptions = param.args[3];\n                ActivityOptions options = (ActivityOptions) XposedHelpers.callMethod(safeOptions, \"getOptions\", param.thisObject);\n                int windowingMode = options == null ? -1 : (int) XposedHelpers.callMethod(options, \"getLaunchWindowingMode\");\n                String pkgName = getTaskPackageName(param.thisObject, (int) param.args[2], options);\n                if (fwBlackList.contains(pkgName)) return;\n                if (windowingMode == 5 && pkgName != null) {\n                    fwApps.put(pkgName, new Pair<>(0f, null));\n                    Context mContext = (Context) XposedHelpers.getObjectField(XposedHelpers.getObjectField(param.thisObject, \"mService\"), \"mContext\");\n                    storeFwAppsInSetting(mContext);\n                }\n            }\n\n            @Override\n            protected void before(MethodHookParam param) {\n                Object safeOptions = param.args[3];\n                ActivityOptions options = (ActivityOptions) XposedHelpers.callMethod(safeOptions, \"getOptions\", param.thisObject);\n                int windowingMode = options == null ? -1 : (int) XposedHelpers.callMethod(options, \"getLaunchWindowingMode\");\n                String pkgName = getTaskPackageName(param.thisObject, (int) param.args[2], options);\n                if (fwBlackList.contains(pkgName)) return;\n                if (windowingMode != 5 && fwApps.containsKey(pkgName)) {\n                    Context mContext = (Context) XposedHelpers.getObjectField(XposedHelpers.getObjectField(param.thisObject, \"mService\"), \"mContext\");\n                    options = patchActivityOptions(mContext, options, pkgName, MiuiMultiWindowUtils);\n                    XposedHelpers.setObjectField(safeOptions, \"mOriginalOptions\", options);\n                    param.args[3] = safeOptions;\n                    Intent intent = new Intent(ACTION_PREFIX + \"dismissRecentsWhenFreeWindowOpen\");\n                    intent.putExtra(\"package\", pkgName);\n                    mContext.sendBroadcast(intent);\n                }\n            }\n        });\n\n        findAndHookMethod(\"com.android.server.wm.MiuiFreeFormGestureController$FreeFormReceiver\", \"onReceive\", Context.class, Intent.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                Intent intent = (Intent) param.args[1];\n                String action = intent.getAction();\n                if (action.equals(\"miui.intent.action_launch_fullscreen_from_freeform\")) {\n                    Object parentThis = XposedHelpers.getSurroundingThis(param.thisObject);\n                    XposedHelpers.setAdditionalInstanceField(parentThis, \"skipFreeFormStateClear\", true);\n                }\n            }\n        });\n\n        hookAllMethods(\"com.android.server.wm.MiuiFreeFormGestureController\", \"notifyFullScreenWidnowModeStart\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                if (param.args.length != 3) return;\n                String pkgName = (String) XposedHelpers.callMethod(param.args[1], \"getStackPackageName\");\n                Object skipClear = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"skipFreeFormStateClear\");\n                boolean skipFreeFormStateClear = false;\n                if (skipClear != null) {\n                    skipFreeFormStateClear = (boolean) skipClear;\n                }\n                if (!skipFreeFormStateClear) {\n                    if (fwBlackList.contains(pkgName)) return;\n                    if (fwApps.remove(pkgName) != null) {\n                        storeFwAppsInSetting((Context) XposedHelpers.getObjectField(XposedHelpers.getObjectField(param.thisObject, \"mService\"), \"mContext\"));\n                    }\n                } else {\n                    XposedHelpers.setAdditionalInstanceField(param.thisObject, \"skipFreeFormStateClear\", false);\n                }\n            }\n        });\n\n        hookAllMethods(\"com.android.server.wm.ActivityTaskManagerService\", \"launchSmallFreeFormWindow\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Object taskId = XposedHelpers.getObjectField(param.args[0], \"taskId\");\n                Object mMiuiFreeFormManagerService = XposedHelpers.getObjectField(param.thisObject, \"mMiuiFreeFormManagerService\");\n                Object miuiFreeFormActivityStack = XposedHelpers.callMethod(mMiuiFreeFormManagerService, \"getMiuiFreeFormActivityStack\", taskId);\n                String pkgName = (String) XposedHelpers.callMethod(miuiFreeFormActivityStack, \"getStackPackageName\");\n                if (fwBlackList.contains(pkgName)) return;\n                if (!fwApps.containsKey(pkgName)) {\n                    fwApps.put(pkgName, new Pair<>(0f, null));\n                    Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                    storeFwAppsInSetting(mContext);\n                }\n            }\n        });\n\n        findAndHookMethod(\"com.android.server.wm.ActivityTaskManagerService\", \"onSystemReady\", new MethodHook() {\n            @SuppressLint(\"UnspecifiedRegisterReceiverFlag\")\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                restoreFwAppsInSetting(mContext);\n                Class<?> MiuiMultiWindowAdapter = findClass(\"android.util.MiuiMultiWindowAdapter\", lpparam.classLoader);\n                List<String> blackList = (List<String>) XposedHelpers.getStaticObjectField(MiuiMultiWindowAdapter, \"FREEFORM_BLACK_LIST\");\n                blackList.clear();\n                mContext.registerReceiver(new BroadcastReceiver() {\n                    @Override\n                    public void onReceive(Context context, Intent intent) {\n                        String action = intent.getAction();\n                        if (action.equals(\"miui.intent.action_launch_fullscreen_from_freeform\")) {\n                            XposedHelpers.setAdditionalInstanceField(param.thisObject, \"skipFreeFormStateClear\", true);\n                        }\n                    }\n                }, new IntentFilter(\"miui.intent.action_launch_fullscreen_from_freeform\"));\n            }\n        });\n\n        hookAllMethods(\"com.android.server.wm.ActivityTaskManagerService\", \"resizeTask\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                String pkgName = getTaskPackageName(param.thisObject, (int) param.args[0]);\n                if (pkgName != null) {\n                    Object skipClear = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"skipFreeFormStateClear\");\n                    boolean skipFreeFormStateClear = false;\n                    if (skipClear != null) {\n                        skipFreeFormStateClear = (boolean) skipClear;\n                    }\n                    if (skipFreeFormStateClear) {\n                        XposedHelpers.setAdditionalInstanceField(param.thisObject, \"skipFreeFormStateClear\", false);\n                    } else {\n                        if (fwBlackList.contains(pkgName)) return;\n                        Object mMiuiFreeFormManagerService = XposedHelpers.getObjectField(param.thisObject, \"mMiuiFreeFormManagerService\");\n                        Object miuiFreeFormActivityStack = XposedHelpers.callMethod(mMiuiFreeFormManagerService, \"getMiuiFreeFormActivityStack\", param.args[0]);\n                        if (fwApps.containsKey(pkgName)) {\n                            Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                            float sScale = (float) XposedHelpers.callMethod(miuiFreeFormActivityStack, \"getFreeFormScale\");\n                            fwApps.put(pkgName, new Pair<>(sScale, new Rect((Rect) param.args[1])));\n                            storeFwAppsInSetting(mContext);\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n\n    public static String getTaskPackageName(Object thisObject, int taskId) {\n        return getTaskPackageName(thisObject, taskId, false, null);\n    }\n\n    public static String getTaskPackageName(Object thisObject, int taskId, ActivityOptions options) {\n        return getTaskPackageName(thisObject, taskId, true, options);\n    }\n\n    public static String getTaskPackageName(Object thisObject, int taskId, boolean withOptions, ActivityOptions options) {\n        Object mRootWindowContainer = XposedHelpers.getObjectField(thisObject, \"mRootWindowContainer\");\n        if (mRootWindowContainer == null) return null;\n        Object task = withOptions ?\n            XposedHelpers.callMethod(mRootWindowContainer, \"anyTaskForId\", taskId, 2, options, true) :\n            XposedHelpers.callMethod(mRootWindowContainer, \"anyTaskForId\", taskId, 0);\n        if (task == null) return null;\n        Intent intent = (Intent) XposedHelpers.getObjectField(task, \"intent\");\n        return intent == null ? null : intent.getComponent().getPackageName();\n    }\n\n    public static String serializeFwApps() {\n        StringBuilder data = new StringBuilder();\n        for (Map.Entry<String, Pair<Float, Rect>> entry : fwApps.entrySet()) {\n            Pair<Float, Rect> val = entry.getValue();\n            data.append(entry.getKey());\n            data.append(\":\");\n            data.append(val.first);\n            data.append(\":\");\n            data.append(val.second == null ? \"-\" : val.second.flattenToString());\n            data.append(\"|\");\n        }\n        return data.toString().replaceFirst(\"\\\\|$\", \"\");\n    }\n\n    public static void unserializeFwApps(String data) {\n        fwApps.clear();\n        if (data == null || data.isEmpty()) return;\n        String[] dataArr = data.split(\"\\\\|\");\n        for (String appData : dataArr) {\n            if (\"\".equals(appData)) continue;\n            String[] appDataArr = appData.split(\":\");\n            fwApps.put(appDataArr[0], new Pair<>(Float.parseFloat(appDataArr[1]), \"-\".equals(appDataArr[2]) ? null : Rect.unflattenFromString(appDataArr[2])));\n        }\n    }\n\n    public static void storeFwAppsInSetting(Context context) {\n        Settings.Global.putString(context.getContentResolver(), Helpers.mAppModulePkg + \".fw.apps\", serializeFwApps());\n    }\n\n    public static void restoreFwAppsInSetting(Context context) {\n        unserializeFwApps(Settings.Global.getString(context.getContentResolver(), Helpers.mAppModulePkg + \".fw.apps\"));\n    }\n\n    private static ActivityOptions patchActivityOptions(Context mContext, ActivityOptions options, String pkgName, Class<?> MiuiMultiWindowUtils) {\n        if (options == null) options = ActivityOptions.makeBasic();\n        XposedHelpers.callMethod(options, \"setLaunchWindowingMode\", 5);\n        XposedHelpers.callMethod(options, \"setMiuiConfigFlag\", 2);\n\n        Float scale;\n        Rect rect;\n        Pair<Float, Rect> values = fwApps.get(pkgName);\n        if (values == null || values.first == 0f || values.second == null) {\n            scale = 0.7f;\n            rect = (Rect) XposedHelpers.callStaticMethod(MiuiMultiWindowUtils, \"getFreeformRect\", mContext);\n        } else {\n            scale = values.first;\n            rect = values.second;\n        }\n        options.setLaunchBounds(rect);\n        try {\n            Object injector = XposedHelpers.callMethod(options, \"getActivityOptionsInjector\");\n            XposedHelpers.callMethod(injector, \"setFreeformScale\", scale);\n        } catch (Throwable ignore) {\n        }\n        return options;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/ThemeProvider.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.Log\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XC_MethodHook\nimport miui.drm.DrmManager\nimport miui.drm.ThemeReceiver\n\nclass ThemeProvider : BaseHook() {\n    override fun init() {\n        var hook: List<XC_MethodHook.Unhook>? = null\n        try {\n            ThemeReceiver::class.java.methodFinder().filterByName(\"validateTheme\").first().createHook {\n                before {\n                    hook = DrmManager::class.java.methodFinder().filterByName(\"isLegal\").toList().createHooks {\n                        returnConstant(DrmManager.DrmResult.DRM_SUCCESS)\n                    }\n                }\n                after {\n                    hook?.forEach { it.unhook() }\n                }\n            }\n        } catch (t: Throwable) {\n            Log.ex(t)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/ThermalBrightness.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ThermalBrightness extends BaseHook {\n    public final String displayPowerControllerImpl = \"com.android.server.display.DisplayPowerControllerImpl\";\n    public final String automaticBrightnessControllerImpl = \"com.android.server.display.AutomaticBrightnessControllerImpl\";\n    public final String thermalBrightnessController = \"com.android.server.display.ThermalBrightnessController\";\n    public final String temperatureController = \"com.android.server.display.TemperatureController\";\n\n    @Override\n    public void init() {\n        try {\n            XposedHelpers.findClass(displayPowerControllerImpl, lpparam.classLoader);\n            findAndHookConstructor(displayPowerControllerImpl,\n                new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        setDeclaredField(param, \"SUPPORT_TEMEPERATURE_CONTROL\", false);\n                        setDeclaredField(param, \"mThermalBrightnessControlAvailable\", false);\n                        setDeclaredField(param, \"mApplyThermalBrightnessRate\", false);\n                    }\n                }\n            );\n        } catch (XposedHelpers.ClassNotFoundError e) {\n            XposedLogUtils.logE(TAG, \"No found class: \" + e);\n        }\n\n        try {\n            XposedHelpers.findClass(automaticBrightnessControllerImpl, lpparam.classLoader);\n            findAndHookConstructor(automaticBrightnessControllerImpl,\n                new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        setDeclaredField(param, \"SUPPORT_TEMEPERATURE_CONTROL\", false);\n                    }\n                }\n            );\n        } catch (XposedHelpers.ClassNotFoundError e) {\n            XposedLogUtils.logE(TAG, \"No found class: \" + e);\n        }\n\n        try {\n            findClassIfExists(temperatureController).getDeclaredMethod(\"updateTemperature\");\n            findAndHookMethod(temperatureController,\n                \"updateTemperature\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        param.setResult(null);\n                    }\n                }\n            );\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have updateTemperature: \" + e);\n        }\n\n        /*hookAllMethods(\"com.android.server.display.DisplayPowerControllerImpl\",\n            \"adjustBrightnessByThermal\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.setResult(param.args[0]);\n                }\n            }\n        );*/\n\n        try {\n            findClassIfExists(displayPowerControllerImpl).getDeclaredMethod(\"updateThermalBrightness\", float.class);\n            findAndHookMethod(displayPowerControllerImpl,\n                \"updateThermalBrightness\", float.class, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        param.setResult(null);\n                    }\n                }\n            );\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have updateThermalBrightness: \" + e);\n        }\n\n        try {\n            findClassIfExists(thermalBrightnessController).getDeclaredMethod(\"updateThermalBrightnessIfNeeded\");\n            findAndHookMethod(thermalBrightnessController,\n                \"updateThermalBrightnessIfNeeded\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        param.setResult(false);\n                    }\n                }\n            );\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have updateThermalBrightnessIfNeeded: \" + e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/UseOriginalAnimation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UseOriginalAnimation extends BaseHook {\n    @Override\n    public void init() {\n        hookAllMethods(\"com.android.server.wm.AppTransitionInjector\", \"createActivityOpenCloseTransition\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(null);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/VolumeDefaultStream.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport android.content.Context;\nimport android.os.Handler;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class VolumeDefaultStream extends BaseHook {\n\n    Class<?> mAudioService;\n\n    @Override\n    public void init() {\n        mAudioService = findClassIfExists(\"com.android.server.audio.AudioService\");\n\n        findAndHookMethod(mAudioService, \"getActiveStreamType\", int.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                Handler mHandler = new Handler(mContext.getMainLooper());\n                new PrefsUtils.SharedPrefsObserver(mContext, mHandler, \"prefs_key_system_framework_default_volume_stream\", \"0\") {\n                    @Override\n                    public void onChange(String name, String defValue) {\n                        mPrefsMap.put(name, PrefsUtils.getSharedStringPrefs(mContext, name, defValue));\n                    }\n                };\n\n                int mDefaultVolumeStream = mPrefsMap.getStringAsInt(\"system_framework_default_volume_stream\", 0);\n\n                if (mDefaultVolumeStream > 0) {\n                    param.setResult(mDefaultVolumeStream);\n                }\n\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/VolumeDisableSafe.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class VolumeDisableSafe extends BaseHook {\n\n    Class<?> mAudioService;\n\n    @Override\n    public void init() {\n        mAudioService = findClassIfExists(\"com.android.server.audio.AudioService\");\n        returnIntConstant(mAudioService, \"safeMediaVolumeIndex\");\n    }\n\n    private void returnIntConstant(Class<?> cls, String methodName) {\n        hookAllMethods(cls, methodName, XC_MethodReplacement.returnConstant(2147483646));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/VolumeFirstPress.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport android.media.AudioManager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class VolumeFirstPress extends BaseHook {\n\n    Class<?> mVolumeController;\n\n    @Override\n    public void init() {\n        mVolumeController = findClassIfExists(\"com.android.server.audio.AudioService$VolumeController\");\n\n        findAndHookMethod(mVolumeController, \"suppressAdjustment\", int.class, int.class, boolean.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                int streamType = (int) param.args[0];\n                if (streamType != AudioManager.STREAM_MUSIC) return;\n                boolean isMuteAdjust = (boolean) param.args[2];\n                if (isMuteAdjust) return;\n                Object mController = XposedHelpers.getObjectField(param.thisObject, \"mController\");\n                if (mController == null) return;\n                param.setResult(false);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/VolumeMediaSteps.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass VolumeMediaSteps : BaseHook() {\n    override fun init() {\n        val mediaStepsSwitch = mPrefsMap.getInt(\"system_framework_volume_media_steps\", 15) > 15\n        val mediaSteps = mPrefsMap.getInt(\"system_framework_volume_media_steps\", 15)\n\n        loadClass(\"android.os.SystemProperties\").methodFinder().first {\n            name == \"getInt\" && returnType == Int::class.java\n        }.createHook {\n            before {\n                when (it.args[0] as String) {\n                    \"ro.config.media_vol_steps\" -> if (mediaStepsSwitch) it.result = mediaSteps\n                }\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/VolumeSeparateControl.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.os.Build;\nimport android.provider.Settings;\nimport android.util.SparseIntArray;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.Set;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class VolumeSeparateControl extends BaseHook {\n\n    Class<?> mAudioService;\n\n    @Override\n    public void init() {\n\n        mAudioService = findClassIfExists(\"com.android.server.audio.AudioService\");\n\n        findAndHookMethod(mAudioService, \"updateStreamVolumeAlias\", boolean.class, String.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                int[] mStreamVolumeAlias =\n                    (int[]) (isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ?\n                        XposedHelpers.getStaticObjectField(mAudioService, \"mStreamVolumeAlias\") :\n                        XposedHelpers.getObjectField(param.thisObject, \"mStreamVolumeAlias\"));\n                mStreamVolumeAlias[1] = 1;\n                mStreamVolumeAlias[5] = 5;\n\n                if (isAndroidT()) {\n                    XposedHelpers.setStaticObjectField(mAudioService, \"mStreamVolumeAlias\", mStreamVolumeAlias);\n                } else {\n                    XposedHelpers.setObjectField(param.thisObject, \"mStreamVolumeAlias\", mStreamVolumeAlias);\n                }\n            }\n        });\n\n        findAndHookMethod(\"com.android.server.audio.AudioService$VolumeStreamState\", \"readSettings\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n\n                int mStreamType = XposedHelpers.getIntField(param.thisObject, \"mStreamType\");\n                if (mStreamType != 1) return;\n\n                synchronized (param.method.getDeclaringClass()) {\n                    Class<?> audioSystem = XposedHelpers.findClassIfExists(\"android.media.AudioSystem\", lpparam.classLoader);\n                    Set<Integer> DEVICE_OUT_ALL = (Set<Integer>) XposedHelpers.getStaticObjectField(audioSystem, \"DEVICE_OUT_ALL_SET\");\n                    int DEVICE_OUT_DEFAULT = XposedHelpers.getStaticIntField(audioSystem, \"DEVICE_OUT_DEFAULT\");\n                    int[] DEFAULT_STREAM_VOLUME = (int[]) XposedHelpers.getStaticObjectField(audioSystem, \"DEFAULT_STREAM_VOLUME\");\n                    Set<Integer> remainingDevices = DEVICE_OUT_ALL;\n                    Object mContentResolver = XposedHelpers.getObjectField(XposedHelpers.getSurroundingThis(param.thisObject), \"mContentResolver\");\n                    SparseIntArray mIndexMap = (SparseIntArray) XposedHelpers.getObjectField(param.thisObject, \"mIndexMap\");\n\n                    for (Integer deviceType : remainingDevices) {\n                        int device = deviceType;\n                        String name = (String) XposedHelpers.callMethod(param.thisObject, \"getSettingNameForDevice\", device);\n                        int index = (int) XposedHelpers.callStaticMethod(Settings.System.class, \"getIntForUser\", mContentResolver, name, device == DEVICE_OUT_DEFAULT ? DEFAULT_STREAM_VOLUME[mStreamType] : -1, -2);\n                        if (index != -1) {\n                            mIndexMap.put(device, (int) XposedHelpers.callMethod(param.thisObject, \"getValidIndex\", 10 * index, true));\n                        }\n                    }\n                    XposedHelpers.setObjectField(param.thisObject, \"mIndexMap\", mIndexMap);\n                }\n                param.setResult(null);\n            }\n        });\n\n        findAndHookMethodSilently(mAudioService, \"shouldZenMuteStream\", int.class, new MethodHook() {\n            protected void after(MethodHookParam param) throws Throwable {\n                int mStreamType = (int) param.args[0];\n                if (mStreamType == 5 && !(boolean) param.getResult()) {\n                    int mZenMode = (int) XposedHelpers.callMethod(XposedHelpers.getObjectField(param.thisObject, \"mNm\"), \"getZenMode\");\n                    if (mZenMode == 1) param.setResult(true);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/VolumeSteps.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class VolumeSteps extends BaseHook {\n\n    Class<?> mAudioService;\n\n    @Override\n    public void init() {\n\n        mAudioService = findClass(\"com.android.server.audio.AudioService\");\n\n        findAndHookMethod(mAudioService, \"createStreamStates\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n\n                int[] maxStreamVolume = (int[]) XposedHelpers.getStaticObjectField(mAudioService, \"MAX_STREAM_VOLUME\");\n                int mult = mPrefsMap.getInt(\"system_framework_volume_steps\", 0);\n                if (mult <= 0) return;\n                for (int i = 0; i < maxStreamVolume.length; i++)\n                    maxStreamVolume[i] = Math.round(maxStreamVolume[i] * mult / 100.0f);\n                XposedHelpers.setStaticObjectField(mAudioService, \"MAX_STREAM_VOLUME\", maxStreamVolume);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/corepatch/BypassSignCheckForT.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.corepatch\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject BypassSignCheckForT : BaseHook() {\n    override fun init() {\n        try {\n            hookAllMethods(\"android.util.apk.ApkSignatureVerifier\", \"getMinimumSignatureSchemeVersionForTargetSdk\", object : MethodHook() {\n                override fun after(param: MethodHookParam?) {\n                    param?.result = 1\n                }\n            })\n        } catch (e: Throwable) {\n            XposedLogUtils.logE(TAG, e)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/corepatch/CorePatchForR.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.corepatch;\n\nimport static com.sevtinge.cemiuiler.module.app.SystemFrameworkForCorePatch.TAG;\nimport static de.robv.android.xposed.XposedHelpers.findClassIfExists;\nimport static de.robv.android.xposed.XposedHelpers.findMethodExactIfExists;\n\nimport android.app.AndroidAppHelper;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.pm.Signature;\nimport android.util.Log;\n\nimport com.sevtinge.cemiuiler.BuildConfig;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.Field;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Member;\nimport java.lang.reflect.Method;\nimport java.security.cert.Certificate;\nimport java.security.cert.X509Certificate;\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.zip.ZipEntry;\n\nimport de.robv.android.xposed.IXposedHookLoadPackage;\nimport de.robv.android.xposed.IXposedHookZygoteInit;\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XSharedPreferences;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage;\n\npublic class CorePatchForR extends XposedHelper implements IXposedHookLoadPackage, IXposedHookZygoteInit {\n    private final static Method deoptimizeMethod;\n    private static final boolean isNotReleaseVersion = !BuildConfig.BUILD_TYPE.contains(\"release\");\n\n    static {\n        Method m = null;\n        try {\n            m = XposedBridge.class.getDeclaredMethod(\"deoptimizeMethod\", Member.class);\n        } catch (Throwable t) {\n            XposedBridge.log(\"[E\" + TAG + \": \" + Log.getStackTraceString(t));\n        }\n        deoptimizeMethod = m;\n    }\n\n    static void deoptimizeMethod(Class<?> c, String n) throws InvocationTargetException, IllegalAccessException {\n        for (Method m : c.getDeclaredMethods()) {\n            if (deoptimizeMethod != null && m.getName().equals(n)) {\n                deoptimizeMethod.invoke(null, m);\n                if (isNotReleaseVersion)\n                    XposedBridge.log(\"[D\" + TAG + \": Deoptimized \" + m.getName());\n            }\n        }\n    }\n\n    final XSharedPreferences prefs = new XSharedPreferences(Helpers.mAppModulePkg, PrefsUtils.mPrefsName);\n\n    @Override\n    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException {\n        if (isNotReleaseVersion) {\n            XposedBridge.log(\"[D\" + TAG + \": downgrade=\" + prefs.getBoolean(\"prefs_key_system_framework_core_patch_downgr\", true));\n            XposedBridge.log(\"[D\" + TAG + \": authcreak=\" + prefs.getBoolean(\"prefs_key_system_framework_core_patch_auth_creak\", true));\n            XposedBridge.log(\"[D\" + TAG + \": digestCreak=\" + prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true));\n            XposedBridge.log(\"[D\" + TAG + \": UsePreSig=\" + prefs.getBoolean(\"prefs_key_system_framework_core_patch_use_pre_signature\", false));\n            XposedBridge.log(\"[D\" + TAG + \": enhancedMode=\" + prefs.getBoolean(\"prefs_key_system_framework_core_patch_enhanced_mode\", false));\n        }\n\n        var pmService = findClassIfExists(\"com.android.server.pm.PackageManagerService\",\n            loadPackageParam.classLoader);\n        if (pmService != null) {\n            var checkDowngrade = findMethodExactIfExists(pmService, \"checkDowngrade\",\n                \"com.android.server.pm.parsing.pkg.AndroidPackage\",\n                \"android.content.pm.PackageInfoLite\");\n            if (checkDowngrade != null) {\n                // 允许降级\n                XposedBridge.hookMethod(checkDowngrade, new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_downgr\", null));\n            }\n        }\n\n        // apk内文件修改后 digest校验会失败\n        hookAllMethods(\"android.util.jar.StrictJarVerifier\", loadPackageParam.classLoader, \"verifyMessageDigest\",\n            new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_auth_creak\", true));\n        hookAllMethods(\"android.util.jar.StrictJarVerifier\", loadPackageParam.classLoader, \"verify\",\n            new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_auth_creak\", true));\n        hookAllMethods(\"java.security.MessageDigest\", loadPackageParam.classLoader, \"isEqual\",\n            new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_auth_creak\", true));\n\n        // Targeting R+ (version \" + Build.VERSION_CODES.R + \" and above) requires\"\n        // + \" the resources.arsc of installed APKs to be stored uncompressed\"\n        // + \" and aligned on a 4-byte boundary\n        // target >=30 的情况下 resources.arsc 必须是未压缩的且4K对齐\n        hookAllMethods(\"android.content.res.AssetManager\", loadPackageParam.classLoader, \"containsAllocatedTable\",\n            new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_auth_creak\", false));\n\n        // No signature found in package of version \" + minSignatureSchemeVersion\n        // + \" or newer for package \" + apkPath\n        findAndHookMethod(\"android.util.apk.ApkSignatureVerifier\", loadPackageParam.classLoader, \"getMinimumSignatureSchemeVersionForTargetSdk\", int.class,\n            new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_auth_creak\", 0));\n        var apkVerifierClass = XposedHelpers.findClassIfExists(\"com.android.apksig.ApkVerifier\",\n            loadPackageParam.classLoader);\n        if (apkVerifierClass != null) {\n            findAndHookMethod(apkVerifierClass, \"getMinimumSignatureSchemeVersionForTargetSdk\", loadPackageParam.classLoader, int.class,\n                new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_auth_creak\", 0));\n        }\n\n        // Package \" + packageName + \" signatures do not match previously installed version; ignoring!\"\n        // public boolean checkCapability(String sha256String, @CertCapabilities int flags) {\n        // public boolean checkCapability(SigningDetails oldDetails, @CertCapabilities int flags)\n        hookAllMethods(\"android.content.pm.PackageParser\", loadPackageParam.classLoader, \"checkCapability\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) {\n                // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert)\n                // Or applications will have all privileged permissions\n                // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities\n                if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_auth_creak\", true)) {\n                    if ((Integer) param.args[1] != 4) {\n                        param.setResult(true);\n                    }\n                }\n            }\n        });\n\n        // 当verifyV1Signature抛出转换异常时，替换一个签名作为返回值\n        // 如果用户已安装apk，并且其定义了私有权限，则安装时会因签名与模块内硬编码的不一致而被拒绝。尝试从待安装apk中获取签名。如果其中apk的签名和已安装的一致（只动了内容）就没有问题。此策略可能有潜在的安全隐患。\n        Class<?> pkc = XposedHelpers.findClass(\"sun.security.pkcs.PKCS7\", loadPackageParam.classLoader);\n        Constructor<?> constructor = XposedHelpers.findConstructorExact(pkc, byte[].class);\n        constructor.setAccessible(true);\n        Class<?> ASV = XposedHelpers.findClass(\"android.util.apk.ApkSignatureVerifier\", loadPackageParam.classLoader);\n        Class<?> sJarClass = XposedHelpers.findClass(\"android.util.jar.StrictJarFile\", loadPackageParam.classLoader);\n        Constructor<?> constructorExact = XposedHelpers.findConstructorExact(sJarClass, String.class, boolean.class, boolean.class);\n        constructorExact.setAccessible(true);\n        Class<?> signingDetails = getSigningDetails(loadPackageParam.classLoader);\n        Constructor<?> findConstructorExact = XposedHelpers.findConstructorExact(signingDetails, Signature[].class, Integer.TYPE);\n        findConstructorExact.setAccessible(true);\n        Class<?> packageParserException = XposedHelpers.findClass(\"android.content.pm.PackageParser.PackageParserException\", loadPackageParam.classLoader);\n        Field error = XposedHelpers.findField(packageParserException, \"error\");\n        error.setAccessible(true);\n        Object[] signingDetailsArgs = new Object[2];\n        signingDetailsArgs[1] = 1;\n        Class<?> parseResult = findClassIfExists(\"android.content.pm.parsing.result.ParseResult\", loadPackageParam.classLoader);\n        hookAllMethods(\"android.util.jar.StrictJarVerifier\", loadPackageParam.classLoader, \"verifyBytes\", new XC_MethodHook() {\n            public void afterHookedMethod(MethodHookParam param) throws Throwable {\n                super.afterHookedMethod(param);\n                if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true)) {\n                    if (!prefs.getBoolean(\"prefs_key_system_framework_core_patch_use_pre_signature\", false)) {\n                        final Object block = constructor.newInstance(param.args[0]);\n                        Object[] infos = (Object[]) XposedHelpers.callMethod(block, \"getSignerInfos\");\n                        Object info = infos[0];\n                        List<X509Certificate> verifiedSignerCertChain = (List<X509Certificate>) XposedHelpers.callMethod(info, \"getCertificateChain\", block);\n                        param.setResult(verifiedSignerCertChain.toArray(\n                            new X509Certificate[0]));\n                    }\n                }\n            }\n        });\n        hookAllMethods(\"android.util.apk.ApkSignatureVerifier\", loadPackageParam.classLoader, \"verifyV1Signature\", new XC_MethodHook() {\n            public void afterHookedMethod(MethodHookParam methodHookParam) throws Throwable {\n                if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_auth_creak\", true)) {\n                    Throwable throwable = methodHookParam.getThrowable();\n                    Integer parseErr = null;\n                    if (parseResult != null && ((Method) methodHookParam.method).getReturnType() == parseResult) {\n                        Object result = methodHookParam.getResult();\n                        if ((boolean) XposedHelpers.callMethod(result, \"isError\")) {\n                            parseErr = (int) XposedHelpers.callMethod(result, \"getErrorCode\");\n                        }\n                    }\n                    if (throwable != null || parseErr != null) {\n                        Signature[] lastSigs = null;\n                        try {\n                            if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_use_pre_signature\", false)) {\n                                PackageManager PM = AndroidAppHelper.currentApplication().getPackageManager();\n                                if (PM == null) {\n                                    XposedBridge.log(\"[E\" + TAG +\"[\" + BuildConfig.APPLICATION_ID + \"] Cannot get the Package Manager... Are you using MiUI?\");\n                                } else {\n                                    PackageInfo pI;\n                                    if (parseErr != null) {\n                                        pI = PM.getPackageArchiveInfo((String) methodHookParam.args[1], 0);\n                                    } else {\n                                        pI = PM.getPackageArchiveInfo((String) methodHookParam.args[0], 0);\n                                    }\n                                    PackageInfo InstpI = PM.getPackageInfo(pI.packageName, PackageManager.GET_SIGNATURES);\n                                    lastSigs = InstpI.signatures;\n                                }\n                            }\n                        } catch (Throwable ignored) {\n                        }\n                        try {\n                            if (lastSigs == null && prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true)) {\n                                final Object origJarFile = constructorExact.newInstance(methodHookParam.args[parseErr == null ? 0 : 1], true, false);\n                                final ZipEntry manifestEntry = (ZipEntry) XposedHelpers.callMethod(origJarFile, \"findEntry\", \"AndroidManifest.xml\");\n                                final Certificate[][] lastCerts;\n                                if (parseErr != null) {\n                                    lastCerts = (Certificate[][]) XposedHelpers.callMethod(XposedHelpers.callStaticMethod(ASV, \"loadCertificates\", methodHookParam.args[0], origJarFile, manifestEntry), \"getResult\");\n                                } else {\n                                    lastCerts = (Certificate[][]) XposedHelpers.callStaticMethod(ASV, \"loadCertificates\", origJarFile, manifestEntry);\n                                }\n                                lastSigs = (Signature[]) XposedHelpers.callStaticMethod(ASV, \"convertToSignatures\", (Object) lastCerts);\n                            }\n                        } catch (Throwable ignored) {\n                        }\n                        if (lastSigs != null) {\n                            signingDetailsArgs[0] = lastSigs;\n                        } else {\n                            signingDetailsArgs[0] = new Signature[]{new Signature(SIGNATURE)};\n                        }\n                        Object newInstance = findConstructorExact.newInstance(signingDetailsArgs);\n\n                        // 修复 java.lang.ClassCastException: Cannot cast android.content.pm.PackageParser$SigningDetails to android.util.apk.ApkSignatureVerifier$SigningDetailsWithDigests\n                        Class<?> signingDetailsWithDigests = findClassIfExists(\"android.util.apk.ApkSignatureVerifier.SigningDetailsWithDigests\", loadPackageParam.classLoader);\n                        if (signingDetailsWithDigests != null) {\n                            Constructor<?> signingDetailsWithDigestsConstructorExact = XposedHelpers.findConstructorExact(signingDetailsWithDigests, signingDetails, Map.class);\n                            signingDetailsWithDigestsConstructorExact.setAccessible(true);\n                            newInstance = signingDetailsWithDigestsConstructorExact.newInstance(newInstance, null);\n                        }\n                        if (throwable != null) {\n                            Throwable cause = throwable.getCause();\n                            if (throwable.getClass() == packageParserException) {\n                                if (error.getInt(throwable) == -103) {\n                                    methodHookParam.setResult(newInstance);\n                                }\n                            }\n                            if (cause != null && cause.getClass() == packageParserException) {\n                                if (error.getInt(cause) == -103) {\n                                    methodHookParam.setResult(newInstance);\n                                }\n                            }\n                        }\n                        if (parseErr != null && parseErr == -103) {\n                            Object input = methodHookParam.args[0];\n                            XposedHelpers.callMethod(input, \"reset\");\n                            methodHookParam.setResult(XposedHelpers.callMethod(input, \"success\", newInstance));\n                        }\n                    }\n                }\n            }\n        });\n\n\n        // New package has a different signature\n        // 处理覆盖安装但签名不一致\n        hookAllMethods(signingDetails, \"checkCapability\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) {\n                // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert)\n                // Or applications will have all privileged permissions\n                // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities\n                if (((Integer) param.args[1] != 4) && prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true)) {\n                    param.setResult(true);\n                }\n            }\n        });\n        // if app is system app, allow to use hidden api, even if app not using a system signature\n        findAndHookMethod(\"android.content.pm.ApplicationInfo\", loadPackageParam.classLoader, \"isPackageWhitelistedForHiddenApis\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {\n                super.beforeHookedMethod(param);\n                if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true)) {\n                    ApplicationInfo info = (ApplicationInfo) param.thisObject;\n                    if ((info.flags & ApplicationInfo.FLAG_SYSTEM) != 0\n                        || (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {\n                        param.setResult(true);\n                    }\n                }\n            }\n        });\n\n        var utilClass = findClass(\"com.android.server.pm.PackageManagerServiceUtils\", loadPackageParam.classLoader);\n        if (utilClass != null) {\n            try {\n                deoptimizeMethod(utilClass, \"verifySignatures\");\n            } catch (Throwable e) {\n                XposedBridge.log(\"[E\" + TAG + \": deoptimizing failed\" + Log.getStackTraceString(e));\n            }\n        }\n\n        var keySetManagerClass = findClass(\"com.android.server.pm.KeySetManagerService\", loadPackageParam.classLoader);\n        if (keySetManagerClass != null) {\n            var shouldBypass = new ThreadLocal<Boolean>();\n            hookAllMethods(keySetManagerClass, \"shouldCheckUpgradeKeySetLocked\", new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true) && Arrays.stream(Thread.currentThread().getStackTrace()).anyMatch((o) -> \"preparePackageLI\".equals(o.getMethodName()))) {\n                        shouldBypass.set(true);\n                        param.setResult(true);\n                    } else {\n                        shouldBypass.set(false);\n                    }\n                }\n            });\n            hookAllMethods(keySetManagerClass, \"checkUpgradeKeySetLocked\", new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    if (prefs.getBoolean(\"digestCreak\", true) && shouldBypass.get()) {\n                        param.setResult(true);\n                    }\n                }\n            });\n        }\n    }\n\n    Class<?> getSigningDetails(ClassLoader classLoader) {\n        return XposedHelpers.findClass(\"android.content.pm.PackageParser.SigningDetails\", classLoader);\n    }\n\n    @Override\n    public void initZygote(StartupParam startupParam) {\n\n        hookAllMethods(\"android.content.pm.PackageParser\", null, \"getApkSigningVersion\", XC_MethodReplacement.returnConstant(1));\n        hookAllConstructors(\"android.util.jar.StrictJarVerifier\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {\n                if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_enhanced_mode\", false)) {\n                    super.beforeHookedMethod(param);\n                    param.args[3] = Boolean.FALSE;\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/corepatch/CorePatchForS.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.corepatch;\n\nimport static de.robv.android.xposed.XposedBridge.hookMethod;\n\nimport java.lang.reflect.InvocationTargetException;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedHelpers;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage;\n\npublic class CorePatchForS extends CorePatchForR {\n    @Override\n    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException {\n        super.handleLoadPackage(loadPackageParam);\n\n        var pmService = XposedHelpers.findClassIfExists(\"com.android.server.pm.PackageManagerService\",\n            loadPackageParam.classLoader);\n        if (pmService != null) {\n            var doesSignatureMatchForPermissions = XposedHelpers.findMethodExactIfExists(pmService, \"doesSignatureMatchForPermissions\",\n                String.class, \"com.android.server.pm.parsing.pkg.ParsedPackage\", int.class);\n            if (doesSignatureMatchForPermissions != null) {\n                hookMethod(doesSignatureMatchForPermissions, new XC_MethodHook() {\n                    @Override\n                    protected void afterHookedMethod(MethodHookParam param) {\n                        if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true) && prefs.getBoolean(\"prefs_key_system_framework_core_patch_use_pre_signature\", false)) {\n                            //If we decide to crack this then at least make sure they are same apks, avoid another one that tries to impersonate.\n                            if (param.getResult().equals(false)) {\n                                String pPname = (String) XposedHelpers.callMethod(param.args[1], \"getPackageName\");\n                                if (pPname.contentEquals((String) param.args[0])) {\n                                    param.setResult(true);\n                                }\n                            }\n                        }\n                    }\n                });\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/corepatch/CorePatchForT.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.corepatch;\n\nimport java.lang.reflect.InvocationTargetException;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage;\n\npublic class CorePatchForT extends CorePatchForS {\n    @Override\n    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException {\n        super.handleLoadPackage(loadPackageParam);\n\n        var checkDowngrade = XposedHelpers.findMethodExactIfExists(\"com.android.server.pm.PackageManagerServiceUtils\", loadPackageParam.classLoader,\n            \"checkDowngrade\",\n            \"com.android.server.pm.parsing.pkg.AndroidPackage\",\n            \"android.content.pm.PackageInfoLite\");\n        if (checkDowngrade != null) {\n            XposedBridge.hookMethod(checkDowngrade, new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_downgr\", null));\n        }\n\n        Class<?> signingDetails = getSigningDetails(loadPackageParam.classLoader);\n        // New package has a different signature\n        // 处理覆盖安装但签名不一致\n        hookAllMethods(signingDetails, \"checkCapability\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) {\n                // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert)\n                // Or applications will have all privileged permissions\n                // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities\n                if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true)) {\n                    if ((Integer) param.args[1] != 4) {\n                        param.setResult(true);\n                    }\n                }\n            }\n        });\n\n        // Package \" + packageName + \" signatures do not match previously installed version; ignoring!\"\n        // public boolean checkCapability(String sha256String, @CertCapabilities int flags) {\n        // public boolean checkCapability(SigningDetails oldDetails, @CertCapabilities int flags)\n        hookAllMethods(\"android.content.pm.PackageParser\", loadPackageParam.classLoader, \"checkCapability\", new XC_MethodHook() {\n            @Override\n            protected void beforeHookedMethod(MethodHookParam param) {\n                // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert)\n                // Or applications will have all privileged permissions\n                // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities\n                if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_auth_creak\", true)) {\n                    if ((Integer) param.args[1] != 4) {\n                        param.setResult(true);\n                    }\n                }\n            }\n        });\n\n        findAndHookMethod(\"com.android.server.pm.InstallPackageHelper\", loadPackageParam.classLoader,\n            \"doesSignatureMatchForPermissions\", String.class,\n            \"com.android.server.pm.parsing.pkg.ParsedPackage\", int.class, new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true) && prefs.getBoolean(\"prefs_key_system_framework_core_patch_use_pre_signature\", false)) {\n                        //If we decide to crack this then at least make sure they are same apks, avoid another one that tries to impersonate.\n                        if (param.getResult().equals(false)) {\n                            String pPname = (String) XposedHelpers.callMethod(param.args[1], \"getPackageName\");\n                            if (pPname.contentEquals((String) param.args[0])) {\n                                param.setResult(true);\n                            }\n                        }\n                    }\n                }\n            });\n\n        var assertMinSignatureSchemeIsValid = XposedHelpers.findMethodExactIfExists(\"com.android.server.pm.ScanPackageUtils\", loadPackageParam.classLoader,\n            \"assertMinSignatureSchemeIsValid\",\n            \"com.android.server.pm.parsing.pkg.AndroidPackage\", int.class);\n        if (assertMinSignatureSchemeIsValid != null) {\n            XposedBridge.hookMethod(assertMinSignatureSchemeIsValid, new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_auth_creak\", true)) {\n                        param.setResult(null);\n                    }\n                }\n            });\n        }\n\n        Class<?> strictJarVerifier = findClass(\"android.util.jar.StrictJarVerifier\", loadPackageParam.classLoader);\n        if (strictJarVerifier != null) {\n            XposedBridge.hookAllConstructors(strictJarVerifier, new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_auth_creak\", true)) {\n                        XposedHelpers.setBooleanField(param.thisObject, \"signatureSchemeRollbackProtectionsEnforced\", false);\n                    }\n                }\n            });\n        }\n    }\n\n    @Override\n    Class<?> getSigningDetails(ClassLoader classLoader) {\n        return XposedHelpers.findClassIfExists(\"android.content.pm.SigningDetails\", classLoader);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/corepatch/CorePatchForU.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.corepatch;\n\nimport static com.sevtinge.cemiuiler.module.app.SystemFrameworkForCorePatch.TAG;\n\nimport android.util.Log;\n\nimport java.lang.reflect.InvocationTargetException;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage;\n\npublic class CorePatchForU extends CorePatchForT {\n    @Override\n    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException {\n        super.handleLoadPackage(loadPackageParam);\n\n        var utilClass = findClass(\"com.android.server.pm.ReconcilePackageUtils\", loadPackageParam.classLoader);\n        if (utilClass != null) {\n            try {\n                deoptimizeMethod(utilClass, \"reconcilePackages\");\n            } catch (Throwable e) {\n                XposedBridge.log(\"[E\" + TAG + \" deoptimizing failed\" + Log.getStackTraceString(e));\n            }\n        }\n\n        // ee11a9c (Rename AndroidPackageApi to AndroidPackage)\n        findAndHookMethod(\"com.android.server.pm.PackageManagerServiceUtils\", loadPackageParam.classLoader,\n            \"checkDowngrade\",\n            \"com.android.server.pm.pkg.AndroidPackage\",\n            \"android.content.pm.PackageInfoLite\",\n            new ReturnConstant(prefs, \"prefs_key_system_framework_core_patch_downgr\", null));\n\n\n        findAndHookMethod(\"com.android.server.pm.InstallPackageHelper\", loadPackageParam.classLoader,\n            \"doesSignatureMatchForPermissions\", String.class,\n            \"com.android.server.pm.parsing.pkg.ParsedPackage\", int.class, new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_digest_creak\", true) && prefs.getBoolean(\"prefs_key_system_framework_core_patch_use_pre_signature\", false)) {\n                        //If we decide to crack this then at least make sure they are same apks, avoid another one that tries to impersonate.\n                        if (param.getResult().equals(false)) {\n                            String pPname = (String) XposedHelpers.callMethod(param.args[1], \"getPackageName\");\n                            if (pPname.contentEquals((String) param.args[0])) {\n                                param.setResult(true);\n                            }\n                        }\n                    }\n                }\n            });\n\n        findAndHookMethod(\"com.android.server.pm.ScanPackageUtils\", loadPackageParam.classLoader,\n            \"assertMinSignatureSchemeIsValid\",\n            \"com.android.server.pm.pkg.AndroidPackage\", int.class,\n            new XC_MethodHook() {\n                @Override\n                protected void afterHookedMethod(MethodHookParam param) {\n                    if (prefs.getBoolean(\"prefs_key_system_framework_core_patch_auth_creak\", true)) {\n                        param.setResult(null);\n                    }\n                }\n            });\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/corepatch/ReturnConstant.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.corepatch;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XSharedPreferences;\n\npublic class ReturnConstant extends XC_MethodHook {\n    private final XSharedPreferences prefs;\n    private final String prefsKey;\n    private final Object value;\n\n    public ReturnConstant(XSharedPreferences prefs, String prefsKey, Object value) {\n        this.prefs = prefs;\n        this.prefsKey = prefsKey;\n        this.value = value;\n    }\n\n    @Override\n    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {\n        super.beforeHookedMethod(param);\n        prefs.reload();\n        if (prefs.getBoolean(prefsKey, true)) {\n            param.setResult(value);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/corepatch/XposedHelper.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.corepatch;\n\nimport static com.sevtinge.cemiuiler.module.app.SystemFrameworkForCorePatch.TAG;\n\nimport android.util.Log;\n\nimport com.sevtinge.cemiuiler.BuildConfig;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class XposedHelper {\n    public final String SIGNATURE = \"308203c6308202aea003020102021426d148b7c65944abcf3a683b4c3dd3b139c4ec85300d06092a864886f70d01010b05003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3139303130323138353233385a170d3439303130323138353233385a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820122300d06092a864886f70d01010105000382010f003082010a028201010087fcde48d9beaeba37b733a397ae586fb42b6c3f4ce758dc3ef1327754a049b58f738664ece587994f1c6362f98c9be5fe82c72177260c390781f74a10a8a6f05a6b5ca0c7c5826e15526d8d7f0e74f2170064896b0cf32634a388e1a975ed6bab10744d9b371cba85069834bf098f1de0205cdee8e715759d302a64d248067a15b9beea11b61305e367ac71b1a898bf2eec7342109c9c5813a579d8a1b3e6a3fe290ea82e27fdba748a663f73cca5807cff1e4ad6f3ccca7c02945926a47279d1159599d4ecf01c9d0b62e385c6320a7a1e4ddc9833f237e814b34024b9ad108a5b00786ea15593a50ca7987cbbdc203c096eed5ff4bf8a63d27d33ecc963990203010001a350304e300c0603551d13040530030101ff301d0603551d0e04160414a361efb002034d596c3a60ad7b0332012a16aee3301f0603551d23041830168014a361efb002034d596c3a60ad7b0332012a16aee3300d06092a864886f70d01010b0500038201010022ccb684a7a8706f3ee7c81d6750fd662bf39f84805862040b625ddf378eeefae5a4f1f283deea61a3c7f8e7963fd745415153a531912b82b596e7409287ba26fb80cedba18f22ae3d987466e1fdd88e440402b2ea2819db5392cadee501350e81b8791675ea1a2ed7ef7696dff273f13fb742bb9625fa12ce9c2cb0b7b3d94b21792f1252b1d9e4f7012cb341b62ff556e6864b40927e942065d8f0f51273fcda979b8832dd5562c79acf719de6be5aee2a85f89265b071bf38339e2d31041bc501d5e0c034ab1cd9c64353b10ee70b49274093d13f733eb9d3543140814c72f8e003f301c7a00b1872cc008ad55e26df2e8f07441002c4bcb7dc746745f0db\";\n\n    public static void findAndHookMethod(String className, ClassLoader classLoader, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            if (findClass(className, classLoader) != null) {\n                XposedHelpers.findAndHookMethod(className, classLoader, methodName, parameterTypesAndCallback);\n            }\n        } catch (Throwable e) {\n            if (BuildConfig.DEBUG)\n                XposedBridge.log(\"[E\" + TAG + \": \" + Log.getStackTraceString(e));\n        }\n    }\n    public static void findAndHookMethod(Class<?> clazz, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            if (clazz != null) {\n                XposedHelpers.findAndHookMethod(clazz, methodName, parameterTypesAndCallback);\n            }\n        } catch (Throwable e) {\n            if (BuildConfig.DEBUG)\n                XposedBridge.log(\"[E\" + TAG + \": \" + Log.getStackTraceString(e));\n        }\n    }\n    public static void hookAllMethods(String className, ClassLoader classLoader, String methodName, XC_MethodHook callback) {\n        try {\n            Class<?> packageParser = findClass(className, classLoader);\n            XposedBridge.hookAllMethods(packageParser, methodName, callback);\n        } catch (Throwable e) {\n            if (BuildConfig.DEBUG)\n                XposedBridge.log(\"[E\" + TAG + \": \" + Log.getStackTraceString(e));\n        }\n\n    }\n\n    public void hookAllMethods(Class<?> hookClass, String methodName, XC_MethodHook callback) {\n        try {\n            XposedBridge.hookAllMethods(hookClass, methodName, callback);\n        } catch (Throwable e) {\n            if (BuildConfig.DEBUG)\n                XposedBridge.log(\"[E\" + TAG + \": \" + Log.getStackTraceString(e));\n        }\n    }\n\n    public static Class<?> findClass(String className, ClassLoader classLoader) {\n        try {\n            return Class.forName(className, false, classLoader);\n        } catch (Throwable e) {\n            if (BuildConfig.DEBUG)\n                XposedBridge.log(\"[E\" + TAG + \": \" + Log.getStackTraceString(e));\n        }\n        return null;\n    }\n\n    public static void hookAllConstructors(String className, XC_MethodHook callback) {\n        try {\n            Class<?> packageParser = findClass(className, null);\n            XposedBridge.hookAllConstructors(packageParser, callback);\n        } catch (Throwable e) {\n            if (BuildConfig.DEBUG)\n                XposedBridge.log(\"[E\" + TAG + \": \" + Log.getStackTraceString(e));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/display/AutoBrightness.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.display;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.net.Uri;\nimport android.os.Handler;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.MathUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AutoBrightness extends BaseHook {\n\n    private static float mMaximumBacklight;\n    private static float mMinimumBacklight;\n    private static int backlightMaxLevel;\n\n    private static float constrainValue(float val) {\n        if (val < 0) val = 0;\n        if (val > 1) val = 1;\n\n        boolean limit_min = mPrefsMap.getBoolean(\"system_control_center_auto_brightness_min\");\n        boolean limit_max = mPrefsMap.getBoolean(\"system_control_center_auto_brightness_max\");\n        int min_pct = mPrefsMap.getInt(\"system_ui_auto_brightness_min\", 25);\n        int max_pct = mPrefsMap.getInt(\"system_ui_auto_brightness_max\", 75);\n\n        float min, max;\n        min = MathUtils.convertGammaToLinearFloat(min_pct / 100f * backlightMaxLevel, backlightMaxLevel, mMinimumBacklight, mMaximumBacklight);\n        max = MathUtils.convertGammaToLinearFloat(max_pct / 100f * backlightMaxLevel, backlightMaxLevel, mMinimumBacklight, mMaximumBacklight);\n\n        if (limit_min && val < min) val = min;\n        if (limit_max && val > max) val = max;\n        return val;\n    }\n\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(\"com.android.server.display.AutomaticBrightnessController\", lpparam.classLoader, \"clampScreenBrightness\", float.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                float val = (float) param.getResult();\n                if (val >= 0) {\n                    float res = constrainValue(val);\n                    param.setResult(res);\n                }\n            }\n        });\n\n        Helpers.hookAllConstructors(\"com.android.server.display.AutomaticBrightnessController\", lpparam.classLoader, new Helpers.MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                XposedHelpers.setLongField(param.thisObject, \"mBrighteningLightDebounceConfig\", 1000L);\n                XposedHelpers.setLongField(param.thisObject, \"mDarkeningLightDebounceConfig\", 1200L);\n            }\n        });\n\n        Helpers.findAndHookMethod(\"com.android.server.display.DisplayPowerController\", lpparam.classLoader, \"clampScreenBrightness\", float.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                float val = (float) param.getResult();\n                if (val >= 0) {\n                    float res = constrainValue(val);\n                    param.setResult(res);\n                }\n            }\n        });\n\n        Helpers.hookAllConstructors(\"com.android.server.display.DisplayPowerController\", lpparam.classLoader, new Helpers.MethodHook() {\n            @Override\n            @SuppressLint(\"DiscouragedApi\")\n            protected void before(final MethodHookParam param) throws Throwable {\n                Resources res = Resources.getSystem();\n                int minBrightnessLevel = res.getInteger(res.getIdentifier(\"config_screenBrightnessSettingMinimum\", \"integer\", \"android\"));\n                int maxBrightnessLevel = res.getInteger(res.getIdentifier(\"config_screenBrightnessSettingMaximum\", \"integer\", \"android\"));\n                int backlightBit = res.getInteger(res.getIdentifier(\"config_backlightBit\", \"integer\", \"android.miui\"));\n                backlightMaxLevel = (1 << backlightBit) - 1;\n                mMinimumBacklight = (minBrightnessLevel - 1) * 1.0f / (backlightMaxLevel - 1);\n                mMaximumBacklight = (maxBrightnessLevel - 1) * 1.0f / (backlightMaxLevel - 1);\n            }\n\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                Handler mHandler = (Handler) XposedHelpers.getObjectField(param.thisObject, \"mHandler\");\n                new Helpers.SharedPrefObserver(mContext, mHandler) {\n                    @Override\n                    public void onChange(Uri uri) {\n                        try {\n                            String type = uri.getPathSegments().get(1);\n                            String key = uri.getPathSegments().get(2);\n                            switch (type) {\n                                case \"integer\" -> {\n                                    int defVal = \"pref_key_system_control_center_min_brightness\".equals(key) ? 25 : 75;\n                                    mPrefsMap.put(key, Helpers.getSharedIntPref(mContext, key, defVal));\n                                }\n                                case \"boolean\" ->\n                                    mPrefsMap.put(key, Helpers.getSharedBoolPref(mContext, key, false));\n                            }\n                        } catch (Throwable t) {\n                            LogD(TAG, \"onChange\", t);\n                        }\n                    }\n                };\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/display/DisplayCutout.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.display\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DisplayCutout : BaseHook() {\n    override fun init() {\n        hookAllMethods(\"android.view.DisplayCutout\", \"pathAndDisplayCutoutFromSpec\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    param.args[0] = \"M 0,0 H 0 V 0 Z\"\n                    param.args[1] = \"\"\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/display/ToastTime.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.display;\n\nimport android.content.Context;\nimport android.os.Handler;\nimport android.os.Message;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport java.util.ArrayList;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ToastTime extends BaseHook {\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(\"com.android.server.notification.NotificationManagerService\", lpparam.classLoader, \"showNextToastLocked\",\n            new MethodHook() {\n            @Override\n            @SuppressWarnings(\"unchecked\")\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context)XposedHelpers.callMethod(param.thisObject, \"getContext\");\n                Handler mHandler = (Handler)XposedHelpers.getObjectField(param.thisObject, \"mHandler\");\n                ArrayList<Object> mToastQueue = (ArrayList<Object>)XposedHelpers.getObjectField(param.thisObject, \"mToastQueue\");\n                if (mContext == null || mHandler == null || mToastQueue == null || mToastQueue.size() == 0) return;\n                int mod = (Helpers.getSharedIntPref(mContext, \"system_ui_display_toast_times\", 0) - 4) * 1000;\n                for (Object record: mToastQueue)\n                    if (record != null && mHandler.hasMessages(2, record)) {\n                        mHandler.removeCallbacksAndMessages(record);\n                        int duration = XposedHelpers.getIntField(record, \"duration\");\n                        int delay = Math.max(1000, (duration == 1 ? 3500 : 2000) + mod);\n                        mHandler.sendMessageDelayed(Message.obtain(mHandler, 2, record), delay);\n                    }\n            }\n        });\n\n        Helpers.findAndHookMethod(\"com.android.server.policy.PhoneWindowManager\", lpparam.classLoader, \"systemReady\",\n            new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context)XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                Handler mHandler = (Handler)XposedHelpers.getObjectField(param.thisObject, \"mHandler\");\n\n                new Helpers.SharedPrefObserver(mContext, mHandler, \"system_ui_display_toast_times\", 0) {\n                    @Override\n                    public void onChange(String name, int defValue) {\n                        mPrefsMap.put(name, Helpers.getSharedIntPref(mContext, name, defValue));\n                    }\n                };\n            }\n        });\n\n        String windowClass = \"com.android.server.wm.DisplayPolicy\";\n        Helpers.hookAllMethods(windowClass, lpparam.classLoader, \"adjustWindowParamsLw\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                Object lp = param.args.length == 1 ? param.args[0] : param.args[1];\n                XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mPrevHideTimeout\", XposedHelpers.getLongField(lp, \"hideTimeoutMilliseconds\"));\n            }\n\n            @Override\n            protected void after(MethodHookParam param) {\n                Object lp = param.args.length == 1 ? param.args[0] : param.args[1];\n                long mPrevHideTimeout = (long)XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mPrevHideTimeout\");\n                long mHideTimeout = XposedHelpers.getLongField(lp, \"hideTimeoutMilliseconds\");\n                if (mPrevHideTimeout == -1 || mHideTimeout == -1) return;\n\n                long dur = 0;\n                if (mPrevHideTimeout == 1000 || mPrevHideTimeout == 4000 || mPrevHideTimeout == 5000 || mPrevHideTimeout == 7000 || mPrevHideTimeout != mHideTimeout)\n                    dur = Math.max(1000, 3500 + (mPrefsMap.getInt(\"system_ui_display_toast_times\", 0) - 4) * 1000);\n                if (dur != 0) XposedHelpers.setLongField(lp, \"hideTimeoutMilliseconds\", dur);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/freeform/OpenAppInFreeForm.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.freeform;\n\nimport android.app.ActivityOptions;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.util.MiuiMultiWindowUtils;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\nimport miui.app.MiuiFreeFormManager;\n\npublic class OpenAppInFreeForm extends BaseHook {\n\n    Class<?> mActivityStarter;\n    Class<?> mActivityTaskManagerService;\n\n    @Override\n    public void init() {\n        if (mPrefsMap.getBoolean(\"system_framework_freeform_jump\")) {\n            mActivityStarter = findClassIfExists(\"com.android.server.wm.ActivityStarter\");\n            mActivityTaskManagerService = findClassIfExists(\"com.android.server.wm.ActivityTaskManagerService\");\n\n\n            findAndHookMethod(mActivityTaskManagerService, \"onSystemReady\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                    IntentFilter intentFilter = new IntentFilter();\n                    intentFilter.addAction(ACTION_PREFIX + \"SetFreeFormPackage\");\n                    BroadcastReceiver mReceiver = new BroadcastReceiver() {\n                        @Override\n                        public void onReceive(Context context, Intent intent) {\n                            String action = intent.getAction();\n                            if (action == null) return;\n\n                            if (action.equals(ACTION_PREFIX + \"SetFreeFormPackage\")) {\n                                String pkg = intent.getStringExtra(\"package\");\n                                XposedHelpers.setAdditionalStaticField(MiuiFreeFormManager.class, \"nextFreeformPackage\", pkg);\n                            }\n                        }\n                    };\n                    mContext.registerReceiver(mReceiver, intentFilter);\n                }\n            });\n\n            hookAllMethods(mActivityStarter, \"executeRequest\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    Object request = param.args[0];\n                    Intent intent = (Intent) XposedHelpers.getObjectField(request, \"intent\");\n                    Object safeOptions = XposedHelpers.getObjectField(request, \"activityOptions\");\n                    if (safeOptions != null) {\n                        ActivityOptions ao = (ActivityOptions) XposedHelpers.getObjectField(safeOptions, \"mOriginalOptions\");\n                        if (ao != null && XposedHelpers.getIntField(ao, \"mLaunchWindowingMode\") == 5) {\n                            return;\n                        }\n                    }\n                    String callingPackage = (String) XposedHelpers.getObjectField(request, \"callingPackage\");\n                    boolean openInFw = shouldOpenInFreeForm(intent, callingPackage);\n\n//                Bundle ao = safeOptions != null ? (Bundle) XposedHelpers.callMethod(safeOptions, \"getActivityOptionsBundle\") : null;\n//                String reason = (String) XposedHelpers.getObjectField(request, \"reason\");\n//                Helpers.log(\"startAct: \" + callingPackage\n//                    + \" reason| \" + reason\n//                    + \" intent| \" + intent\n//                    + \" openInFw| \" + openInFw\n//                    + \" activityOptions| \" + Helpers.stringifyBundle(ao)\n//                    + \" intentExtra| \" + Helpers.stringifyBundle(intent.getExtras())\n//                );\n\n                    if (openInFw) {\n                        Context mContext = (Context) XposedHelpers.getObjectField(XposedHelpers.getObjectField(param.thisObject, \"mService\"), \"mContext\");\n                        ActivityOptions options = MiuiMultiWindowUtils.getActivityOptions(mContext, intent.getComponent().getPackageName(), true, false);\n                        XposedHelpers.callMethod(param.thisObject, \"setActivityOptions\", options.toBundle());\n                    }\n                }\n            });\n        }\n    }\n\n    private boolean shouldOpenInFreeForm(Intent intent, String callingPackage) {\n        if (intent == null || intent.getComponent() == null) {\n            return false;\n        }\n        final List<String> fwBlackList = new ArrayList<>();\n        fwBlackList.add(\"com.miui.home\");\n        fwBlackList.add(\"com.android.camera\");\n        fwBlackList.add(\"com.android.systemui\");\n        String pkgName = intent.getComponent().getPackageName();\n        if (fwBlackList.contains(pkgName)) {\n            return false;\n        }\n        boolean openInFw = false;\n        final boolean openFwWhenShare = mPrefsMap.getBoolean(\"system_framework_freeform_app_share\");\n        if (openFwWhenShare) {\n            /*if (mPrefsMap.getStringSet(\"system_fw_forcein_actionsend_apps\").contains(pkgName)) return false;*/\n            if (\"com.miui.packageinstaller\".equals(pkgName) && intent.getComponent().getClassName().contains(\"com.miui.packageInstaller.NewPackageInstallerActivity\")) {\n                return true;\n            }\n            if (Intent.ACTION_SEND.equals(intent.getAction()) && !pkgName.equals(callingPackage)) {\n                openInFw = true;\n            } else if (\"com.tencent.mm\".equals(pkgName) && intent.getComponent().getClassName().contains(\".plugin.base.stub.WXEntryActivity\")) {\n                openInFw = true;\n            }\n        }\n        if (!openInFw) {\n            Object pkg = XposedHelpers.getAdditionalStaticField(MiuiFreeFormManager.class, \"nextFreeformPackage\");\n            openInFw = pkgName.equals(pkg);\n            if (openInFw) {\n                XposedHelpers.removeAdditionalStaticField(MiuiFreeFormManager.class, \"nextFreeformPackage\");\n            }\n        }\n        return openInFw;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/mipad/IgnoreStylusKeyGesture.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.mipad\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadFirstClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject IgnoreStylusKeyGesture : BaseHook() {\n    override fun init() {\n        val clazzMiuiStylusPageKeyListener = loadFirstClass(\n            \"com.miui.server.input.stylus.MiuiStylusPageKeyListener\",\n            \"com.miui.server.stylus.MiuiStylusPageKeyListener\"\n        )\n        val methodNames =\n            setOf(\"isPageKeyEnable\", \"needInterceptBeforeDispatching\", \"shouldInterceptKey\")\n\n        clazzMiuiStylusPageKeyListener.methodFinder().filter {\n            name in methodNames\n        }.toList().createHooks {\n            returnConstant(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/mipad/NoMagicPointer.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.mipad\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject NoMagicPointer : BaseHook() {\n    override fun init() {\n        loadClassOrNull(\"android.magicpointer.util.MiuiMagicPointerUtils\")?.methodFinder()?.first {\n            name == \"isEnable\"\n        }?.createHook {\n            returnConstant(false)\n        }\n\n        loadClass(\"com.android.server.SystemServerImpl\").methodFinder().first {\n            name == \"addMagicPointerManagerService\"\n        }.createHook {\n            returnConstant(null)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/mipad/RemoveStylusBluetoothRestriction.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.mipad\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.invokeStaticMethodBestMatch\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.ObjectUtils\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject RemoveStylusBluetoothRestriction : BaseHook() {\n    override fun init() {\n        val clazzMiuiStylusDeviceListener =\n            loadClass(\"com.miui.server.input.stylus.MiuiStylusDeviceListener\")\n        clazzMiuiStylusDeviceListener.declaredConstructors.createHooks {\n            after {\n                setTouchModeStylusEnable()\n            }\n        }\n        clazzMiuiStylusDeviceListener.declaredMethods.createHooks {\n            replace {\n                setTouchModeStylusEnable()\n            }\n        }\n    }\n\n    private fun setTouchModeStylusEnable() {\n        val driverVersion =\n            mPrefsMap.getStringAsInt(\"mipad_input_bluetooth_version\", 2)\n        val flag: Int = 0x10 or driverVersion\n        val instanceITouchFeature =\n            invokeStaticMethodBestMatch(\n                loadClass(\"miui.util.ITouchFeature\"),\n                \"getInstance\"\n            )!!\n        ObjectUtils.invokeMethodBestMatch(\n            instanceITouchFeature,\n            \"setTouchMode\",\n            null,\n            0, 20, flag\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/mipad/RestoreEsc.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.mipad\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject RestoreEsc : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.server.input.config.InputCommonConfig\").methodFinder().first {\n            name == \"setPadMode\"\n        }.createHook {\n            before {\n                it.args[0] = false\n            }\n        }\n\n        loadClass(\"com.android.server.input.InputManagerServiceStubImpl\").methodFinder().first {\n            name == \"switchPadMode\"\n        }.createHook {\n            before {\n                it.args[0] = false\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/mipad/SetGestureNeedFingerNum.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.mipad\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject SetGestureNeedFingerNum : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.server.input.gesture.multifingergesture.gesture.BaseMiuiMultiFingerGesture\").methodFinder()\n            .first {\n                name == \"getFunctionNeedFingerNum\"\n            }.createHook {\n            returnConstant(4)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/network/DualNRSupport.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.network\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DualNRSupport : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isDualNrSupported\"\n            }.createHook {\n                before {\n                    it.result = true\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/network/DualSASupport.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.network\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject DualSASupport : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isDualSaSupported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/network/N1Band.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.network\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject N1Band : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN1Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/network/N28Band.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.network\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject N28Band : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN28Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemframework/network/N5N8Band.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemframework.network\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject N5N8Band : BaseHook() {\n    override fun init() {\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN5Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n\n        runCatching {\n            loadClass(\"miui.telephony.TelephonyManagerEx\").methodFinder().first {\n                name == \"isN8Supported\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/AddMiuiPlusEntry.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook;\n\npublic class AddMiuiPlusEntry extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.settings.connection.MiMirrorController\", \"isMirrorSupported\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(XC_MethodHook.MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n    }\n}\n\n\n\n\n\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/AppsFreezerEnable.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\npublic class AppsFreezerEnable extends BaseHook {\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(\"com.android.settings.development.CachedAppsFreezerPreferenceController\",\n            lpparam.classLoader,\n            \"isAvailable\",\n            new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    super.after(param);\n                    param.setResult(true);\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/EnableFoldArea.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.setStaticObject\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.LazyClass.SettingsFeaturesClass\n\nclass EnableFoldArea : BaseHook() {\n    override fun init() {\n        setStaticObject(\n            SettingsFeaturesClass,\n            \"IS_SUPPORT_FOLD_SCREEN_SETTINGS\",\n            true\n        )\n\n        SettingsFeaturesClass.methodFinder().first(){\n            name == \"isSupportFoldScreenSettings\"\n        }.createHook {\n            before{\n                it.result = true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/EnablePadArea.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.setStaticObject\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.LazyClass.SettingsFeaturesClass\n\nclass EnablePadArea : BaseHook() {\n    override fun init() {\n        setStaticObject(\n            SettingsFeaturesClass,\n            \"IS_SUPPORT_TABLET_SCREEN_SETTINGS\",\n            true\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/EnableSpeedMode.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class EnableSpeedMode extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.settings.development.SpeedModeToolsPreferenceController\", \"getAvailabilityStatus\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(0);\n            }\n        });\n\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/InternationalBuild.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\nimport miui.os.Build;\n\npublic class InternationalBuild extends BaseHook {\n    @Override\n    public void init() {\n        XposedHelpers.setStaticBooleanField(Build.class, \"IS_INTERNATIONAL_BUILD\", true);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/NewNFCPage.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class NewNFCPage extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.settings.utils.SettingsFeatures\", \"isNeedShowMiuiNFC\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/NoveltyHaptic.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject NoveltyHaptic : BaseHook() {\n    override fun init() {\n        if (mPrefsMap.getBoolean(\"system_settings_international_build\")) return // 开启国际版设置界面将禁用此功能\n        loadClass(\"com.android.settings.utils.SettingsFeatures\").methodFinder().first {\n            name == \"isNoveltyHaptic\"\n        }.createHook {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/QuickManageOverlayPermission.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings\n\nimport android.app.Activity\nimport android.os.Bundle\nimport android.provider.Settings\nimport com.github.kyuubiran.ezxhelper.ObjectHelper.Companion.objectHelper\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass QuickManageOverlayPermission : BaseHook() {\n    override fun init() {\n        findAndHookMethod(\"com.android.settings.SettingsActivity\",\n            \"redirectTabletActivity\",\n            Bundle::class.java,\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    val intent = (param.thisObject as Activity).intent\n                    if (intent.action != Settings.ACTION_MANAGE_OVERLAY_PERMISSION || intent.data == null || intent.data!!.scheme != \"package\") return@before\n                    param.thisObject.objectHelper().setObjectUntilSuperclass(\n                        \"initialFragmentName\",\n                        \"com.android.settings.applications.appinfo.DrawOverlayDetails\"\n                    )\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/QuickManageUnknownAppSources.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings\n\nimport android.app.Activity\nimport android.os.Bundle\nimport android.provider.Settings\nimport com.github.kyuubiran.ezxhelper.ObjectHelper.Companion.objectHelper\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass QuickManageUnknownAppSources : BaseHook() {\n    override fun init() {\n        findAndHookMethod(\"com.android.settings.SettingsActivity\",\n            \"redirectTabletActivity\",\n            Bundle::class.java,\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    val intent = (param.thisObject as Activity).intent\n                    if (intent.action != Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES || intent.data == null || intent.data!!.scheme != \"package\") return@before\n                    param.thisObject.objectHelper().setObjectUntilSuperclass(\n                        \"initialFragmentName\",\n                        \"com.android.settings.applications.appinfo.ExternalSourcesDetails\"\n                    )\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/UnLockAreaScreenshot.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject UnLockAreaScreenshot : BaseHook() {\n    override fun init() {\n        findAndHookMethod(\n            \"com.android.settings.MiuiShortcut\\$System\", \"supportPartialScreenShot\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam?) {\n                    param?.result = true\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/UnlockTaplusForSettings.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject UnlockTaplusForSettings : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.settings.utils.SettingsFeatures\").methodFinder().first {\n            name == \"isNeedRemoveContentExtension\"\n        }.createHook {\n            returnConstant(false)\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/ViewWifiPasswordHook.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ViewWifiPasswordHook extends BaseHook {\n\n    @Override\n    public void init() {\n        int titleId = mResHook.addResource(\"system_wifipassword_btn_title\", R.string.system_settings_wifipassword_btn_title);\n        int dlgTitleId = mResHook.addResource(\"system_wifi_password_dlgtitle\", R.string.system_settings_wifi_password_dlgtitle);\n        Helpers.hookAllMethods(\"com.android.settings.wifi.SavedAccessPointPreference\", lpparam.classLoader, \"onBindViewHolder\", new MethodHook() {\n            @Override\n            @SuppressLint(\"DiscouragedApi\")\n            protected void after(MethodHookParam param) throws Throwable {\n                View view = (View) XposedHelpers.getObjectField(param.thisObject, \"mView\");\n                int btnId = view.getResources().getIdentifier(\"btn_delete\", \"id\", \"com.android.settings\");\n                Button button = view.findViewById(btnId);\n                button.setText(titleId);\n            }\n        });\n        final String[] wifiSharedKey = new String[1];\n        final String[] passwordTitle = new String[1];\n        Helpers.findAndHookMethod(\"miuix.appcompat.app.AlertDialog$Builder\", lpparam.classLoader, \"setTitle\", int.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                if (wifiSharedKey[0] != null) {\n                    param.args[0] = dlgTitleId;\n                }\n            }\n        });\n\n        Helpers.findAndHookMethod(\"miuix.appcompat.app.AlertDialog$Builder\", lpparam.classLoader, \"setMessage\", CharSequence.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                if (wifiSharedKey[0] != null) {\n                    CharSequence str = (CharSequence) param.args[0];\n                    str = str + \"\\n\" + passwordTitle[0] + \": \" + wifiSharedKey[0];\n                    param.args[0] = str;\n                }\n            }\n        });\n        Helpers.hookAllMethods(\"miuix.appcompat.app.AlertDialog\", lpparam.classLoader, \"onCreate\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                if (wifiSharedKey[0] != null) {\n                    TextView messageView = (TextView) XposedHelpers.callMethod(param.thisObject, \"getMessageView\");\n                    messageView.setTextIsSelectable(true);\n                }\n            }\n        });\n        Helpers.hookAllMethods(\"com.android.settings.wifi.MiuiSavedAccessPointsWifiSettings\", lpparam.classLoader, \"showDeleteDialog\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Object wifiEntry = param.args[0];\n                boolean canShare = (boolean) XposedHelpers.callMethod(wifiEntry, \"canShare\");\n                if (canShare) {\n                    if (passwordTitle[0] == null) {\n                        Resources modRes = Helpers.getModuleRes((Context) XposedHelpers.callMethod(param.thisObject, \"getContext\"));\n                        passwordTitle[0] = modRes.getString(R.string.system_settings_wifi_password_label);\n                    }\n                    String sharedKey = getSharedKey(param, wifiEntry);\n                    wifiSharedKey[0] = sharedKey;\n                }\n            }\n\n            @Override\n            protected void after(MethodHookParam param) {\n                Object wifiEntry = param.args[0];\n                boolean canShare = (boolean) XposedHelpers.callMethod(wifiEntry, \"canShare\");\n                if (canShare) {\n                    wifiSharedKey[0] = null;\n                }\n            }\n        });\n    }\n\n    private String getSharedKey(XC_MethodHook.MethodHookParam param, Object wifiEntry) {\n        Object mWifiManager = XposedHelpers.getObjectField(param.thisObject, \"mWifiManager\");\n        Object wifiConfiguration = XposedHelpers.callMethod(wifiEntry, \"getWifiConfiguration\");\n        Class<?> WifiDppUtilsClass = XposedHelpers.findClass(\"com.android.settings.wifi.dpp.WifiDppUtils\", lpparam.classLoader);\n        String sharedKey = (String) XposedHelpers.callStaticMethod(WifiDppUtilsClass, \"getPresharedKey\", mWifiManager, wifiConfiguration);\n        sharedKey = (String) XposedHelpers.callStaticMethod(WifiDppUtilsClass, \"removeFirstAndLastDoubleQuotes\", sharedKey);\n        return sharedKey;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/VoipAssistantController.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class VoipAssistantController extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.settings.lab.MiuiVoipAssistantController\", \"isNotSupported\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(false);\n            }\n        });\n\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/aiimage/UnlockAi.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings.aiimage;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockAi extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"isAiSupport\", Context.class, new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/aiimage/UnlockMemc.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings.aiimage;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockMemc extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"isMemcSupport\", new BaseHook.MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemsettings/aiimage/UnlockSuperResolution.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemsettings.aiimage;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class UnlockSuperResolution extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"getSrForVideoStatus\", Context.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"getSrForImageStatus\", Context.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"getS2hStatus\", Context.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"isSrForVideoSupport\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"isSrForImageSupport\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n        findAndHookMethod(\"com.android.settings.display.ScreenEnhanceEngineStatusCheck\", \"isS2hSupport\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/AutoCollapse.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class AutoCollapse extends BaseHook {\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(\"com.android.systemui.qs.tileimpl.QSTileImpl\", lpparam.classLoader, \"click\", View.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Object mState = XposedHelpers.callMethod(param.thisObject, \"getState\");\n                int state = XposedHelpers.getIntField(mState, \"state\");\n                if (state != 0) {\n                    String tileSpec = (String) XposedHelpers.callMethod(param.thisObject, \"getTileSpec\");\n                    if (!\"edit\".equals(tileSpec)) {\n                        Object mHost = XposedHelpers.getObjectField(param.thisObject, \"mHost\");\n                        XposedHelpers.callMethod(mHost, \"collapsePanels\");\n                    }\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/BatteryIndicator.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.graphics.Rect;\nimport android.view.View;\nimport android.widget.FrameLayout;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.view.BatteryIndicatorView;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BatteryIndicator extends BaseHook {\n\n    @Override\n    @SuppressLint(\"DiscouragedApi\")\n    public void init() {\n        hookAllMethods(\"com.android.systemui.statusbar.phone.StatusBar\", \"makeStatusBarView\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                FrameLayout mStatusBarWindow = (FrameLayout) XposedHelpers.getObjectField(param.thisObject, \"mPhoneStatusBarWindow\");\n                BatteryIndicatorView indicator = new BatteryIndicatorView(mContext);\n                View panel = mStatusBarWindow.findViewById(mContext.getResources().getIdentifier(\"notification_panel\", \"id\", lpparam.packageName));\n                mStatusBarWindow.addView(indicator, panel != null ? mStatusBarWindow.indexOfChild(panel) + 1 : Math.max(mStatusBarWindow.getChildCount() - 1, 2));\n                indicator.setAdjustViewBounds(false);\n                indicator.init(param.thisObject);\n                XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mBatteryIndicator\", indicator);\n                Object mNotificationIconAreaController = XposedHelpers.getObjectField(param.thisObject, \"mNotificationIconAreaController\");\n                XposedHelpers.setAdditionalInstanceField(mNotificationIconAreaController, \"mBatteryIndicator\", indicator);\n                Object mBatteryController = XposedHelpers.getObjectField(param.thisObject, \"mBatteryController\");\n                XposedHelpers.setAdditionalInstanceField(mBatteryController, \"mBatteryIndicator\", indicator);\n                XposedHelpers.callMethod(mBatteryController, \"fireBatteryLevelChanged\");\n                XposedHelpers.callMethod(mBatteryController, \"firePowerSaveChanged\");\n//                XposedHelpers.callMethod(mBatteryController, \"fireExtremePowerSaveChanged\");\n            }\n        });\n\n        findAndHookMethod(\"com.android.systemui.statusbar.phone.StatusBar\", \"setPanelExpanded\", boolean.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                boolean isKeyguardShowing = (boolean) XposedHelpers.callMethod(param.thisObject, \"isKeyguardShowing\");\n                BatteryIndicatorView indicator = (BatteryIndicatorView) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mBatteryIndicator\");\n                if (indicator != null) indicator.onExpandingChanged(!isKeyguardShowing && (boolean) param.args[0]);\n            }\n        });\n\n        findAndHookMethod(\"com.android.systemui.statusbar.phone.StatusBar\", \"setQsExpanded\", boolean.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                boolean isKeyguardShowing = (boolean) XposedHelpers.callMethod(param.thisObject, \"isKeyguardShowing\");\n                if (!isKeyguardShowing) return;\n                BatteryIndicatorView indicator = (BatteryIndicatorView) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mBatteryIndicator\");\n                if (indicator != null) indicator.onExpandingChanged((boolean) param.args[0]);\n            }\n        });\n\n        findAndHookMethod(\"com.android.systemui.statusbar.phone.StatusBar\", \"updateKeyguardState\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                boolean isKeyguardShowing = (boolean) XposedHelpers.callMethod(param.thisObject, \"isKeyguardShowing\");\n                BatteryIndicatorView indicator = (BatteryIndicatorView) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mBatteryIndicator\");\n                if (indicator != null) indicator.onKeyguardStateChanged(isKeyguardShowing);\n            }\n        });\n\n        findAndHookMethod(\"com.android.systemui.statusbar.phone.NotificationIconAreaController\", \"onDarkChanged\", Rect.class, float.class, int.class, new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                BatteryIndicatorView indicator = (BatteryIndicatorView) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mBatteryIndicator\");\n                if (indicator != null) indicator.onDarkModeChanged((float) param.args[1], (int) param.args[2]);\n            }\n        });\n\n        findAndHookMethod(\"com.android.systemui.statusbar.policy.MiuiBatteryControllerImpl\", \"fireBatteryLevelChanged\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                BatteryIndicatorView indicator = (BatteryIndicatorView) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mBatteryIndicator\");\n                int mLevel = XposedHelpers.getIntField(param.thisObject, \"mLevel\");\n                boolean mCharging = XposedHelpers.getBooleanField(param.thisObject, \"mCharging\");\n                boolean mCharged = XposedHelpers.getBooleanField(param.thisObject, \"mCharged\");\n                if (indicator != null) indicator.onBatteryLevelChanged(mLevel, mCharging, mCharged);\n            }\n        });\n\n        findAndHookMethod(\"com.android.systemui.statusbar.policy.BatteryControllerImpl\", \"firePowerSaveChanged\", new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                BatteryIndicatorView indicator = (BatteryIndicatorView) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mBatteryIndicator\");\n                if (indicator != null)\n                    indicator.onPowerSaveChanged(XposedHelpers.getBooleanField(param.thisObject, \"mPowerSave\"));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/BluetoothRestrict.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.content.Context;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class BluetoothRestrict extends BaseHook {\n\n    Class<?> mLocalBluetoothAdapter;\n\n    @Override\n    public void init() {\n        mLocalBluetoothAdapter = findClassIfExists(\"com.android.settingslib.bluetooth.LocalBluetoothAdapter\");\n\n        findAndHookMethod(mLocalBluetoothAdapter,\n            \"isSupportBluetoothRestrict\",\n            Context.class,\n            XC_MethodReplacement.returnConstant(false));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/ChargeAnimationStyle.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.util.ArraySet;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.util.Set;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ChargeAnimationStyle extends BaseHook {\n\n    Class<?> mChargeAnimCls;\n    Class<?> mWaveViewCls;\n\n    int mChargeAnimationType;\n    int mType;\n\n    @Override\n    public void init() {\n\n        mChargeAnimCls = findClassIfExists(\"com.android.keyguard.charge.ChargeUtils\");\n        mWaveViewCls = findClassIfExists(\"com.android.keyguard.charge.wave.WaveView\");\n\n        mChargeAnimationType = mPrefsMap.getStringAsInt(\"system_ui_charge_animation_style\", 0);\n\n        setChargeAnimationType(mChargeAnimationType);\n    }\n\n    public void setChargeAnimationType(int value) {\n\n        if (value == 1) {\n            findAndHookMethod(mChargeAnimCls, \"isChargeAnimationDisabled\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    param.setResult(true);\n                }\n            });\n        } else if (value == 4) {\n\n            findAndHookMethod(mChargeAnimCls, \"supportWaveChargeAnimation\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    StackTraceElement[] stackElement = new Throwable().getStackTrace();\n                    boolean mResult = false;\n                    Set<String> classTrue = new ArraySet<>(new String[]{\"com.android.keyguard.charge.ChargeUtils\",\n                        \"com.android.keyguard.charge.container.MiuiChargeContainerView\"});\n                    int i = 0;\n                    int length = stackElement.length;\n\n                    while (true) {\n                        if (i >= length) {\n                            break;\n                        } else if (!classTrue.contains(stackElement[i].getClassName())) {\n                            i++;\n                        } else {\n                            mResult = true;\n                            XposedLogUtils.logI(TAG, stackElement[i].getClassName());\n                            break;\n                        }\n                    }\n                    param.setResult(mResult);\n                }\n            });\n\n            findAndHookMethod(mWaveViewCls, \"updateWaveHeight\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedHelpers.setIntField(param.thisObject, \"mWaveXOffset\", 0);\n                }\n            });\n\n\n                /*findAndHookMethod(mChargeAnimCls,\"getChargeAnimationType\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        param.setResult(2);\n                    }\n                });\n\n                findAndHookMethod(mWaveViewCls, \"updateWaveHeight\" ,new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        XposedHelpers.setIntField(param.thisObject, \"mWaveXOffset\", 0);\n                    }\n                });*/\n        } else {\n            switch (value) {\n                case 2 -> mType = 0;\n                case 3 -> mType = 1;\n            }\n\n            findAndHookMethod(mChargeAnimCls, \"getChargeAnimationType\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    param.setResult(mType);\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/ClockCenterHook.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.os.Bundle;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ClockCenterHook extends BaseHook {\n\n    private static LinearLayout mLeftLayout = null;\n    private static LinearLayout mRightLayout = null;\n    private static LinearLayout mCenterLayout;\n    private static ViewGroup statusBar = null;\n\n    Class<?> mStatusBarView;\n\n    @Override\n    public void init() {\n\n        mStatusBarView = findClassIfExists(\"com.android.systemui.statusbar.phone.CollapsedStatusBarFragment\");\n\n        Helpers.findAndHookMethod(mStatusBarView, \"onViewCreated\", View.class, Bundle.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ViewGroup miuiPhoneStatusBarView = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, \"mStatusBar\");\n                Context context = miuiPhoneStatusBarView.getContext();\n                Resources res = miuiPhoneStatusBarView.getResources();\n\n                int statusBarId = res.getIdentifier(\"status_bar\", \"id\", \"com.android.systemui\");\n\n                int statusBarContentsId = res.getIdentifier(\"status_bar_contents\", \"id\", \"com.android.systemui\");\n                int systemIconAreaId = res.getIdentifier(\"system_icon_area\", \"id\", \"com.android.systemui\");\n                int clockId = res.getIdentifier(\"clock\", \"id\", \"com.android.systemui\");\n                int phoneStatusBarLeftContainerId =\n                    res.getIdentifier(\n                        \"phone_status_bar_left_container\",\n                        \"id\",\n                        \"com.android.systemui\"\n                    );\n\n                int fullscreenNotificationIconAreaId =\n                    res.getIdentifier(\n                        \"fullscreen_notification_icon_area\",\n                        \"id\",\n                        \"com.android.systemui\"\n                    );\n                int statusIconsId =\n                    res.getIdentifier(\n                        \"statusIcons\",\n                        \"id\",\n                        \"com.android.systemui\"\n                    );\n                int systemIconsId =\n                    res.getIdentifier(\n                        \"system_icons\",\n                        \"id\",\n                        \"com.android.systemui\"\n                    );\n                int batteryId =\n                    res.getIdentifier(\n                        \"battery\",\n                        \"id\",\n                        \"com.android.systemui\"\n                    );\n\n                statusBar = miuiPhoneStatusBarView.findViewById(statusBarId);\n                ViewGroup statusBarContents = miuiPhoneStatusBarView.findViewById(statusBarContentsId);\n\n\n                TextView clock = miuiPhoneStatusBarView.findViewById(clockId);\n                ViewGroup phoneStatusBarLeftContainer =\n                    miuiPhoneStatusBarView.findViewById(phoneStatusBarLeftContainerId);\n\n                ViewGroup fullscreenNotificationIconArea =\n                    miuiPhoneStatusBarView.findViewById(fullscreenNotificationIconAreaId);\n                ViewGroup systemIconArea =\n                    miuiPhoneStatusBarView.findViewById(systemIconAreaId);\n                ViewGroup statusIcons =\n                    miuiPhoneStatusBarView.findViewById(statusIconsId);\n                ViewGroup systemIcons =\n                    miuiPhoneStatusBarView.findViewById(systemIconsId);\n                ViewGroup battery =\n                    miuiPhoneStatusBarView.findViewById(batteryId);\n\n                ((ViewGroup) clock.getParent()).removeView(clock);\n                ((ViewGroup) phoneStatusBarLeftContainer).removeView(phoneStatusBarLeftContainer);\n\n                ((ViewGroup) systemIconArea.getParent()).removeView(systemIconArea);\n                ((ViewGroup) statusIcons.getParent()).removeView(statusIcons);\n                ((ViewGroup) systemIcons.getParent()).removeView(systemIcons);\n                ((ViewGroup) battery.getParent()).removeView(battery);\n                ((ViewGroup) fullscreenNotificationIconArea.getParent()).removeView(\n                    fullscreenNotificationIconArea\n                );\n\n                FrameLayout mConstraintLayout = new FrameLayout(context);\n\n                FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);\n\n                mConstraintLayout.setLayoutParams(layoutParams);\n                mConstraintLayout.addView(fullscreenNotificationIconArea);\n                mConstraintLayout.addView(battery);\n\n                FrameLayout.LayoutParams layoutParams2 = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.MATCH_PARENT);\n                battery.setLayoutParams(layoutParams2);\n\n                FrameLayout.LayoutParams layoutParams3 = new FrameLayout.LayoutParams(0, FrameLayout.LayoutParams.MATCH_PARENT);\n                fullscreenNotificationIconArea.setLayoutParams(layoutParams3);\n\n                fullscreenNotificationIconArea.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);\n\n                // 增加一个左对齐布局\n                mLeftLayout = new LinearLayout(context);\n                LinearLayout.LayoutParams leftLp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);\n                mLeftLayout.setLayoutParams(leftLp);\n                mLeftLayout.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);\n\n                // 增加一个居中布局\n                mCenterLayout = new LinearLayout(context);\n                LinearLayout.LayoutParams centerLp = new LinearLayout.LayoutParams(\n                    LinearLayout.LayoutParams.WRAP_CONTENT,\n                    LinearLayout.LayoutParams.MATCH_PARENT\n                );\n                mCenterLayout.setLayoutParams(centerLp);\n                mCenterLayout.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL);\n\n                // 增加一个右布局\n                mRightLayout = new LinearLayout(context);\n                LinearLayout.LayoutParams rightLp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);\n                mRightLayout.setLayoutParams(rightLp);\n                mRightLayout.setGravity(Gravity.END | Gravity.CENTER_VERTICAL);\n\n                mLeftLayout.addView(phoneStatusBarLeftContainer);\n                mLeftLayout.addView(statusIcons);\n                statusIcons.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);\n\n                mCenterLayout.addView(clock);\n\n                mRightLayout.addView(mConstraintLayout);\n                fullscreenNotificationIconArea.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);\n\n                statusBarContents.addView(mLeftLayout, 0);\n                statusBarContents.addView(mCenterLayout);\n                statusBarContents.addView(mRightLayout);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/EnableVolumeBlur.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.HookUtils\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.logW\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\nimport de.robv.android.xposed.XposedHelpers\n\nclass EnableVolumeBlur : BaseHook() {\n    override fun init() {\n        hookClassInPlugin { classLoader ->\n            try {\n                val volumeUtilClass = XposedHelpers.callMethod(\n                    classLoader,\n                    \"loadClass\",\n                    \"com.android.systemui.miui.volume.Util\"\n                ) ?: return@hookClassInPlugin\n                volumeUtilClass as Class<*>\n                val allVolumeUtilMethods = volumeUtilClass.methods\n                if (allVolumeUtilMethods.isEmpty()) {\n                    return@hookClassInPlugin\n                }\n                allVolumeUtilMethods.forEach { method ->\n                    if (method.name == \"isSupportBlurS\") {\n                        XposedBridge.hookAllMethods(\n                            volumeUtilClass,\n                            \"isSupportBlurS\",\n                            object : XC_MethodHook() {\n                                override fun afterHookedMethod(param: MethodHookParam) {\n                                    try {\n                                        if (param.result is Boolean) {\n                                            param.result = true\n                                        }\n                                    } catch (e: Throwable) {\n                                        // Do Nothings.\n                                        logW(TAG, e)\n                                    }\n                                }\n                            })\n                        return@hookClassInPlugin\n                    }\n                }\n            } catch (e: Throwable) {\n                // Do Nothings.\n                logW(TAG, e)\n            }\n        }\n    }\n\n    private fun hookClassInPlugin(afterGetClassLoader: (classLoader: ClassLoader) -> Unit) {\n        val pluginHandlerClass = findClassIfExists(\n            \"com.android.systemui.shared.plugins.PluginInstanceManager\\$PluginHandler\"\n        )\n        if (pluginHandlerClass != null) {\n            XposedBridge.hookAllMethods(pluginHandlerClass, \"handleLoadPlugin\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val componentName = param.args[0]\n                        val className =\n                            XposedHelpers.callMethod(componentName, \"getClassName\") as String\n                        if (className != \"miui.systemui.volume.VolumeDialogPlugin\") {\n                            return\n                        }\n                        try {\n                            val pluginContextWrapper =\n                                HookUtils.getValueByField(param.result ?: return, \"mPluginContext\") ?: return\n                            val classLoader = XposedHelpers.callMethod(\n                                pluginContextWrapper,\n                                \"getClassLoader\"\n                            ) as ClassLoader\n                            afterGetClassLoader(classLoader)\n                        } catch (e: Throwable) {\n                            // Do Nothings.\n                            logW(\"$TAG => hookClassInPlugin\", e)\n                        }\n                    }\n                })\n            return\n        }\n\n        val pluginActionManagerClass = findClassIfExists(\n            \"com.android.systemui.shared.plugins.PluginActionManager\"\n        )\n        if (pluginActionManagerClass != null) {\n            XposedBridge.hookAllMethods(pluginActionManagerClass, \"loadPluginComponent\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val componentName = param.args[0]\n                        val className =\n                            XposedHelpers.callMethod(componentName, \"getClassName\") as String\n                        if (className != \"miui.systemui.volume.VolumeDialogPlugin\") {\n                            return\n                        }\n                        try {\n                            val pluginContextWrapper =\n                                HookUtils.getValueByField(param.result ?: return, \"mPluginContext\")\n                                    ?: return\n                            val classLoader = XposedHelpers.callMethod(\n                                pluginContextWrapper,\n                                \"getClassLoader\"\n                            ) as ClassLoader\n                            afterGetClassLoader(classLoader)\n                        } catch (e: Throwable) {\n                            // Do Nothings.\n                            logW(TAG, e)\n                        }\n                    }\n                })\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/HideNavigationBar.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidU;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.database.ContentObserver;\nimport android.os.Handler;\nimport android.provider.Settings;\nimport android.widget.Toast;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.util.Locale;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class HideNavigationBar extends BaseHook {\n    boolean run = false;\n\n    @Override\n    public void init() {\n        /*启用隐藏*/\n        if (isAndroidU()) {\n            hookAllConstructors(\"com.android.systemui.statusbar.phone.NavigationModeControllerExt\", new MethodHook() {\n                @SuppressLint(\"PrivateApi\")\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    super.after(param);\n                    XposedHelpers.setStaticBooleanField(param.getClass().getClassLoader().loadClass(\"com.android.systemui.statusbar.phone.NavigationModeControllerExt\"), \"mHideGestureLine\", true);\n                }\n            });\n        } else {\n            findAndHookMethod(\"com.android.systemui.statusbar.phone.NavigationModeControllerExt\",\n                \"hideNavigationBar\",\n                new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        param.setResult(true);\n                    }\n                }\n            );\n        }\n\n        /*不隐藏时创建手势条*/\n        hookAllMethods(\"com.android.systemui.navigationbar.NavigationBarController\",\n            \"createNavigationBar\",\n            new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    if (param.args.length >= 3) {\n                        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                        ContentObserver(mContext);\n                        try {\n                            int End = Settings.Global.getInt(mContext.getContentResolver(), \"hide_gesture_line\");\n                            if (End == 1) {\n                                Settings.Global.putInt(mContext.getContentResolver(), \"hide_gesture_line\", 0);\n                                XposedLogUtils.logI(\"Settings The hide_gesture_line To 0\");\n                            }\n                        } catch (Settings.SettingNotFoundException e) {\n                            XposedLogUtils.logI(\"Don‘t Have hide_gesture_line\");\n                        }\n                        param.setResult(null);\n                    }\n                }\n            }\n        );\n\n        /*状态更改设置*/\n        findAndHookMethod(\"com.android.systemui.statusbar.phone.MiuiDockIndicatorService\",\n            \"onNavigationModeChanged\", int.class,\n            new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    XposedHelpers.setObjectField(param.thisObject, \"mNavMode\", param.args[0]);\n                    if (XposedHelpers.getObjectField(param.thisObject, \"mNavigationBarView\") != null) {\n                        XposedHelpers.callMethod(param.thisObject, \"setNavigationBarView\", (Object) null);\n                    } else {\n                        XposedHelpers.callMethod(param.thisObject, \"checkAndApplyNavigationMode\");\n                    }\n                    param.setResult(null);\n                }\n            }\n        );\n    }\n\n    /*防呆专用*/\n    public void ContentObserver(Context context) {\n        if (!run) {\n            run = true;\n            ContentObserver contentObserver = new ContentObserver(new Handler(context.getMainLooper())) {\n                @Override\n                public void onChange(boolean z) {\n                    boolean language = false;\n                    Locale locale = Locale.getDefault();\n                    String languageCode = locale.getLanguage();\n                    if (languageCode.equals(\"zh\")) language = true;\n                    Settings.Global.putInt(context.getContentResolver(), \"force_fsg_nav_bar\", 1);\n                    Toast.makeText(context, language ? \"请勿切换经典导航键\" : \"Don't switch navigation keys\", Toast.LENGTH_SHORT).show();\n                    XposedLogUtils.logI(\"Please don't switch classic navigation keys\");\n                }\n            };\n            context.getContentResolver().registerContentObserver(Settings.Global.getUriFor(\"force_fsg_nav_bar\"), false, contentObserver);\n        }\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/MiuiGxzwSize.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class MiuiGxzwSize extends BaseHook {\n\n    @Override\n    public void init() {\n\n        Class<?> mMiuiGxzwUtils = findClassIfExists(\"com.android.keyguard.fod.MiuiGxzwUtils\");\n\n        /*hookAllMethods(mMiuiGxzwUtils,\"caculateGxzwIconSize\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                XposedHelpers.setStaticIntField(mMiuiGxzwUtils,\"GXZW_ANIM_HEIGHT\", 1028);\n                XposedHelpers.setStaticIntField(mMiuiGxzwUtils,\"GXZW_ANIM_WIDTH\", 1028);\n            }\n        });*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/MonetThemeOverlay.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.content.Context;\nimport android.os.Handler;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class MonetThemeOverlay extends BaseHook {\n\n    Class<?> THEME_CLASS_AOSP;\n    Context mContext;\n    Handler mHandler;\n\n    @Override\n    public void init() {\n        THEME_CLASS_AOSP = findClassIfExists(\"com.android.systemui.theme.ThemeOverlayController\");\n\n        hookAllConstructors(THEME_CLASS_AOSP, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                mContext = (Context) param.args[0];\n                /*mHandler = (Handler) param.args[2];*/\n            }\n        });\n\n        hookAllMethods(THEME_CLASS_AOSP, \"getOverlay\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                mHandler = new Handler(mContext.getMainLooper());\n                new PrefsUtils.SharedPrefsObserver(mContext, mHandler, \"prefs_key_system_ui_monet_overlay_custom_color\", -1) {\n                    @Override\n                    public void onChange(String name, int defValue) {\n                        mPrefsMap.put(name, PrefsUtils.getSharedIntPrefs(mContext, name, defValue));\n                        XposedLogUtils.logI(TAG, name + \"： \" + PrefsUtils.getSharedIntPrefs(mContext, name, defValue));\n                    }\n                };\n\n                param.args[0] = mPrefsMap.getInt(\"system_ui_monet_overlay_custom_color\", -1);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/NotificationFix.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class NotificationFix extends BaseHook {\n    @Override\n    public void init() {\n        XposedHelpers.setStaticBooleanField(XposedHelpers.findClass(\"com.android.systemui.statusbar.notification.NotificationSettingsManager\", lpparam.classLoader), \"USE_WHITE_LISTS\", false);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/NotificationFreeform.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidU;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class NotificationFreeform extends BaseHook {\n    @Override\n    public void init() {\n        if (isAndroidU()) {\n            findAndHookMethod(findClassIfExists(\"com.android.systemui.statusbar.notification.row.MiuiExpandableNotificationRow\"), \"updateMiniWindowBar\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    super.after(param);\n                    XposedHelpers.setObjectField(param.thisObject, \"mCanSlide\", true);\n                }\n            });\n        } else {\n            findAndHookMethod(findClassIfExists(\"com.android.systemui.statusbar.notification.NotificationSettingsManager\"), \"canSlide\", String.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    param.setResult(true);\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/NotificationVolumeSeparateSlider.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.Helpers.hookAllMethods;\nimport static de.robv.android.xposed.XposedHelpers.findClassIfExists;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.utils.Helpers.MethodHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class NotificationVolumeSeparateSlider {\n    public static void initHideDeviceControlEntry(ClassLoader pluginLoader) {\n        int notifVolumeOnResId;\n        int notifVolumeOffResId;\n\n        Class<?> mMiuiVolumeDialogImpl = findClassIfExists(\"com.android.systemui.miui.volume.MiuiVolumeDialogImpl\", pluginLoader);\n\n        notifVolumeOnResId = XposedInit.mResHook.addResource(\"ic_miui_volume_notification\", R.drawable.ic_miui_volume_notification);\n        notifVolumeOffResId = XposedInit.mResHook.addResource(\"ic_miui_volume_notification_mute\", R.drawable.ic_miui_volume_notification_mute);\n\n        XposedInit.mResHook.setResReplacement(\"miui.systemui.plugin\", \"dimen\", \"miui_volume_content_width_expanded\", R.dimen.miui_volume_content_width_expanded);\n        XposedInit.mResHook.setResReplacement(\"miui.systemui.plugin\", \"dimen\", \"miui_volume_ringer_layout_width_expanded\", R.dimen.miui_volume_ringer_layout_width_expanded);\n        XposedInit.mResHook.setResReplacement(\"miui.systemui.plugin\", \"dimen\", \"miui_volume_column_width_expanded\", R.dimen.miui_volume_column_width_expanded);\n        XposedInit.mResHook.setResReplacement(\"miui.systemui.plugin\", \"dimen\", \"miui_volume_column_margin_horizontal_expanded\", R.dimen.miui_volume_column_margin_horizontal_expanded);\n\n        hookAllMethods(mMiuiVolumeDialogImpl, \"addColumn\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                if (param.args.length != 4) return;\n                int streamType = (int) param.args[0];\n                if (streamType == 4) {\n                    XposedHelpers.callMethod(param.thisObject, \"addColumn\", 5, notifVolumeOnResId, notifVolumeOffResId, true, false);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/OriginChargeAnimation.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\npublic class OriginChargeAnimation extends BaseHook {\n\n    Class<?> mOriginChargeAnimCls;\n\n    @Override\n    public void init() {\n\n        mOriginChargeAnimCls = findClassIfExists(\"com.android.systemui.statusbar.FeatureFlags\");\n\n        findAndHookMethod(mOriginChargeAnimCls, \"isChargingRippleEnabled\", new Helpers.MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                param.setResult(true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/QSDetailBackGround.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.content.pm.ApplicationInfo;\nimport android.graphics.Paint;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class QSDetailBackGround extends BaseHook {\n\n    private ClassLoader mPluginLoader = null;\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.systemui.shared.plugins.PluginManagerImpl\", \"getClassLoader\", ApplicationInfo.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ApplicationInfo appInfo = (ApplicationInfo) param.args[0];\n                if (\"miui.systemui.plugin\".equals(appInfo.packageName)) {\n                    if (mPluginLoader == null) {\n                        mPluginLoader = (ClassLoader) param.getResult();\n                    }\n\n                    Helpers.hookAllMethods(\"miui.systemui.widget.SmoothRoundDrawable\", mPluginLoader, \"inflate\", new MethodHook() {\n                        @Override\n                        protected void after(MethodHookParam param) throws Throwable {\n                            Paint mPaint = (Paint) XposedHelpers.getObjectField(param.thisObject, \"mPaint\");\n                            mPaint.setAlpha(mPrefsMap.getInt(\"system_control_center_qs_detail_bg\", 0));\n                        }\n                    });\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/QSLabelsHook.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.content.pm.ApplicationInfo;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class QSLabelsHook extends BaseHook {\n\n    final boolean[] isHooked = {false};\n    private static ClassLoader pluginLoader = null;\n\n    Class<?> mQSController;\n\n    @Override\n    public void init() {\n\n        findAndHookMethod(\"com.android.systemui.shared.plugins.PluginManagerImpl\", \"getClassLoader\", ApplicationInfo.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ApplicationInfo appInfo = (ApplicationInfo) param.args[0];\n\n                if (\"miui.systemui.plugin\".equals(appInfo.packageName) && !isHooked[0]) {\n                    isHooked[0] = true;\n                    if (pluginLoader == null) {\n                        pluginLoader = (ClassLoader) param.getResult();\n                    }\n\n                    mQSController = XposedHelpers.findClassIfExists(\"miui.systemui.controlcenter.qs.tileview.StandardTileView\", pluginLoader);\n\n                    hookAllMethods(mQSController, \"init\", new MethodHook() {\n                        @Override\n                        protected void before(MethodHookParam param) throws Throwable {\n                            if (param.args.length != 1) return;\n                            View mLabelContainer = (View) XposedHelpers.getObjectField(param.thisObject, \"labelContainer\");\n                            if (mLabelContainer != null) {\n                                mLabelContainer.setVisibility(\n                                    mPrefsMap.getBoolean(\"system_ui_qs_label\") ? View.GONE : View.VISIBLE\n                                );\n                            }\n                        }\n                    });\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/ShouldPlayUnmuteSoundHook.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ShouldPlayUnmuteSoundHook extends BaseHook {\n\n    Class<?> mQuietModeTile = XposedHelpers.findClassIfExists(\"com.android.systemui.qs.tiles.QuietModeTile\", lpparam.classLoader);\n    Class<?> mZenModeController = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.policy.ZenModeController\", lpparam.classLoader);\n\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(mQuietModeTile, \"handleClick\", View.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                XposedHelpers.setBooleanField(mZenModeController, \"isZenModeOn\", true);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/StatusBarActions.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.annotation.SuppressLint;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.media.AudioManager;\nimport android.os.Binder;\nimport android.os.Build;\nimport android.os.Handler;\nimport android.os.Process;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class StatusBarActions extends BaseHook {\n\n    Class<?> mStatusBarClass;\n    public static Object mStatusBar = null;\n\n    @Override\n    public void init() {\n\n        if (isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU)) {\n            mStatusBarClass = findClassIfExists(\"com.android.systemui.statusbar.phone.CentralSurfacesImpl\");\n        } else {\n            mStatusBarClass = findClassIfExists(\"com.android.systemui.statusbar.phone.StatusBar\");\n        }\n\n        setupStatusBarAction();\n        setupRestartSystemUIAction();\n    }\n\n    // StatusBarActions\n    public void setupStatusBarAction() {\n\n        findAndHookMethod(mStatusBarClass, \"start\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                mStatusBar = param.thisObject;\n                Context mStatusBarContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                IntentFilter intentfilter = new IntentFilter();\n\n                intentfilter.addAction(ACTION_PREFIX + \"OpenNotificationCenter\");\n                intentfilter.addAction(ACTION_PREFIX + \"ExpandSettings\");\n                intentfilter.addAction(ACTION_PREFIX + \"OpenRecents\");\n                intentfilter.addAction(ACTION_PREFIX + \"OpenVolumeDialog\");\n\n                intentfilter.addAction(ACTION_PREFIX + \"ToggleGPS\");\n                intentfilter.addAction(ACTION_PREFIX + \"ToggleHotspot\");\n                intentfilter.addAction(ACTION_PREFIX + \"ToggleFlashlight\");\n                intentfilter.addAction(ACTION_PREFIX + \"ShowQuickRecents\");\n                intentfilter.addAction(ACTION_PREFIX + \"HideQuickRecents\");\n\n                intentfilter.addAction(ACTION_PREFIX + \"ClearMemory\");\n                intentfilter.addAction(ACTION_PREFIX + \"CollectXposedLog\");\n                intentfilter.addAction(ACTION_PREFIX + \"RestartLauncher\");\n                intentfilter.addAction(ACTION_PREFIX + \"CopyToExternal\");\n\n                mStatusBarContext.registerReceiver(mStatusBarReceiver, intentfilter);\n            }\n        });\n    }\n\n\n    private static final BroadcastReceiver mStatusBarReceiver = new BroadcastReceiver() {\n        @SuppressLint(\"WrongConstant\")\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            String action = intent.getAction();\n            if (action == null) return;\n\n            switch (action) {\n                case ACTION_PREFIX + \"ClearMemory\" -> {\n                    Intent clearIntent = new Intent(\"com.android.systemui.taskmanager.Clear\");\n                    clearIntent.putExtra(\"show_toast\", true);\n                    // clearIntent.putExtra(\"clean_type\", -1);\n                    context.sendBroadcast(clearIntent);\n                }\n                case ACTION_PREFIX + \"OpenRecents\" -> {\n                    Intent recentIntent = new Intent(\"SYSTEM_ACTION_RECENTS\");\n                    recentIntent.setPackage(\"com.android.systemui\");\n                    context.sendBroadcast(recentIntent);\n                }\n\n                case ACTION_PREFIX + \"OpenVolumeDialog\" -> OpenVolumeDialogs(context);\n\n                case ACTION_PREFIX + \"OpenNotificationCenter\" -> {\n                    try {\n                        Object mNotificationPanel = XposedHelpers.getObjectField(mStatusBar, \"mNotificationPanel\");\n                        boolean mPanelExpanded = (boolean) XposedHelpers.getObjectField(mNotificationPanel, \"mPanelExpanded\");\n                        boolean mQsExpanded = (boolean) XposedHelpers.getObjectField(mNotificationPanel, \"mQsExpanded\");\n                        boolean expandOnly = intent.getBooleanExtra(\"expand_only\", false);\n                        if (mPanelExpanded) {\n                            if (!expandOnly) {\n                                if (mQsExpanded) {\n                                    XposedHelpers.callMethod(mStatusBar, \"closeQs\");\n                                } else {\n                                    XposedHelpers.callMethod(mStatusBar, \"animateCollapsePanels\");\n                                }\n                            }\n                        } else {\n                            XposedHelpers.callMethod(mStatusBar, \"animateExpandNotificationsPanel\");\n                        }\n                    } catch (Throwable t) {\n                        // Expand only\n                        long token = Binder.clearCallingIdentity();\n                        XposedHelpers.callMethod(context.getSystemService(\"statusbar\"), \"expandNotificationsPanel\");\n                        Binder.restoreCallingIdentity(token);\n                    }\n                }\n            }\n        }\n    };\n\n    public static void OpenVolumeDialogs(Context context) {\n        try {\n            Object mVolumeComponent = XposedHelpers.getObjectField(mStatusBar, \"mVolumeComponent\");\n            Object mVolumeDialogPlugin = XposedHelpers.getObjectField(mVolumeComponent, \"mDialog\");\n            Object miuiVolumeDialog = XposedHelpers.getObjectField(mVolumeDialogPlugin, \"mVolumeDialogImpl\");\n            if (miuiVolumeDialog == null) {\n                XposedLogUtils.logI(\"OpenVolumeDialog\", \"MIUI volume dialog is NULL!\");\n                return;\n            }\n\n            Handler mHandler = (Handler) XposedHelpers.getObjectField(miuiVolumeDialog, \"mHandler\");\n            mHandler.post(() -> {\n                boolean mShowing = XposedHelpers.getBooleanField(miuiVolumeDialog, \"mShowing\");\n                boolean mExpanded = XposedHelpers.getBooleanField(miuiVolumeDialog, \"mExpanded\");\n\n                AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);\n                boolean isInCall = am.getMode() == AudioManager.MODE_IN_CALL || am.getMode() == AudioManager.MODE_IN_COMMUNICATION;\n                if (mShowing) {\n                    if (mExpanded || isInCall)\n                        XposedHelpers.callMethod(miuiVolumeDialog, \"dismissH\", 1);\n                    else {\n                        Object mDialogView = XposedHelpers.getObjectField(miuiVolumeDialog, \"mDialogView\");\n                        View mExpandButton = (View) XposedHelpers.getObjectField(mDialogView, \"mExpandButton\");\n                        View.OnClickListener mClickExpand = (View.OnClickListener) XposedHelpers.getObjectField(mDialogView, \"expandListener\");\n                        mClickExpand.onClick(mExpandButton);\n                    }\n                } else {\n                    Object mController = XposedHelpers.getObjectField(mVolumeDialogPlugin, \"mController\");\n                    if (isInCall) {\n                        XposedHelpers.callMethod(mController, \"setActiveStream\", 0);\n                        XposedHelpers.setBooleanField(miuiVolumeDialog, \"mNeedReInit\", true);\n                    } else if (am.isMusicActive()) {\n                        XposedHelpers.callMethod(mController, \"setActiveStream\", 3);\n                        XposedHelpers.setBooleanField(miuiVolumeDialog, \"mNeedReInit\", true);\n                    }\n                    XposedHelpers.callMethod(miuiVolumeDialog, \"showH\", 1);\n                }\n            });\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n    }\n\n    public void setupRestartSystemUIAction() {\n        if (mStatusBarClass == null) return;\n        findAndHookMethod(mStatusBarClass, \"start\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                mStatusBar = param.thisObject;\n                Context mStatusBarContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                IntentFilter intentfilter = new IntentFilter();\n\n                intentfilter.addAction(ACTION_PREFIX + \"RestartSystemUI\");\n                mStatusBarContext.registerReceiver(mRestartSystemUIReceiver, intentfilter);\n            }\n        });\n    }\n\n    private final BroadcastReceiver mRestartSystemUIReceiver = new BroadcastReceiver() {\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            String action = intent.getAction();\n            if (action == null) return;\n            if (action.equals(ACTION_PREFIX + \"RestartSystemUI\")) {\n                Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);\n            }\n        }\n    };\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/SwitchControlPanel.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogI;\n\nimport android.view.MotionEvent;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SwitchControlPanel extends BaseHook {\n\n    Class<?> mControlPanelWindowManager;\n\n    @Override\n    public void init() {\n\n        mControlPanelWindowManager = findClassIfExists(\"com.android.systemui.controlcenter.phone.ControlPanelWindowManager\");\n\n        findAndHookMethod(mControlPanelWindowManager, \"dispatchToControlPanel\", MotionEvent.class, float.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                float f = (float) param.args[1];\n                XposedHelpers.setFloatField(param.thisObject, \"mDownX\", f);\n                float mDownX = XposedHelpers.getFloatField(param.thisObject, \"mDownX\");\n                int i = (Float.compare(mDownX, f / 2.0f));\n                LogI(TAG, \"mDownX：\" + mDownX + \"in before\");\n                LogI(TAG, \"f：\" + f + \"in before\");\n                LogI(TAG, \"：\" + i + \"in before\");\n                i *= -1;\n                int i2 = i;\n                LogI(TAG, \"：\" + i2 + \"in before\");\n            }\n\n            @Override\n            protected void after(MethodHookParam param) {\n                float mDownX = XposedHelpers.getFloatField(param.thisObject, \"mDownX\");\n                float f = (float) param.args[1];\n                int i = (Float.compare(mDownX, f / 2.0f));\n                LogI(TAG, \"mDownX：\" + mDownX + \"in after\");\n                LogI(TAG, \"f：\" + f + \"in after\");\n                LogI(TAG, \"：\" + i + \"in after\");\n                i *= -1;\n                int i2 = i;\n                LogI(TAG, \"：\" + i2 + \"in after\");\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/UseNativeRecents.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\n\npublic class UseNativeRecents {\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/VolumeTimerValuesHook.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class VolumeTimerValuesHook extends BaseHook {\n\n    private static ClassLoader pluginLoader = null;\n\n    @Override\n    public void init() {\n        /*VolumeTimerValuesRes();*/\n\n        final boolean[] isHooked = {false};\n        Helpers.findAndHookMethod(\"com.android.systemui.shared.plugins.PluginManagerImpl\", lpparam.classLoader, \"getClassLoader\", ApplicationInfo.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ApplicationInfo appInfo = (ApplicationInfo) param.args[0];\n                if (\"miui.systemui.plugin\".equals(appInfo.packageName) && !isHooked[0]) {\n                    isHooked[0] = true;\n                    if (pluginLoader == null) {\n                        pluginLoader = (ClassLoader) param.getResult();\n                    }\n\n                    Helpers.findAndHookMethod(\"com.android.systemui.miui.volume.MiuiVolumeTimerDrawableHelper\", pluginLoader, \"initTimerString\", new MethodHook() {\n                        @Override\n                        protected void after(MethodHookParam param) throws Throwable {\n                            Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                            String[] mTimeSegmentTitle = new String[11];\n                            int timerOffId = mContext.getResources().getIdentifier(\"timer_off\", \"string\", \"miui.systemui.plugin\");\n                            int minuteId = mContext.getResources().getIdentifier(\"timer_30_minutes\", \"string\", \"miui.systemui.plugin\");\n                            int hourId = mContext.getResources().getIdentifier(\"timer_1_hour\", \"string\", \"miui.systemui.plugin\");\n                            mTimeSegmentTitle[0] = mContext.getResources().getString(timerOffId);\n                            mTimeSegmentTitle[1] = mContext.getResources().getString(minuteId, 30);\n                            mTimeSegmentTitle[2] = mContext.getResources().getString(hourId, 1);\n                            mTimeSegmentTitle[3] = mContext.getResources().getString(hourId, 2);\n                            mTimeSegmentTitle[4] = mContext.getResources().getString(hourId, 3);\n                            mTimeSegmentTitle[5] = mContext.getResources().getString(hourId, 4);\n                            mTimeSegmentTitle[6] = mContext.getResources().getString(hourId, 5);\n                            mTimeSegmentTitle[7] = mContext.getResources().getString(hourId, 6);\n                            mTimeSegmentTitle[8] = mContext.getResources().getString(hourId, 8);\n                            mTimeSegmentTitle[9] = mContext.getResources().getString(hourId, 10);\n                            mTimeSegmentTitle[10] = mContext.getResources().getString(hourId, 12);\n                            XposedHelpers.setObjectField(param.thisObject, \"mTimeSegmentTitle\", mTimeSegmentTitle);\n                        }\n                    });\n                    Helpers.findAndHookMethod(\"com.android.systemui.miui.volume.TimerItem\", pluginLoader, \"getTimePos\", int.class, new MethodHook() {\n                        @Override\n                        protected void before(MethodHookParam param) throws Throwable {\n                            Object timer = XposedHelpers.getObjectField(param.thisObject, \"mTimerTime\");\n                            float halfTimerWidth = ((int) XposedHelpers.callMethod(timer, \"getWidth\")) / 2.0f;\n                            Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                            float seekWidth = mContext.getResources().getDimension(mContext.getResources().getIdentifier(\"miui_volume_timer_seelbar_width\", \"dimen\", \"miui.systemui.plugin\"));\n                            int marginLeft = mContext.getResources().getDimensionPixelSize(mContext.getResources().getIdentifier(\"miui_volume_timer_seekbar_margin_left\", \"dimen\", \"miui.systemui.plugin\"));\n                            int seg = (int) XposedHelpers.getObjectField(param.thisObject, \"mDeterminedSegment\");\n                            param.setResult(seekWidth / 10 * seg + marginLeft - halfTimerWidth);\n                        }\n                    });\n                }\n            }\n        });\n\n    }\n\n    /*public static void VolumeTimerValuesRes() {\n        XposedInit.mResourcesHook.setResReplacement(\"miui.systemui.plugin\", \"array\", \"miui_volume_timer_segments\", R.array.miui_volume_timer_segments);\n    }*/\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/AddBlurEffectToNotificationView.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.GradientDrawable\nimport android.view.View\nimport android.view.ViewGroup\nimport com.github.kyuubiran.ezxhelper.EzXHelper.appContext\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.HookUtils\nimport com.sevtinge.cemiuiler.utils.callStaticMethod\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidS\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidT\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\nimport com.sevtinge.cemiuiler.utils.devicesdk.isMoreAndroidVersion\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.hookAfterMethod\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.replaceMethod\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\nimport de.robv.android.xposed.XposedHelpers\n\nobject AddBlurEffectToNotificationView : BaseHook() {\n    var blurBackgroundAlpha: Int =\n        mPrefsMap.getInt(\"system_ui_control_center_blur_background_alpha\", 100)\n    var cornerRadius: Int = mPrefsMap.getInt(\"system_ui_control_center_corner_radius\", 48)\n    var blurRadius: Int = mPrefsMap.getInt(\"system_ui_control_center_blur_radius\", 99)\n    var defaultBackgroundAlpha: Int =\n        mPrefsMap.getInt(\"system_ui_control_center_default_background_alpha\", 200)\n    val fixNotification by lazy {\n        mPrefsMap.getBoolean(\"n_enable_fix\")\n    }\n\n    fun setDrawableAlpha(thiz: Any?, alpha: Int) {\n        if (isAndroidU()) {\n            XposedHelpers.setObjectField(thiz, \"mDrawableAlpha\", alpha)\n        } else {\n            XposedHelpers.callMethod(\n                thiz,\n                \"setDrawableAlpha\",\n                arrayOf<Class<*>>(Integer.TYPE),\n                alpha\n            )\n        }\n    }\n\n    override fun init() {\n        val miuiExpandableNotificationRowClass =\n            findClassIfExists(\"com.android.systemui.statusbar.notification.row.MiuiExpandableNotificationRow\")\n                ?: return\n\n        val notificationBackgroundViewClass =\n            findClassIfExists(\"com.android.systemui.statusbar.notification.row.NotificationBackgroundView\")\n                ?: return\n\n        val appMiniWindowRowTouchHelperClass =\n            findClassIfExists(\"com.android.systemui.statusbar.notification.policy.AppMiniWindowRowTouchHelper\")\n                ?: return\n\n        val miuiNotificationPanelViewControllerClass =\n            findClassIfExists(\n                if (isAndroidU())\n                    \"com.android.systemui.shade.MiuiNotificationPanelViewController\"\n                else\n                    \"com.android.systemui.statusbar.phone.MiuiNotificationPanelViewController\"\n            ) ?: return\n\n        val notificationStackScrollLayoutClass =\n            findClassIfExists(\"com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout\")\n                ?: return\n\n        val lockScreenMagazineControllerClass =\n            findClassIfExists(\"com.android.keyguard.magazine.LockScreenMagazineController\")\n                ?: return\n\n        val blurRatioChangedListener =\n            findClassIfExists(\n                if (isAndroidU())\n                    \"com.android.systemui.shade.MiuiNotificationPanelViewController\\$mBlurRatioChangedListener\\$1\"\n                else\n                    \"com.android.systemui.statusbar.phone.MiuiNotificationPanelViewController\\$mBlurRatioChangedListener\\$1\"\n            ) ?: return\n\n        // 通知模糊额外修正项，增加一个开关避免使用过程中暴毙\n        if (isAndroidT() && fixNotification) {\n            val mediaDataFilterClass =\n                findClassIfExists(\"com.android.systemui.media.MediaDataFilter\") ?: return\n\n            val expandableNotificationRowClass =\n                findClassIfExists(\"com.android.systemui.statusbar.notification.row.ExpandableNotificationRow\")\n                    ?: return\n\n            // 增加一个锁屏页面判断\n            var onKeyguard = false\n\n            expandableNotificationRowClass.hookAfterMethod(\"isOnKeyguard\") {\n                onKeyguard = it.result as Boolean\n            }\n\n            // 增加一个控制中心音乐播放器判断\n            var hasActiveMediaOrRecommendation = false\n\n            mediaDataFilterClass.hookAfterMethod(\"hasActiveMediaOrRecommendation\") {\n                hasActiveMediaOrRecommendation = it.result as Boolean\n            }\n\n\n            // 换个方式修改通知上划极限值\n            try {\n                \"com.android.systemui.statusbar.notification.stack.AmbientState\".replaceMethod(\"getOverExpansion\") {\n                    val getScreenHeight =\n                        findClass(\"com.android.systemui.fsgesture.AppQuickSwitchActivity\")\n                            .callStaticMethod(\"getScreenHeight\", appContext) as Int\n                    val mOverExpansion = it.thisObject.getObjectField(\"mOverExpansion\") as Float\n                    val isNCSwitching = it.thisObject.getObjectField(\"isNCSwitching\") as Boolean\n                    val isSwipingUp = it.thisObject.getObjectField(\"mIsSwipingUp\") as Boolean\n                    val isFlinging = it.thisObject.getObjectField(\"mIsFlinging\") as Boolean\n                    val isAppearing = it.thisObject.getObjectField(\"mAppearing\") as Boolean\n                    val isScreenLandscape =\n                        findClass(\"com.android.systemui.statusbar.notification.NotificationUtil\")\n                            .callStaticMethod(\"isScreenLandscape\") as Boolean\n\n                    if (isAppearing && (isSwipingUp || isFlinging) && !isNCSwitching) {\n                        if (hasActiveMediaOrRecommendation) {\n                            if (isScreenLandscape)\n                                return@replaceMethod -getScreenHeight.toFloat()\n                            else\n                                return@replaceMethod -getScreenHeight.toFloat() * 6.0f\n                        } else {\n                            if (isScreenLandscape)\n                                return@replaceMethod -getScreenHeight.toFloat() / 3.0f\n                            else\n                                return@replaceMethod -getScreenHeight.toFloat() / 1.2f\n                        }\n                    } else {\n                        return@replaceMethod mOverExpansion\n                    }\n                }\n            } catch (t: Throwable) {\n                XposedLogUtils.logE(TAG, t)\n            }\n\n            try {\n                \"com.android.systemui.statusbar.notification.stack.AmbientState\".replaceMethod(\"getAppearFraction\") {\n                    val isNCSwitching = it.thisObject.getObjectField(\"isNCSwitching\") as Boolean\n                    val isSwipingUp = it.thisObject.getObjectField(\"mIsSwipingUp\") as Boolean\n                    val isFlinging = it.thisObject.getObjectField(\"mIsFlinging\") as Boolean\n                    val mAppearFraction = it.thisObject.getObjectField(\"mAppearFraction\") as Float\n                    val isAppearing = it.thisObject.getObjectField(\"mAppearing\") as Boolean\n                    val isScreenLandscape =\n                        findClass(\"com.android.systemui.statusbar.notification.NotificationUtil\")\n                            .callStaticMethod(\"isScreenLandscape\") as Boolean\n\n                    if (isAppearing && (isSwipingUp || isFlinging) && !isNCSwitching && hasActiveMediaOrRecommendation && isScreenLandscape) {\n                        return@replaceMethod mAppearFraction * 6.0f\n                    } else {\n                        return@replaceMethod mAppearFraction\n                    }\n                }\n            } catch (t: Throwable) {\n                XposedLogUtils.logE(TAG, t)\n            }\n        }\n\n        // 每次设置背景的时候都同时改透明度\n        XposedBridge.hookAllMethods(\n            notificationBackgroundViewClass,\n            \"setCustomBackground\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val notificationBackgroundView = param.thisObject\n                    val mDrawableAlphaField =\n                        notificationBackgroundViewClass.getDeclaredField(\"mDrawableAlpha\")\n                    mDrawableAlphaField.isAccessible = true\n                    val isHandsUp =\n                        XposedHelpers.callMethod(notificationBackgroundView, \"headsUp\") as Boolean\n                    if (isHandsUp) {\n                        mDrawableAlphaField.set(notificationBackgroundView, blurBackgroundAlpha)\n                        setDrawableAlpha(\n                            notificationBackgroundView,\n                            blurBackgroundAlpha\n                        )\n                    } else {\n                        mDrawableAlphaField.set(notificationBackgroundView, defaultBackgroundAlpha)\n                        setDrawableAlpha(\n                            notificationBackgroundView,\n                            defaultBackgroundAlpha\n                        )\n                    }\n                }\n            })\n\n        // 背景bounds改动同步到模糊\n        XposedBridge.hookAllMethods(\n            notificationBackgroundViewClass,\n            \"draw\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val notificationBackground = param.thisObject as View\n                    val backgroundDrawable = notificationBackground.background ?: return\n\n                    // 适配游戏模式及横屏全屏视频半透明通知(可以做个开关)\n                    if (isTransparentAble() && fixNotification) {\n                        XposedHelpers.callMethod(\n                            notificationBackground.background,\n                            \"setVisible\",\n                            false, false\n                        )\n                    } else {\n                        XposedHelpers.callMethod(\n                            notificationBackground.background,\n                            \"setVisible\",\n                            true, false\n                        )\n                    }\n\n                    if (HookUtils.isBlurDrawable(backgroundDrawable)) {\n                        val drawable = param.args[1] as Drawable\n                        backgroundDrawable.bounds = drawable.bounds\n                    }\n                }\n            })\n\n        // 进入小窗模式的时候把模糊去掉\n        XposedBridge.hookAllMethods(\n            appMiniWindowRowTouchHelperClass,\n            \"onMiniWindowTrackingStart\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    val mPickedMiniWindowChild =\n                        HookUtils.getValueByField(param.thisObject, \"mPickedMiniWindowChild\")\n                            ?: return\n\n                    val mBackgroundNormal =\n                        HookUtils.getValueByField(mPickedMiniWindowChild, \"mBackgroundNormal\")\n                            ?: return\n                    mBackgroundNormal as View\n\n                    if (HookUtils.isBlurDrawable(mBackgroundNormal.background)) {\n                        XposedHelpers.callMethod(\n                            mBackgroundNormal.background, \"setVisible\",\n                            false, false\n                        )\n                        setDrawableAlpha(\n                            mBackgroundNormal,\n                            defaultBackgroundAlpha + 30\n                        )\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            appMiniWindowRowTouchHelperClass,\n            \"onMiniWindowReset\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    val mPickedMiniWindowChild =\n                        HookUtils.getValueByField(param.thisObject, \"mPickedMiniWindowChild\")\n                            ?: return\n\n                    val mBackgroundNormal =\n                        HookUtils.getValueByField(mPickedMiniWindowChild, \"mBackgroundNormal\")\n                            ?: return\n                    mBackgroundNormal as View\n\n                    if (HookUtils.isBlurDrawable(mBackgroundNormal.background)) {\n                        XposedHelpers.callMethod(\n                            mBackgroundNormal.background,\n                            \"setVisible\",\n                            true,\n                            false\n                        )\n                        setDrawableAlpha(\n                            mBackgroundNormal,\n                            blurBackgroundAlpha\n                        )\n                    }\n                }\n            })\n\n        // 悬浮的时候把模糊加上\n        XposedBridge.hookAllMethods(\n            miuiExpandableNotificationRowClass,\n            \"setHeadsUp\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    val isHeadsUp = param.args[0] as Boolean\n                    val miuiNotificationBackgroundView = param.thisObject as View\n                    val mBackgroundNormal = HookUtils.getValueByField(\n                        miuiNotificationBackgroundView,\n                        \"mBackgroundNormal\"\n                    ) as View\n                    if (!mBackgroundNormal.isAttachedToWindow) {\n                        return\n                    }\n                    if (isHeadsUp) {\n                        if (mBackgroundNormal.background != null) {\n                            if (HookUtils.isBlurDrawable(mBackgroundNormal.background)) {\n                                return\n                            }\n                        }\n                        mBackgroundNormal.background =\n                            HookUtils.createBlurDrawable(\n                                mBackgroundNormal,\n                                blurRadius,\n                                cornerRadius\n                            )\n\n                        setDrawableAlpha(\n                            mBackgroundNormal,\n                            blurBackgroundAlpha\n                        )\n                    } /*else {\n                        if (HookUtils.isBlurDrawable(mBackgroundNormal.background)) {\n                            mBackgroundNormal.background = null\n                        }\n                        try {\n                            XposedHelpers.callMethod(\n                                mBackgroundNormal,\n                                \"setDrawableAlpha\",\n                                defaultBackgroundAlpha\n                            )\n                        } catch (e: Throwable) {\n                            logE(\"BlurNotificationView -> defaultBackgroundAlpha\", e)\n                        }\n                    }*/\n                }\n            })\n\n        // 进入不同状态，处理一下模糊\n        XposedBridge.hookAllMethods(\n            miuiNotificationPanelViewControllerClass,\n            \"onStateChanged\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    // status 1 锁屏 2 锁屏下拉 0 其他\n                    val status = param.args[0] as Int\n                    val mNotificationStackScroller =\n                        HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mNotificationStackScroller\"\n                        ) as ViewGroup\n                    if (status == 1) {\n                        if (!isDefaultLockScreenTheme()) {\n                            return\n                        }\n                        for (i in 0..mNotificationStackScroller.childCount) {\n                            val childAt =\n                                mNotificationStackScroller.getChildAt(i) ?: continue\n                            showBlurEffectForNotificationRow(childAt)\n                        }\n                    } else {\n                        for (i in 0..mNotificationStackScroller.childCount) {\n                            val childAt =\n                                mNotificationStackScroller.getChildAt(i) ?: continue\n                            try {\n                                val isHeadsUp =\n                                    XposedHelpers.callMethod(childAt, \"isHeadsUpState\") as Boolean\n                                val isPinned = XposedHelpers.callMethod(\n                                    childAt,\n                                    \"isPinned\"\n                                ) as Boolean\n                                if (isHeadsUp && isPinned) {\n                                    showBlurEffectForNotificationRow(childAt)\n                                } else {\n                                    hideBlurEffectForNotificationRow(childAt)\n                                }\n                            } catch (e: Throwable) {\n                                hideBlurEffectForNotificationRow(childAt)\n                            }\n                        }\n                    }\n                }\n            })\n\n        // 下拉完成处理模糊\n        /*\n        XposedBridge.hookAllMethods(\n            NotificationPanelViewControllerClass,\n            \"onExpandingFinished\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val isOnKeyguard =\n                        XposedHelpers.callMethod(param.thisObject, \"isOnKeyguard\") as Boolean\n                    if (isOnKeyguard) {\n                        return\n                    }\n                    val mNotificationStackScroller =\n                        Hook.getValueByField(\n                            param.thisObject,\n                            \"mNotificationStackScroller\"\n                        ) ?: return\n                    mNotificationStackScroller as ViewGroup\n                    for (i in 0..mNotificationStackScroller.childCount) {\n                        val childAt =\n                            mNotificationStackScroller.getChildAt(i) ?: continue\n                        hideBlurEffectForNotificationRow(childAt)\n                    }\n                }\n            })\n         */\n\n        // 通知添加进视图的时候增加模糊\n        XposedBridge.hookAllMethods(\n            notificationStackScrollLayoutClass,\n            \"onViewAddedInternal\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val expandableView = param.args[0] as View\n                    val mController = HookUtils.getValueByField(param.thisObject, \"mController\")\n                        ?: return\n                    val mPanelViewController =\n                        HookUtils.getValueByField(mController, \"mPanelViewController\")\n                            ?: return\n                    val isExpanding =\n                        XposedHelpers.callMethod(\n                            mPanelViewController,\n                            if (isAndroidU()) \"isExpandingOrCollapsing\" else \"isExpanding\"\n                        ) as Boolean\n                    if (isExpanding) return\n\n                    val isOnKeyguard =\n                        XposedHelpers.callMethod(mPanelViewController, \"isOnKeyguard\") as Boolean\n                    if (isOnKeyguard) {\n                        if (!isDefaultLockScreenTheme()) {\n                            return\n                        }\n                        showBlurEffectForNotificationRow(expandableView)\n                    } else {\n                        // ZenModeView 没有 isHeadsUpState 方法\n                        try {\n                            val isHeadsUp =\n                                XposedHelpers.callMethod(\n                                    expandableView,\n                                    \"isHeadsUpState\"\n                                ) as Boolean\n                            if (isHeadsUp) {\n                                showBlurEffectForNotificationRow(expandableView)\n                            }\n                        } catch (e: Throwable) {\n                            return\n                        }\n                    }\n                }\n            })\n\n        // 锁屏状态透明度修改的时候同步修改模糊透明度\n        if (isAndroidS()) {\n            XposedBridge.hookAllMethods(miuiNotificationPanelViewControllerClass,\n                \"updateKeyguardElementAlpha\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        if (!isDefaultLockScreenTheme()) return\n                        val mNotificationStackScroller =\n                            HookUtils.getValueByField(\n                                param.thisObject,\n                                \"mNotificationStackScroller\"\n                            ) ?: return\n                        mNotificationStackScroller as ViewGroup\n\n                        val keyguardContentsAlpha =\n                            XposedHelpers.callMethod(\n                                param.thisObject,\n                                \"getKeyguardContentsAlpha\"\n                            ) as Float\n                        val drawableAlpha = keyguardContentsAlpha * 255\n                        for (i in 0..mNotificationStackScroller.childCount) {\n                            val childAt =\n                                mNotificationStackScroller.getChildAt(i) ?: continue\n                            setBlurEffectAlphaForNotificationRow(childAt, drawableAlpha.toInt())\n                        }\n                    }\n                })\n        }\n\n        XposedBridge.hookAllMethods(\n            miuiNotificationPanelViewControllerClass,\n            \"onBouncerShowingChanged\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    val isBouncerShowing = param.args[0] as Boolean\n                    val mNotificationStackScroller =\n                        HookUtils.getValueByField(param.thisObject, \"mNotificationStackScroller\")\n                            ?: return\n                    mNotificationStackScroller as ViewGroup\n                    for (i in 0..mNotificationStackScroller.childCount) {\n                        val childAt =\n                            mNotificationStackScroller.getChildAt(i) ?: continue\n                        if (isBouncerShowing) {\n                            hideBlurEffectForNotificationRow(childAt)\n                        } else {\n                            showBlurEffectForNotificationRow(childAt)\n                        }\n                    }\n                }\n            })\n\n        if (isMoreAndroidVersion(33)) {\n            // 锁屏画报 隐藏模糊\n            // 修复 Android 13 锁屏画报模糊残留\n            XposedBridge.hookAllMethods(\n                lockScreenMagazineControllerClass,\n                \"setPanelViewAlpha\",\n                object : XC_MethodHook() {\n                    override fun beforeHookedMethod(param: MethodHookParam) {\n                        if (!isDefaultLockScreenTheme()) return\n                        val alpha = param.args[0] as Float\n                        val drawableAlpha = alpha * 255\n\n                        val mNotificationStackScrollLayoutController =\n                            HookUtils.getValueByField(\n                                param.thisObject,\n                                \"mNotificationStackScrollLayoutController\"\n                            )\n                                ?: return\n                        val mView =\n                            HookUtils.getValueByField(\n                                mNotificationStackScrollLayoutController,\n                                \"mView\"\n                            ) ?: return\n\n                        mView as ViewGroup\n\n                        for (i in 0..mView.childCount) {\n                            val childAt = mView.getChildAt(i) ?: continue\n                            setBlurEffectAlphaForNotificationRow(childAt, drawableAlpha.toInt())\n                        }\n                    }\n                })\n        } else {\n            // 锁屏画报 隐藏模糊\n            XposedBridge.hookAllMethods(\n                lockScreenMagazineControllerClass,\n                \"setViewsAlpha\",\n                object : XC_MethodHook() {\n                    override fun beforeHookedMethod(param: MethodHookParam) {\n                        if (!isDefaultLockScreenTheme()) return\n                        val alpha = param.args[0] as Float\n                        val drawableAlpha = alpha * 255\n                        val mNotificationStackScrollLayout = HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mNotificationStackScrollLayout\"\n                        ) as ViewGroup\n                        for (i in 0..mNotificationStackScrollLayout.childCount) {\n                            val childAt =\n                                mNotificationStackScrollLayout.getChildAt(i) ?: continue\n                            setBlurEffectAlphaForNotificationRow(childAt, drawableAlpha.toInt())\n                        }\n                    }\n                })\n\n        }\n\n        XposedBridge.hookAllMethods(\n            notificationStackScrollLayoutClass,\n            \"setDozing\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val isDozing = param.args[0] as Boolean\n                    val mNotificationStackScrollLayout = param.thisObject as ViewGroup\n                    for (i in 0..mNotificationStackScrollLayout.childCount) {\n                        val childAt =\n                            mNotificationStackScrollLayout.getChildAt(i) ?: continue\n                        if (isDozing) {\n                            hideBlurEffectForNotificationRow(childAt)\n                        } else {\n                            showBlurEffectForNotificationRow(childAt)\n                        }\n                    }\n                }\n            })\n\n        /*\n        XposedBridge.hookAllMethods(\n            KeyguardPanelViewInjectorClass,\n            \"onKeyguardVisibilityChanged\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val isVisible = param.args[0] as Boolean\n                    val mPanelViewController =\n                        Hook.getValueByField(param.thisObject, \"mPanelViewController\") ?: return\n\n                    val mNotificationStackScroller =\n                        Hook.getValueByField(\n                            mPanelViewController,\n                            \"mNotificationStackScroller\"\n                        ) ?: return\n                    mNotificationStackScroller as ViewGroup\n                    for (i in 0..mNotificationStackScroller.childCount) {\n                        val childAt =\n                            mNotificationStackScroller.getChildAt(i) ?: continue\n                        if (isVisible) {\n                            showBlurEffectForNotificationRow(childAt)\n                        } else {\n                            try {\n                                val isHeadsUp =\n                                    XposedHelpers.callMethod(\n                                        childAt,\n                                        \"isHeadsUpState\"\n                                    ) as Boolean\n                                val isPinned = XposedHelpers.callMethod(\n                                    childAt,\n                                    \"isPinned\"\n                                ) as Boolean\n                                if (isHeadsUp && isPinned) {\n                                    showBlurEffectForNotificationRow(childAt)\n                                } else {\n                                    hideBlurEffectForNotificationRow(childAt)\n                                }\n                            } catch (e: Throwable) {\n                                hideBlurEffectForNotificationRow(childAt)\n                            }\n                        }\n                    }\n                }\n            })\n        */\n\n        XposedBridge.hookAllConstructors(miuiNotificationPanelViewControllerClass,\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    val mNotificationStackScroller =\n                        HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mNotificationStackScroller\"\n                        ) ?: return\n                    mNotificationStackScroller as ViewGroup\n                    XposedBridge.hookAllMethods(blurRatioChangedListener,\n                        \"onBlurRadiusChanged\",\n                        object : XC_MethodHook() {\n                            override fun afterHookedMethod(params: MethodHookParam) {\n                                val radius = params.args[0] as Int\n                                val isOnKeyguard = XposedHelpers.callMethod(\n                                    param.thisObject,\n                                    \"isOnKeyguard\"\n                                ) as Boolean\n                                for (i in 0..mNotificationStackScroller.childCount) {\n                                    val childAt =\n                                        mNotificationStackScroller.getChildAt(i) ?: continue\n                                    if (radius > 30 && !isOnKeyguard) {\n                                        hideBlurEffectForNotificationRow(childAt)\n                                    } /*else {\n                                        // 锁屏状态显示模糊（不能留，点击通知进入密码页面模糊残留）\n                                        if (isOnKeyguard) showBlurEffectForNotificationRow(childAt)\n                                    }*/\n                                }\n                            }\n                        })\n                }\n            })\n    }\n\n    fun isDefaultLockScreenTheme(): Boolean {\n        val miuiKeyguardUtilsClass = findClassIfExists(\n            if (isAndroidU())\n                \"com.miui.systemui.util.CommonUtil\"\n            else\n                \"com.android.keyguard.utils.MiuiKeyguardUtils\"\n        ) ?: return true\n        return XposedHelpers.callStaticMethod(\n            miuiKeyguardUtilsClass,\n            \"isDefaultLockScreenTheme\"\n        ) as Boolean\n    }\n\n    // 增加一个游戏模式跟全屏视频判断，用以增加透明通知适配\n    fun isTransparentAble(): Boolean {\n        val notificationContentInflaterInjectorClass = findClassIfExists(\n            \"com.android.systemui.statusbar.notification.row.NotificationContentInflaterInjector\"\n        ) ?: return true\n        return XposedHelpers.callStaticMethod(\n            notificationContentInflaterInjectorClass,\n            \"isTransparentAble\"\n        ) as Boolean\n    }\n\n\n    fun hideBlurEffectForNotificationRow(notificationRow: View) {\n        if (notificationRow.javaClass.name.contains(\"ZenModeView\")) {\n            val zenModeContentContainer =\n                XposedHelpers.callMethod(notificationRow, \"getContentView\") ?: return\n            zenModeContentContainer as ViewGroup\n            val zenModeContent =\n                zenModeContentContainer.getChildAt(0) ?: return\n            val contentBackground =\n                zenModeContent.background as GradientDrawable\n            contentBackground.alpha = defaultBackgroundAlpha\n            contentBackground.invalidateSelf()\n            if (HookUtils.isBlurDrawable(zenModeContentContainer.background)) {\n                zenModeContentContainer.background = null\n            }\n        } else {\n            val mBackgroundNormal =\n                HookUtils.getValueByField(notificationRow, \"mBackgroundNormal\")\n                    ?: return\n            mBackgroundNormal as View\n            if (HookUtils.isBlurDrawable(mBackgroundNormal.background)) {\n                mBackgroundNormal.background = null\n            }\n            runCatching {\n                setDrawableAlpha(\n                    mBackgroundNormal,\n                    defaultBackgroundAlpha\n                )\n            }\n\n            runCatching {\n                val childList =\n                    XposedHelpers.callMethod(notificationRow, \"getAttachedChildren\") ?: return\n                childList as List<*>\n                if (childList.size > 0) {\n                    childList.forEach { child ->\n                        if (child != null) {\n                            hideBlurEffectForNotificationRow(child as View)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    fun setBlurEffectAlphaForNotificationRow(notificationRow: View, alpha: Int) {\n        if (alpha < 0 || alpha > 255) {\n            return\n        }\n        if (notificationRow.javaClass.name.contains(\"ZenModeView\")) {\n            val zenModeContentContainer =\n                XposedHelpers.callMethod(notificationRow, \"getContentView\") ?: return\n            zenModeContentContainer as ViewGroup\n            if (HookUtils.isBlurDrawable(zenModeContentContainer.background)) {\n                XposedHelpers.callMethod(zenModeContentContainer.background, \"setAlpha\", alpha)\n            }\n        } else {\n            val mBackgroundNormal =\n                HookUtils.getValueByField(notificationRow, \"mBackgroundNormal\")\n                    ?: return\n            mBackgroundNormal as View\n            if (HookUtils.isBlurDrawable(mBackgroundNormal.background)) {\n                XposedHelpers.callMethod(mBackgroundNormal.background, \"setAlpha\", alpha)\n            }\n            runCatching {\n                val childList =\n                    XposedHelpers.callMethod(notificationRow, \"getAttachedChildren\") ?: return\n                childList as List<*>\n                if (childList.size > 0) {\n                    childList.forEach { child ->\n                        if (child != null) {\n                            setBlurEffectAlphaForNotificationRow(child as View, alpha)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    fun showBlurEffectForNotificationRow(notificationRow: View) {\n        if (notificationRow.javaClass.name.contains(\"ZenModeView\")) {\n            val zenModeContentContainer =\n                XposedHelpers.callMethod(notificationRow, \"getContentView\") ?: return\n            zenModeContentContainer as ViewGroup\n            val zenModeContent =\n                zenModeContentContainer.getChildAt(0) ?: return\n            val contentBackground =\n                zenModeContent.background as GradientDrawable\n            contentBackground.alpha = blurBackgroundAlpha\n            contentBackground.invalidateSelf()\n            if (!HookUtils.isBlurDrawable(zenModeContentContainer.background)) {\n                zenModeContentContainer.background =\n                    HookUtils.createBlurDrawable(notificationRow, blurRadius, cornerRadius)\n            }\n        } else {\n            val mBackgroundNormal =\n                HookUtils.getValueByField(notificationRow, \"mBackgroundNormal\") ?: return\n            mBackgroundNormal as View\n            if (!HookUtils.isBlurDrawable(mBackgroundNormal.background)) {\n                mBackgroundNormal.background =\n                    HookUtils.createBlurDrawable(mBackgroundNormal, blurRadius, cornerRadius)\n                runCatching {\n                    setDrawableAlpha(\n                        mBackgroundNormal,\n                        blurBackgroundAlpha\n                    )\n                }\n            }\n            runCatching {\n                val childList =\n                    XposedHelpers.callMethod(notificationRow, \"getAttachedChildren\") ?: return\n                childList as List<*>\n                if (childList.size > 0) {\n                    childList.forEach { child ->\n                        if (child != null) {\n                            showBlurEffectForNotificationRow(child as View)\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/BluetoothTileStyle.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport static com.sevtinge.cemiuiler.module.base.BaseXposedInit.mPrefsMap;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.AppUtilsKt.dp2px2;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\n\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.Helpers.MethodHook;\nimport com.sevtinge.cemiuiler.utils.ResourcesHook;\n\nimport java.util.ArrayList;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BluetoothTileStyle {\n    public static void initHideDeviceControlEntry(ClassLoader pluginLoader) {\n        int styleId = mPrefsMap.getStringAsInt(\"system_ui_control_center_cc_bluetooth_tile_style\", 1);\n        if (styleId == 1) return;\n\n        final int[] tileResIds = {0};\n        Helpers.findAndHookMethod(\"miui.systemui.dagger.PluginComponentFactory\", pluginLoader, \"create\", Context.class, Context.class, new MethodHook() {\n            @SuppressLint(\"DiscouragedApi\")\n            protected void after(XC_MethodHook.MethodHookParam param) {\n                Context pluginContext = (Context) param.args[1];\n                tileResIds[0] = pluginContext.getResources().getIdentifier(\"big_tile\", \"layout\", \"miui.systemui.plugin\");\n            }\n        });\n        Helpers.hookAllMethods(\"miui.systemui.controlcenter.dagger.ControlCenterViewModule\", pluginLoader, \"createBigTileGroup\", new MethodHook() {\n            @Override\n            protected void after(XC_MethodHook.MethodHookParam param) {\n                ViewGroup mView = (ViewGroup) param.getResult();\n                LayoutInflater li = (LayoutInflater) XposedHelpers.callMethod(param.args[0], \"injectable\", param.args[1]);\n                View btTileView = li.inflate(tileResIds[0], null);\n                mView.addView(btTileView, 2);\n                btTileView.setTag(\"big_tile_bt\");\n            }\n        });\n        MethodHook updateStyleHook = new MethodHook() {\n            boolean United = false;\n            @Override\n            @SuppressLint(\"DiscouragedApi\")\n            protected void after(XC_MethodHook.MethodHookParam param) throws Throwable {\n                ViewGroup mView = (ViewGroup) XposedHelpers.callMethod(param.thisObject, \"getView\");\n                View bigTileB = (View) XposedHelpers.getObjectField(param.thisObject, \"bigTileB\");\n                if (!United) {\n                    United = true;\n                    Object factory = XposedHelpers.getObjectField(param.thisObject, \"tileViewFactory\");\n                    View btTileView = mView.findViewWithTag(\"big_tile_bt\");\n                    int btTileId = ResourcesHook.getFakeResId(\"bt_big_tile\");\n                    btTileView.setId(btTileId);\n                    Object btController = XposedHelpers.callMethod(factory, \"create\", btTileView, \"bt\");\n                    XposedHelpers.setAdditionalInstanceField(param.thisObject, \"btTileView\", btTileView);\n                    XposedHelpers.setAdditionalInstanceField(param.thisObject, \"btController\", btController);\n\n                    Class<?> mConstraintSetClass = pluginLoader.loadClass(\"androidx.constraintlayout.widget.ConstraintSet\");\n                    Object constraintSet = XposedHelpers.newInstance(mConstraintSetClass);\n                    XposedHelpers.callMethod(constraintSet, \"clone\", mView);\n                    View bigTileA = (View) XposedHelpers.getObjectField(param.thisObject, \"bigTileA\");\n                    if (styleId == 2) {\n                        XposedHelpers.callMethod(constraintSet, \"connect\", bigTileB.getId(), 7, btTileId, 6);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 6, bigTileB.getId(), 7);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 7, bigTileA.getId(), 7);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 3, bigTileB.getId(), 3);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 4, 0, 4);\n                        XposedHelpers.callMethod(constraintSet, \"setMargin\", btTileId, 6, (int) dp2px2(10));\n                        int labelResId = mView.getResources().getIdentifier(\"label_container\", \"id\", \"miui.systemui.plugin\");\n                        bigTileB.findViewById(labelResId).setVisibility(View.GONE);\n                        btTileView.findViewById(labelResId).setVisibility(View.GONE);\n                        int iconResId = mView.getResources().getIdentifier(\"status_icon\", \"id\", \"miui.systemui.plugin\");\n                        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) bigTileB.findViewById(iconResId).getLayoutParams();\n                        layoutParams.leftMargin = (int) dp2px2(3);\n                        layoutParams = (LinearLayout.LayoutParams) btTileView.findViewById(iconResId).getLayoutParams();\n                        layoutParams.leftMargin = (int) dp2px2(3);\n                    }\n                    else {\n                        XposedHelpers.callMethod(constraintSet, \"connect\", bigTileB.getId(), 4, btTileId, 3);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 6, bigTileA.getId(), 6);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 7, bigTileA.getId(), 7);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 3, bigTileB.getId(), 4);\n                        XposedHelpers.callMethod(constraintSet, \"connect\", btTileId, 4, 0, 4);\n                    }\n                    XposedHelpers.callMethod(constraintSet, \"constrainWidth\", btTileId, 0);\n                    XposedHelpers.callMethod(constraintSet, \"constrainHeight\", btTileId, 0);\n                    XposedHelpers.callMethod(constraintSet, \"applyTo\", mView);\n                }\n                if (styleId == 3) {\n                    ViewGroup.LayoutParams layoutParams = bigTileB.getLayoutParams();\n                    int verticalMargin = (int) dp2px2(4);\n                    ((ViewGroup.MarginLayoutParams) layoutParams).topMargin = verticalMargin;\n                    ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin = verticalMargin;\n                }\n            }\n        };\n        Helpers.findAndHookMethod(\"miui.systemui.controlcenter.qs.tileview.BigTileGroupController\", pluginLoader, \"updateResources\", updateStyleHook);\n        Helpers.findAndHookMethod(\"miui.systemui.controlcenter.qs.tileview.BigTileGroupController\", pluginLoader, \"setListening\", boolean.class, new MethodHook() {\n            @Override\n            protected void after(XC_MethodHook.MethodHookParam param) {\n                Object btController = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"btController\");\n                if (btController != null) {\n                    XposedHelpers.callMethod(btController, \"setListening\", param.args[0]);\n                }\n            }\n        });\n        Helpers.findAndHookMethod(\"miui.systemui.controlcenter.qs.tileview.BigTileGroupController\", pluginLoader, \"getRowViews\", int.class, new MethodHook() {\n            @Override\n            protected void after(XC_MethodHook.MethodHookParam param) {\n                int row = (int) param.args[0];\n                Object btTileView;\n                if (row == 1 && (btTileView = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"btTileView\")) != null) {\n                    ((ArrayList<Object>)param.getResult()).add(btTileView);\n                }\n            }\n        });\n        Helpers.findAndHookMethod(\"miui.systemui.controlcenter.qs.tileview.BigTileGroupController\", pluginLoader, \"getChildControllers\", new MethodHook() {\n            @Override\n            protected void after(XC_MethodHook.MethodHookParam param) {\n                Object btController = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"btController\");\n                if (btController != null) {\n                    ((ArrayList<Object>)param.getResult()).add(btController);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/CCGrid.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.pm.ApplicationInfo\nimport android.text.TextUtils\nimport android.util.AttributeSet\nimport android.view.View\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.R\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidT\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\nimport de.robv.android.xposed.XposedHelpers\n\nobject CCGrid : BaseHook() {\n    private val cols by lazy {\n        mPrefsMap.getInt(\"system_control_center_cc_columns\", 4)\n    }\n    private val rows by lazy {\n        mPrefsMap.getInt(\"system_control_center_cc_rows\", 4)\n    }\n    private val label by lazy {\n        mPrefsMap.getBoolean(\"system_control_center_qs_tile_label\")\n    }\n    private var scaledTileWidthDim = -1f\n\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        if (cols > 4) {\n            mResHook.setObjectReplacement(\n                lpparam.packageName,\n                \"dimen\",\n                \"qs_control_tiles_columns\",\n                cols\n            )\n        }\n        Helpers.findAndHookMethod(\n            \"com.android.systemui.SystemUIApplication\",\n            lpparam.classLoader,\n            \"onCreate\",\n            object : MethodHook() {\n                private var isHooked = false\n                override fun after(param: MethodHookParam) {\n                    if (!isHooked) {\n                        isHooked = true\n                        val mContext = XposedHelpers.callMethod(\n                            param.thisObject,\n                            \"getApplicationContext\"\n                        ) as Context\n                        val res = mContext.resources\n                        val density = res.displayMetrics.density\n                        val tileWidthResId = res.getIdentifier(\n                            \"qs_control_center_tile_width\",\n                            \"dimen\",\n                            \"com.android.systemui\"\n                        )\n                        var tileWidthDim = res.getDimension(tileWidthResId)\n                        if (cols > 4) {\n                            tileWidthDim /= density\n                            scaledTileWidthDim = tileWidthDim * 4 / cols\n                            mResHook.setDensityReplacement(\n                                lpparam.packageName,\n                                \"dimen\",\n                                \"qs_control_center_tile_width\",\n                                scaledTileWidthDim\n                            )\n                            mResHook.setDensityReplacement(\n                                \"miui.systemui.plugin\",\n                                \"dimen\",\n                                \"qs_control_center_tile_width\",\n                                scaledTileWidthDim\n                            )\n                            mResHook.setDensityReplacement(\n                                lpparam.packageName,\n                                \"dimen\",\n                                \"qs_control_tile_icon_bg_size\",\n                                scaledTileWidthDim\n                            )\n                            mResHook.setDensityReplacement(\n                                \"miui.systemui.plugin\",\n                                \"dimen\",\n                                \"qs_control_tile_icon_bg_size\",\n                                scaledTileWidthDim\n                            )\n                            mResHook.setDensityReplacement(\n                                \"miui.systemui.plugin\",\n                                \"dimen\",\n                                \"qs_cell_height\",\n                                85f\n                            )\n                        }\n                    }\n                }\n            })\n\n        val pluginLoaderClass =\n            if (isAndroidU()) \"com.android.systemui.shared.plugins.PluginInstance\\$Factory\\$\\$ExternalSyntheticLambda0\"\n            else if (isAndroidT()) \"com.android.systemui.shared.plugins.PluginInstance\\$Factory\"\n            else \"com.android.systemui.shared.plugins.PluginManagerImpl\"\n\n        var appInfo: ApplicationInfo?\n\n        if (isAndroidU()) {\n            hookAllMethods(\"com.android.systemui.shared.plugins.PluginInstance\\$Factory\",\n                \"create\", object : MethodHook() {\n                    override fun before(param: MethodHookParam) {\n                        appInfo = param.args[1] as ApplicationInfo\n                        ClassUtils.loadClass(pluginLoaderClass, lpparam.classLoader).methodFinder().first {\n                            name == \"get\"\n                        }.createHook {\n                            after { getClassLoader ->\n                                if (appInfo!!.packageName == \"miui.systemui.plugin\") {\n                                    val classLoader = getClassLoader.result as ClassLoader\n                                    loadCCGrid(classLoader)\n                                }\n                            }\n                        }\n                    }\n                }\n            )\n        } else {\n            ClassUtils.loadClass(pluginLoaderClass, lpparam.classLoader).methodFinder().first {\n                name == \"getClassLoader\"\n            }.createHook {\n                after { getClassLoader ->\n                    appInfo = getClassLoader.args[0] as ApplicationInfo\n                    if (appInfo!!.packageName == \"miui.systemui.plugin\") {\n                        val classLoader = getClassLoader.result as ClassLoader\n                        loadCCGrid(classLoader)\n                    }\n                }\n            }\n        }\n    }\n\n    private fun loadCCGrid(pluginLoader: ClassLoader) {\n        if (cols > 4) {\n            Helpers.findAndHookConstructor(\"miui.systemui.controlcenter.qs.QSPager\", pluginLoader,\n                Context::class.java,\n                AttributeSet::class.java,\n                object : MethodHook() {\n                    override fun after(param: MethodHookParam) {\n                        XposedHelpers.setObjectField(\n                            param.thisObject,\n                            \"columns\",\n                            cols\n                        )\n                    }\n                })\n            if (!label) {\n                Helpers.findAndHookMethod(\"miui.systemui.controlcenter.qs.tileview.StandardTileView\", pluginLoader,\n                    \"createLabel\",\n                    Boolean::class.javaPrimitiveType,\n                    object : MethodHook() {\n                        override fun after(param: MethodHookParam) {\n                            val label = XposedHelpers.getObjectField(\n                                param.thisObject,\n                                \"label\"\n                            )\n                            if (label != null) {\n                                val lb = label as TextView\n                                lb.maxLines = 1\n                                lb.isSingleLine = true\n                                lb.ellipsize = TextUtils.TruncateAt.MARQUEE\n                                lb.marqueeRepeatLimit = 0\n                                val labelContainer = XposedHelpers.getObjectField(\n                                    param.thisObject,\n                                    \"labelContainer\"\n                                ) as View\n                                labelContainer.setPadding(4, 0, 4, 0)\n                            }\n                        }\n                    })\n            }\n        }\n        if (rows != 4) {\n            Helpers.findAndHookMethod(\n                \"miui.systemui.controlcenter.qs.QSPager\",\n                pluginLoader,\n                \"distributeTiles\",\n                object : MethodHook() {\n                    override fun after(param: MethodHookParam) {\n                        val collapse = XposedHelpers.getObjectField(\n                            param.thisObject,\n                            \"collapse\"\n                        ) as Boolean\n                        if (collapse) {\n                            val pages = XposedHelpers.getObjectField(\n                                param.thisObject,\n                                \"pages\"\n                            ) as ArrayList<*>\n                            for (tileLayoutImpl in pages) {\n                                XposedHelpers.callMethod(\n                                    tileLayoutImpl,\n                                    \"removeTiles\"\n                                )\n                            }\n                            val pageTiles = ArrayList<Any>()\n                            var currentRow = 2\n                            val records = XposedHelpers.getObjectField(\n                                param.thisObject,\n                                \"records\"\n                            ) as ArrayList<*>\n                            val it2: Iterator<*> = records.iterator()\n                            var i3 = 0\n                            var pageNow = 0\n                            val bigHeader = XposedHelpers.getObjectField(\n                                param.thisObject,\n                                \"header\"\n                            )\n                            while (it2.hasNext()) {\n                                val tileRecord = it2.next()!!\n                                pageTiles.add(tileRecord)\n                                i3++\n                                if (i3 >= cols) {\n                                    currentRow++\n                                    i3 = 0\n                                }\n                                if (currentRow >= rows || !it2.hasNext()) {\n                                    XposedHelpers.callMethod(\n                                        pages[pageNow],\n                                        \"setTiles\",\n                                        pageTiles,\n                                        if (pageNow == 0) bigHeader else null\n                                    )\n                                    pageTiles.clear()\n                                    val totalRows = XposedHelpers.getObjectField(\n                                        param.thisObject,\n                                        \"rows\"\n                                    ) as Int\n                                    if (currentRow > totalRows) {\n                                        XposedHelpers.setObjectField(\n                                            param.thisObject,\n                                            \"rows\",\n                                            currentRow\n                                        )\n                                    }\n                                    if (it2.hasNext()) {\n                                        pageNow++\n                                        currentRow = 0\n                                    }\n                                }\n                            }\n                            val it3 = pages.iterator()\n                            while (it3.hasNext()) {\n                                val next2 = it3.next()\n                                val isEmpty = XposedHelpers.callMethod(\n                                    next2,\n                                    \"isEmpty\"\n                                ) as Boolean\n                                if (isEmpty) {\n                                    it3.remove()\n                                }\n                            }\n                            val pageIndicator = XposedHelpers.getObjectField(\n                                param.thisObject,\n                                \"pageIndicator\"\n                            )\n                            if (pageIndicator != null) {\n                                XposedHelpers.callMethod(\n                                    pageIndicator,\n                                    \"setNumPages\",\n                                    pages.size\n                                )\n                            }\n                            val adapter = XposedHelpers.getObjectField(\n                                param.thisObject,\n                                \"adapter\"\n                            )\n                            XposedHelpers.callMethod(\n                                param.thisObject,\n                                \"setAdapter\",\n                                adapter\n                            )\n                            // XposedHelpers.callMethod(param.thisObject, \"notifyDataSetChanged\");\n                        }\n                    }\n                })\n        }\n        // 移除磁贴标题相关\n        if (mPrefsMap.getBoolean(\"system_control_center_qs_tile_label\")) {\n            mHideCCLabels(pluginLoader)\n        }\n\n        // 新控制中心矩形圆角\n        if (mPrefsMap.getBoolean(\"system_ui_control_center_rounded_rect\")) {\n            mResHook.setResReplacement(\n                \"miui.systemui.plugin\",\n                \"drawable\",\n                \"qs_background_unavailable\",\n                R.drawable.ic_qs_tile_bg_disabled\n            )\n            mResHook.setResReplacement(\n                \"miui.systemui.plugin\",\n                \"drawable\",\n                \"qs_background_disabled\",\n                R.drawable.ic_qs_tile_bg_disabled\n            )\n            mResHook.setResReplacement(\n                \"miui.systemui.plugin\",\n                \"drawable\",\n                \"qs_background_warning\",\n                R.drawable.ic_qs_tile_bg_warning\n            )\n            mCCTileCornerHook(pluginLoader)\n        }\n    }\n\n    private fun mHideCCLabels(pluginLoader: ClassLoader?) {\n        mResHook.setDensityReplacement(\n            \"miui.systemui.plugin\",\n            \"dimen\",\n            \"qs_cell_height\",\n            85f\n        )\n        val mQSController = XposedHelpers.findClassIfExists(\n            \"miui.systemui.controlcenter.qs.tileview.StandardTileView\",\n            pluginLoader\n        )\n        Helpers.hookAllMethods(mQSController, \"init\", object : MethodHook() {\n            override fun before(param: MethodHookParam) {\n                if (param.args.size != 1) return\n                val mLabelContainer = XposedHelpers.getObjectField(\n                    param.thisObject,\n                    \"labelContainer\"\n                ) as View\n                if (mLabelContainer != null) {\n                    mLabelContainer.visibility = View.GONE\n                }\n            }\n        })\n    }\n\n    private fun mCCTileCornerHook(pluginLoader: ClassLoader?) {\n        Helpers.findAndHookMethod(\"miui.systemui.controlcenter.qs.tileview.ExpandableIconView\",\n            pluginLoader,\n            \"setCornerRadius\",\n            Float::class.javaPrimitiveType,\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    val mContext = XposedHelpers.callMethod(\n                        param.thisObject,\n                        \"getPluginContext\"\n                    ) as Context\n                    var radius = 18f\n                    if (scaledTileWidthDim > 0) {\n                        radius *= scaledTileWidthDim / 65\n                    }\n                    param.args[0] = mContext.resources.displayMetrics.density * radius\n                }\n            })\n        Helpers.findAndHookMethod(\"miui.systemui.dagger.PluginComponentFactory\",\n            pluginLoader,\n            \"create\",\n            Context::class.java,\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    val mContext = param.args[0] as Context\n                    val res = mContext.resources\n                    val enabledTileBackgroundResId = res.getIdentifier(\n                        \"qs_background_enabled\",\n                        \"drawable\",\n                        \"miui.systemui.plugin\"\n                    )\n                    val enabledTileColorResId = res.getIdentifier(\n                        \"qs_enabled_color\",\n                        \"color\",\n                        \"miui.systemui.plugin\"\n                    )\n                    val tintColor = res.getColor(enabledTileColorResId, null)\n                    val imgHook: MethodHook = object : MethodHook() {\n                        override fun before(param: MethodHookParam) {\n                            val resId = param.args[0] as Int\n                            if (resId == enabledTileBackgroundResId && resId != 0) {\n                                val enableTile = Helpers.getModuleRes(mContext)\n                                    .getDrawable(R.drawable.ic_qs_tile_bg_enabled, null)\n                                enableTile.setTint(tintColor)\n                                param.result = enableTile\n                            }\n                        }\n                    }\n                    Helpers.findAndHookMethod(\n                        \"android.content.res.Resources\", pluginLoader, \"getDrawable\",\n                        Int::class.javaPrimitiveType, imgHook\n                    )\n                    Helpers.findAndHookMethod(\n                        \"android.content.res.Resources.Theme\",\n                        pluginLoader,\n                        \"getDrawable\",\n                        Int::class.javaPrimitiveType,\n                        imgHook\n                    )\n                }\n            })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/CompactNotificationsHook.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.annotation.SuppressLint\nimport android.view.View\nimport android.view.ViewGroup\nimport android.view.ViewGroup.MarginLayoutParams\nimport android.widget.FrameLayout\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport de.robv.android.xposed.XposedHelpers\nimport kotlin.math.roundToInt\n\n\nobject CompactNotificationsHook : BaseHook() {\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        val abHeight = 39.0f\n\n        if (mPrefsMap.getBoolean(\"system_ui_control_center_compact_notice\")) {\n            mResHook.setDensityReplacement(\"android\", \"dimen\", \"notification_action_height\", abHeight)\n            mResHook.setDensityReplacement(\"android\", \"dimen\", \"android_notification_action_height\", abHeight)\n            mResHook.setDensityReplacement(\"android\", \"dimen\", \"notification_action_list_height\", abHeight)\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"notification_row_extra_padding\", 0F)\n        }\n\n        Helpers.hookAllMethods(\n            \"com.android.systemui.statusbar.notification.row.wrapper.NotificationViewWrapper\", lpparam.classLoader,\n            \"wrap\",\n            object : MethodHook() {\n                @Throws(Throwable::class)\n                override fun after(param: MethodHookParam) {\n                    if (param.args.size > 3) return\n                    val res = param.result ?: return\n                    val mView = XposedHelpers.getObjectField(res, \"mView\") as View\n                    // if (mView.getId() != mView.getResources().getIdentifier(\"status_bar_latest_event_content\", \"id\", \"android\")) return;\n                    val container = mView.findViewById<FrameLayout>(\n                        mView.resources.getIdentifier(\"actions_container\", \"id\", \"android\")\n                    ) ?: return\n                    val density = mView.resources.displayMetrics.density\n                    val height = (density * abHeight).roundToInt()\n                    val actions = container.getChildAt(0) as ViewGroup\n                    val lp1 = actions.layoutParams as FrameLayout.LayoutParams\n                    lp1.height = height\n                    actions.layoutParams = lp1\n                    actions.setPadding(0, 0, 0, 0)\n                    for (c in 0 until actions.childCount) {\n                        val button = actions.getChildAt(c)\n                        val lp2 = button.layoutParams as MarginLayoutParams\n                        lp2.height = height\n                        lp2.bottomMargin = 0\n                        lp2.topMargin = 0\n                    }\n                }\n            })\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/ControlCenterStyle.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.ObjectUtils.setObject\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject ControlCenterStyle : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.controlcenter.policy.ControlCenterControllerImpl\").declaredConstructors.createHooks {\n            after {\n                setObject(it.thisObject, \"forceUseControlCenterPanel\", false)\n            }\n        }\n        loadClass(\"com.miui.systemui.SettingsObserver\").methodFinder()\n            .filterByName(\"setValue\\$default\").first()\n            .createHook {\n                before {\n                    if (it.args[1] == \"force_use_control_panel\") {\n                        it.args[2] = 0\n                    }\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/FiveGTile.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.database.ContentObserver;\nimport android.os.Build;\nimport android.os.Handler;\nimport android.provider.Settings;\nimport android.util.ArrayMap;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.utils.TileUtils;\n\nimport de.robv.android.xposed.XC_MethodHook.MethodHookParam;\nimport de.robv.android.xposed.XposedHelpers;\nimport miui.telephony.TelephonyManager;\n\npublic class FiveGTile extends TileUtils {\n    String mNfcTileClsName = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"com.android.systemui.qs.tiles.MiuiNfcTile\" :\n        \"com.android.systemui.qs.tiles.NfcTile\";\n    String mQSFactoryClsName = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"com.android.systemui.qs.tileimpl.MiuiQSFactory\" :\n        \"com.android.systemui.qs.tileimpl.QSFactoryImpl\";\n\n    @Override\n    public void init() {\n        super.init();\n    }\n\n    @Override\n    public Class<?> customQSFactory() {\n        return findClassIfExists(mQSFactoryClsName);\n    }\n\n    @Override\n    public Class<?> customClass() {\n        return findClassIfExists(mNfcTileClsName);\n    }\n\n    @Override\n    public String[] customTileProvider() {\n        String[] TileProvider = new String[3];\n        TileProvider[0] = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"nfcTileProvider\" : \"mNfcTileProvider\";\n        TileProvider[1] = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"createTileInternal\" : \"interceptCreateTile\";\n        TileProvider[2] = \"createTile\";\n        return TileProvider;\n    }\n\n    @Override\n    public String customName() {\n        return \"custom_5G\";\n    }\n\n    @Override\n    public int customValue() {\n        return R.string.system_control_center_5g_toggle_label;\n    }\n\n    @Override\n    public boolean needCustom() {\n        return true;\n    }\n\n    @Override\n    public boolean needAfter() {\n        return false;\n    }\n\n    @Override\n    public void tileCheck(MethodHookParam param, String tileName) {\n        // 获取设置是否支持5G\n        param.setResult(TelephonyManager.getDefault().isFiveGCapable());\n    }\n\n    @Override\n    public void tileLongClickIntent(MethodHookParam param, String tileName) {\n        Intent intent = new Intent(Intent.ACTION_MAIN);\n        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);\n        intent.setComponent(new ComponentName(\"com.android.phone\", \"com.android.phone.settings.MiuiFiveGNetworkSetting\"));\n        // 原活动是 com.android.phone.settings.PreferredNetworkTypeListPreference\n        param.setResult(intent);\n    }\n\n    @Override\n    public void tileClick(MethodHookParam param, String tileName) {\n        TelephonyManager manager = TelephonyManager.getDefault();\n        // 切换5G状态\n        manager.setUserFiveGEnabled(!manager.isUserFiveGEnabled());\n        // 更新磁贴状态\n        XposedHelpers.callMethod(param.thisObject, \"refreshState\");\n    }\n\n    @Override\n    public void tileListening(MethodHookParam param, String tileName) {\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        boolean mListening = (boolean) param.args[0];\n        if (mListening) {\n            ContentObserver contentObserver = new ContentObserver(new Handler(mContext.getMainLooper())) {\n                @Override\n                public void onChange(boolean z) {\n                    XposedHelpers.callMethod(param.thisObject, \"refreshState\");\n                }\n            };\n            mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor(\"fiveg_user_enable\"), false, contentObserver);\n            mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor(\"dual_nr_enabled\"), false, contentObserver);\n            XposedHelpers.setAdditionalInstanceField(param.thisObject, \"tileListener\", contentObserver);\n        } else {\n            ContentObserver contentObserver = (ContentObserver) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"tileListener\");\n            mContext.getContentResolver().unregisterContentObserver(contentObserver);\n        }\n    }\n\n    @Override\n    public ArrayMap<String, Integer> tileUpdateState(MethodHookParam param, Class<?> mResourceIcon, String tileName) {\n        boolean isEnable;\n        TelephonyManager manager = TelephonyManager.getDefault();\n        isEnable = manager.isUserFiveGEnabled();\n        ArrayMap<String, Integer> tileResMap = new ArrayMap<>();\n        tileResMap.put(\"custom_5G_Enable\", isEnable ? 1 : 0);\n        tileResMap.put(\"custom_5G_ON\", mResHook.addResource(\"ic_control_center_5g_toggle_on\", R.drawable.ic_control_center_5g_toggle_on));\n        tileResMap.put(\"custom_5G_OFF\", mResHook.addResource(\"ic_control_center_5g_toggle_off\", R.drawable.ic_control_center_5g_toggle_off));\n        return tileResMap;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/FixMediaControlPanel.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.setObjectField\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\n\nobject FixMediaControlPanel : BaseHook() {\n    override fun init() {\n        try {\n            EzXHelper.initHandleLoadPackage(lpparam)\n            XposedHelpers.findAndHookMethod(\"com.android.systemui.statusbar.notification.mediacontrol.MiuiMediaControlPanel\",\n                lpparam.classLoader,\n                \"setArtwork\",\n                XposedHelpers.findClass(\"com.android.systemui.media.MediaData\", lpparam.classLoader),\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        param.thisObject.setObjectField(\"mCurrentKey\", \"\")\n                    }\n                })\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/FlashLight.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidU;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.Context;\nimport android.database.ContentObserver;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Handler;\nimport android.provider.Settings;\nimport android.util.ArrayMap;\n\nimport androidx.annotation.Nullable;\n\nimport com.sevtinge.cemiuiler.utils.MathUtils;\nimport com.sevtinge.cemiuiler.utils.ShellUtils;\nimport com.sevtinge.cemiuiler.utils.TileUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.io.BufferedReader;\nimport java.io.File;\nimport java.io.FileReader;\nimport java.io.FileWriter;\nimport java.io.IOException;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class FlashLight extends TileUtils {\n    String mQSFactoryClsName = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"com.android.systemui.qs.tileimpl.MiuiQSFactory\" :\n        \"com.android.systemui.qs.tileimpl.QSFactoryImpl\";\n\n    public final String flashFileMtk = \"/sys/class/flashlight_core/flashlight/torchbrightness\";\n    public final String flashFileTorch = \"/sys/class/leds/led:torch_0/brightness\";\n    public final String flashFileOther = \"/sys/class/leds/flashlight/brightness\";\n    public final String flashFileSwitch = \"/sys/class/leds/led:switch_0/brightness\";\n    public final String maxFile = \"/sys/class/leds/led:torch_0/max_brightness\";\n    public boolean isListening = false;\n\n    public boolean suGet;\n\n    @Override\n    public void init() {\n        super.init();\n    }\n\n    @Override\n    public Class<?> customQSFactory() {\n        return findClassIfExists(mQSFactoryClsName);\n    }\n\n    @Override\n    public Class<?> customClass() {\n        return findClassIfExists(\"com.android.systemui.qs.tiles.MiuiFlashlightTile\");\n    }\n\n    @Override\n    public String[] customTileProvider() {\n        String[] TileProvider = new String[3];\n        TileProvider[0] = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"flashlightTileProvider\" : \"mFlashlightTileProvider\";\n        TileProvider[1] = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"createTileInternal\" : \"interceptCreateTile\";\n        TileProvider[2] = \"createTile\";\n        return TileProvider;\n    }\n\n    @Override\n    public boolean needCustom() {\n        return false;\n    }\n\n    @Override\n    public boolean needAfter() {\n        return true;\n    }\n\n    @Override\n    public void tileClickAfter(XC_MethodHook.MethodHookParam param, String tileName) {\n    }\n\n\n    @Override\n    public ArrayMap<String, Integer> tileUpdateState(XC_MethodHook.MethodHookParam param, Class<?> mResourceIcon, String tileName) {\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        ContentObserver contentObserver;\n        // XposedLogUtils.logE(TAG, \"tileUpdateState: args: \" + param.args[1]);\n        if (param.args[1] != null) {\n            boolean enabled = (boolean) param.args[1];\n            Object flash = XposedHelpers.getObjectField(param.thisObject, \"flashlightController\");\n            if (enabled) {\n                if (getFlashLightEnabled(mContext) == 1 && !isListening) {\n                    setFlashLightEnabled(mContext, 0);\n                }\n                if (!isListening) listening(mContext, param, flash, isListening);\n                setFlashLightEnabled(mContext, 1);\n                // XposedLogUtils.logE(TAG, \"tileUpdateState: isListening1: \" + isListening);\n            } else if ((boolean) XposedHelpers.callMethod(flash, \"isEnabled\")) {\n                if (getFlashLightEnabled(mContext) == 1 && !isListening) {\n                    setFlashLightEnabled(mContext, 0);\n                }\n                if (!isListening) listening(mContext, param, flash, isListening);\n                setFlashLightEnabled(mContext, 1);\n                // XposedLogUtils.logE(TAG, \"tileUpdateState: isListening2: \" + isListening + \" call: \" + XposedHelpers.callMethod(flash, \"isEnabled\"));\n            } else {\n                setFlashLightEnabled(mContext, 0);\n                if (isListening) {\n                    listening(mContext, param, flash, isListening);\n                    contentObserver = (ContentObserver) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"tileListener\");\n                    if (contentObserver != null) {\n                        mContext.getContentResolver().unregisterContentObserver(contentObserver);\n                    }\n                }\n                // XposedLogUtils.logE(TAG, \"tileUpdateState: isListening3: \" + isListening);\n            }\n        }\n        return null;\n    }\n\n\n    public void listening(Context mContext, XC_MethodHook.MethodHookParam param, Object flash, boolean isListening) {\n        if (!isListening) {\n            ContentObserver contentObserver = new ContentObserver(new Handler(mContext.getMainLooper())) {\n                @Override\n                public void onChange(boolean selfChange, @Nullable Uri uri) {\n                    super.onChange(selfChange, uri);\n                    hookFlash(param.thisObject, flash, mContext, readFile());\n                    // XposedLogUtils.logE(TAG, \"listening: listening: selfChange: \" + selfChange + \" uri: \" + uri);\n                }\n            };\n            mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(\"flash_light_enabled\"), false, contentObserver);\n            XposedHelpers.setAdditionalInstanceField(param.thisObject, \"tileListener\", contentObserver);\n            this.isListening = true;\n        } else this.isListening = false;\n    }\n\n    public void hookFlash(Object o, Object flash, Context context, int max) {\n        if (!isAndroidU()) {\n            setBrightnessUtils(o, flash, context, max);\n            findAndHookMethod(\"com.android.systemui.controlcenter.policy.MiuiBrightnessController\",\n                \"lambda$onChanged$0\", boolean.class, float.class, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        // XposedLogUtils.logE(TAG, \"MiuiBrightnessController lambda$onChanged$0: \" + param.args[0] + \" 2: \" + param.args[1]);\n                        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                        int enabled = getFlashLightEnabled(mContext);\n                        // XposedLogUtils.logE(TAG, \"lambda$onChanged$0 enabled: \" + enabled);\n                        if (enabled == 1) {\n                            param.setResult(null);\n                        }\n                    }\n                }\n            );\n\n            findAndHookMethod(\"com.android.systemui.controlcenter.policy.MiuiBrightnessController$5\",\n                \"run\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        int enabled = getFlashLightEnabled(context);\n                        // XposedLogUtils.logE(TAG, \"MiuiBrightnessController$5 enabled: \" + enabled);\n                        if (enabled == 1) {\n                            // XposedLogUtils.logE(TAG, \"MiuiBrightnessController$5 run\");\n                            param.setResult(null);\n                        }\n                    }\n                }\n            );\n        } else {\n            setBrightnessUtils(o, flash, context, max);\n            findAndHookMethod(\"com.android.systemui.controlcenter.policy.MiuiBrightnessController$$ExternalSyntheticLambda0\",\n                \"run\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        if (getFlashLightEnabled(context) == 1) {\n                            // XposedLogUtils.logE(TAG, \"MiuiBrightnessController$$ExternalSyntheticLambda0 run\");\n                            param.setResult(null);\n                        }\n                    }\n                }\n            );\n            findAndHookMethod(\"com.android.systemui.controlcenter.policy.MiuiBrightnessController$2\",\n                \"run\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        if (getFlashLightEnabled(context) == 1) {\n                            // XposedLogUtils.logE(TAG, \"MiuiBrightnessController$2 run\");\n                            param.setResult(null);\n                        }\n                    }\n                }\n            );\n        }\n    }\n\n    public void setBrightnessUtils(Object o, Object flash, Context context, int maxPath) {\n        findAndHookMethod(\"com.android.systemui.controlcenter.policy.BrightnessUtils\",\n            \"convertGammaToLinearFloat\", int.class, float.class, float.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    if (getFlashLightEnabled(context) == 1) {\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat int 1: \" + param.args[0]);\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat float 2: \" + param.args[1]);\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat float 3: \" + param.args[2]);\n                        // XposedLogUtils.logE(TAG, \"convertGammaToLinearFloat int 1: \" + param.args[0]);\n                        // XposedLogUtils.logE(TAG, \"convertGammaToLinearFloat float 2: \" + param.args[1]);\n                        // XposedLogUtils.logE(TAG, \"convertGammaToLinearFloat float 3: \" + param.args[2]);\n                        float min = (float) param.args[1];\n                        float max = (float) param.args[2];\n                        if (min < 0.001f) {\n                            min = 0.00114514f;\n                        }\n                        min = Math.round(min * 500);\n                        max = Math.round(max * 500);\n                        float exp;\n                        Class<?> BrightnessUtils = XposedHelpers.findClass(\"com.android.systemui.controlcenter.policy.BrightnessUtils\", lpparam.classLoader);\n                        int GAMMA_SPACE_MAX = XposedHelpers.getStaticIntField(BrightnessUtils, \"GAMMA_SPACE_MAX\");\n                        float R = XposedHelpers.getStaticFloatField(BrightnessUtils, \"R\");\n                        float A = XposedHelpers.getStaticFloatField(BrightnessUtils, \"A\");\n                        float B = XposedHelpers.getStaticFloatField(BrightnessUtils, \"B\");\n                        float C = XposedHelpers.getStaticFloatField(BrightnessUtils, \"C\");\n                        float norm = MathUtils.norm(0.0f, GAMMA_SPACE_MAX, (int) param.args[0]);\n                        if (norm <= R) {\n                            exp = MathUtils.sq(norm / R);\n                        } else {\n                            exp = MathUtils.exp((norm - C) / A) + B;\n                        }\n                        if (min < 10) {\n                            min = 12;\n                        }\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat R: \" + R + \" A: \" + A + \" B: \" + B + \" C: \" + C);\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat exp: \" + exp);\n                        float end = MathUtils.lerpNew(min, max, (MathUtils.constrain(exp, 0.0f, 12.0f) / 12.0f));\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat min: \" + min);\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat max: \" + max);\n                        // AndroidLogUtils.deLogI(\"FlashLight\", \"convertGammaToLinearFloat end: \" + end);\n                        int i = Math.round(end);\n                        if (i != 0) {\n                            if (maxPath != -1 && i > maxPath) {\n                                i = maxPath;\n                            }\n                            // XposedLogUtils.logE(TAG, \"convertGammaToLinearFloat i: \" + i);\n                            writeFile(i);\n                        } else {\n                            XposedHelpers.callMethod(flash, \"setFlashlight\", false);\n                            XposedHelpers.callMethod(o, \"refreshState\");\n                        }\n                        param.setResult(end);\n                    }\n                }\n            }\n        );\n    }\n\n    public int getFlashLightEnabled(Context context) {\n        try {\n            return Settings.System.getInt(context.getContentResolver(), \"flash_light_enabled\");\n        } catch (Settings.SettingNotFoundException e) {\n            XposedLogUtils.logE(TAG, \"No Found flash_light_enabled: \" + e);\n            return -1;\n        }\n    }\n\n    public void setFlashLightEnabled(Context context, int set) {\n        Settings.System.putInt(context.getContentResolver(), \"flash_light_enabled\", set);\n    }\n\n    public int readFile() {\n        String line;\n        BufferedReader reader = null;\n        StringBuilder builder = null;\n        File file = new File(maxFile);\n        if (file.exists()) {\n            try {\n                reader = new BufferedReader(new FileReader(maxFile));\n                builder = new StringBuilder();\n                while ((line = reader.readLine()) != null) {\n                    builder.append(line);\n                }\n            } catch (IOException e) {\n                XposedLogUtils.logE(TAG, \"Error to read: \" + maxFile, e);\n            } finally {\n                try {\n                    if (reader != null) {\n                        reader.close();\n                    }\n                } catch (IOException e) {\n                    XposedLogUtils.logE(TAG, \"Close reader error: \", e);\n                }\n            }\n        } else {\n            XposedLogUtils.logE(TAG, \"Not Found FlashLight File: \" + maxFile);\n        }\n\n        if (builder != null) {\n            return Integer.parseInt(builder.toString());\n        }\n        return -1;\n    }\n\n    public void writeFile(int flashInt) {\n        File file = new File(flashFileMtk);\n        if (file.exists()) {\n            writeFileModule(flashFileMtk, flashInt);\n        } else {\n            File file1 = new File(flashFileTorch);\n            File file2 = new File(flashFileSwitch);\n            File file3 = new File(flashFileOther);\n            if (file1.exists()) {\n                writeFileModule(flashFileTorch, flashInt);\n                if (file3.exists()) {\n                    writeFileModule(flashFileOther, flashInt);\n                }\n            } else\n                XposedLogUtils.logE(TAG, \"Not Found FlashLight File: \" + flashFileMtk + \" And: \" + flashFileTorch);\n            // if (file1.exists() && file2.exists()) {\n            //     writeFileModule(flashFileTorch, flashInt);\n            //     writeFileModule(flashFileSwitch, 1);\n            //     writeFileModule(flashFileSwitch, 0);\n            // } else if (file1.exists()) {\n            //     writeFileModule(flashFileTorch, flashInt);\n            // } else\n            //     XposedLogUtils.logE(TAG, \"Not Found FlashLight File: \" + flashFileMtk + \" And: \" + flashFileTorch);\n        }\n    }\n\n    public void writeFileModule(String filePath, int flashInt) {\n        try (FileWriter writer = new FileWriter(filePath, false)) {\n            writer.write(Integer.toString(flashInt));\n            writer.flush();\n        } catch (IOException e) {\n            if (!suGet) {\n                ShellUtils.execCommand(\"chmod 777 \" + filePath, true, false);\n                suGet = true;\n            }\n            try (FileWriter writer = new FileWriter(filePath, false)) {\n                writer.write(Integer.toString(flashInt));\n                writer.flush();\n            } catch (IOException f) {\n                XposedLogUtils.logE(TAG, \"Write FlashLight File Error: \" + f + \" File Path: \" + filePath);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/GmsTile.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.os.Build;\nimport android.util.ArrayMap;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.utils.TileUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XC_MethodHook.MethodHookParam;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class GmsTile extends TileUtils {\n    public final String CheckGms = \"com.google.android.gms\";\n    public final String mQSFactoryClsName = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"com.android.systemui.qs.tileimpl.MiuiQSFactory\" :\n        \"com.android.systemui.qs.tileimpl.QSFactoryInjectorImpl\";\n    public final String[] GmsAppsSystem = new String[]{\n        \"com.google.android.gms\",\n        \"com.google.android.gsf\",\n        \"com.android.vending\",\n        \"com.google.android.syncadapters.contacts\",\n        \"com.google.android.backuptransport\",\n        \"com.google.android.onetimeinitializer\",\n        \"com.google.android.partnersetup\",\n        \"com.google.android.configupdater\",\n        \"com.google.android.ext.shared\",\n        \"com.google.android.printservice.recommendation\"};\n\n    @Override\n    public void init() {\n        super.init();\n    }\n\n    @Override\n    public Class<?> customQSFactory() {\n        return findClassIfExists(mQSFactoryClsName);\n    }\n\n    @Override\n    public Class<?> customClass() {\n        return findClassIfExists(\"com.android.systemui.qs.tiles.ScreenLockTile\");\n    }\n\n    @Override\n    public String[] customTileProvider() {\n        String[] TileProvider = new String[3];\n        TileProvider[0] = \"screenLockTileProvider\";\n        TileProvider[1] = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"createTileInternal\" : \"interceptCreateTile\";\n        TileProvider[2] = \"createTile\";\n        return TileProvider;\n    }\n\n    @Override\n    public boolean needCustom() {\n        return true;\n    }\n\n    @Override\n    public String customName() {\n        return \"custom_GMS\";\n    }\n\n    @Override\n    public int customValue() {\n        return R.string.security_center_gms_open;\n    }\n\n    @Override\n    public boolean needAfter() {\n        return false;\n    }\n\n    @Override\n    public void tileCheck(MethodHookParam param, String tileName) {\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        PackageManager packageManager = mContext.getPackageManager();\n        try {\n            packageManager.getPackageInfo(CheckGms, PackageManager.GET_ACTIVITIES);\n            param.setResult(true);\n        } catch (PackageManager.NameNotFoundException e) {\n            XposedLogUtils.logE(TAG, \"Not Find GMS App: \" + e);\n            param.setResult(false);\n        }\n    }\n\n    @Override\n    public Intent tileHandleLongClick(MethodHookParam param, String tileName) {\n        // 长按跳转谷歌基础服务页面\n        Intent intent = new Intent(Intent.ACTION_MAIN);\n        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);\n        intent.setComponent(new ComponentName(\"com.miui.securitycenter\", \"com.miui.googlebase.ui.GmsCoreSettings\"));\n        return intent;\n    }\n\n    @Override\n    public void tileClick(MethodHookParam param, String tileName) {\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        PackageManager packageManager = mContext.getPackageManager();\n        int End = packageManager.getApplicationEnabledSetting(CheckGms);\n        if (End == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {\n            for (String GmsAppsSystem : GmsAppsSystem) {\n                try {\n                    packageManager.getPackageInfo(GmsAppsSystem, PackageManager.GET_ACTIVITIES);\n                    packageManager.setApplicationEnabledSetting(GmsAppsSystem, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);\n                    XposedLogUtils.logI(\"To Enabled Gms App:\" + GmsAppsSystem);\n                } catch (PackageManager.NameNotFoundException e) {\n                    XposedLogUtils.logI(\"Don't have Gms app :\" + GmsAppsSystem);\n                }\n            }\n            XposedHelpers.callMethod(param.thisObject, \"refreshState\");\n        } else if (End == PackageManager.COMPONENT_ENABLED_STATE_ENABLED || End == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {\n            for (String GmsAppsSystem : GmsAppsSystem) {\n                try {\n                    packageManager.getPackageInfo(GmsAppsSystem, PackageManager.GET_ACTIVITIES);\n                    packageManager.setApplicationEnabledSetting(GmsAppsSystem, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);\n                    XposedLogUtils.logI(\"To Disabled Gms App:\" + GmsAppsSystem);\n                } catch (PackageManager.NameNotFoundException e) {\n                    XposedLogUtils.logI(\"Don't have Gms app :\" + GmsAppsSystem);\n                }\n            }\n            XposedHelpers.callMethod(param.thisObject, \"refreshState\");\n        }\n\n    }\n\n    @Override\n    public ArrayMap<String, Integer> tileUpdateState(MethodHookParam param, Class<?> mResourceIcon, String tileName) {\n        boolean isEnable;\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        PackageManager packageManager = mContext.getPackageManager();\n        int End = packageManager.getApplicationEnabledSetting(CheckGms);\n        isEnable = End == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;\n        ArrayMap<String, Integer> tileResMap = new ArrayMap<>();\n        tileResMap.put(\"custom_GMS_Enable\", isEnable ? 1 : 0);\n        tileResMap.put(\"custom_GMS_ON\", mResHook.addResource(\"ic_control_center_gms_toggle_on\", R.drawable.ic_control_center_gms_toggle_on));\n        tileResMap.put(\"custom_GMS_OFF\", mResHook.addResource(\"ic_control_center_gms_toggle_off\", R.drawable.ic_control_center_gms_toggle_off));\n        return tileResMap;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/MuteVisibleNotifications.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport android.content.Context;\nimport android.os.PowerManager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class MuteVisibleNotifications extends BaseHook {\n\n    @Override\n    public void init() {\n        Helpers.hookAllMethods(\"com.android.systemui.statusbar.notification.policy.NotificationAlertController\", lpparam.classLoader, \"buzzBeepBlink\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                    PowerManager powerMgr = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);\n                    if (powerMgr.isInteractive()) {\n                        param.setResult(null);\n                    }\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/NotificationWeather.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.annotation.SuppressLint\nimport android.content.ComponentName\nimport android.content.Intent\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport android.widget.Toast\nimport androidx.constraintlayout.widget.ConstraintLayout\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DisplayUtils\nimport com.sevtinge.cemiuiler.utils.DisplayUtils.dip2px\nimport com.sevtinge.cemiuiler.utils.SystemProperties\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.setObjectField\nimport com.sevtinge.cemiuiler.view.WeatherView\n\n\nobject NotificationWeather : BaseHook() {\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        var mWeatherView: TextView? = null\n        var mConstraintLayout: ConstraintLayout? = null\n        val isDisplayCity = mPrefsMap.getBoolean(\"system_ui_control_center_show_weather_city\")\n        loadClass(\"com.android.systemui.qs.MiuiNotificationHeaderView\").methodFinder().first {\n            name == \"onFinishInflate\"\n        }.createHook {\n            after { param ->\n                val viewGroup = param.thisObject as ViewGroup\n                val context = viewGroup.context\n\n                // MIUI编译时间大于 2022-03-12 00:00:00 且为内测版\n                if (SystemProperties[context, \"ro.build.date.utc\"].toInt() >= 1647014400 &&\n                    !SystemProperties[context, \"ro.build.version.incremental\"].endsWith(\"XM\")\n                ) {\n                    // 获取原组件\n                    val bigTimeId =\n                        context.resources.getIdentifier(\"big_time\", \"id\", context.packageName)\n                    val bigTime: TextView = viewGroup.findViewById(bigTimeId)\n\n                    val dateTimeId =\n                        context.resources.getIdentifier(\"date_time\", \"id\", context.packageName)\n                    val dateTime: TextView = viewGroup.findViewById(dateTimeId)\n\n                    // 创建新布局\n                    val mConstraintLayoutLp = LinearLayout.LayoutParams(\n                        LinearLayout.LayoutParams.MATCH_PARENT,\n                        LinearLayout.LayoutParams.WRAP_CONTENT\n                    ).also {\n                        it.topMargin = context.resources.getDimensionPixelSize(\n                            context.resources.getIdentifier(\n                                \"qs_control_header_tiles_margin_top\",\n                                \"dimen\",\n                                context.packageName\n                            )\n                        )\n                    }\n\n                    mConstraintLayout =\n                        ConstraintLayout(context).also { it.layoutParams = mConstraintLayoutLp }\n\n                    (bigTime.parent as ViewGroup).addView(mConstraintLayout, 0)\n\n\n                    // 从原布局中删除组件\n                    (bigTime.parent as ViewGroup).removeView(bigTime)\n                    (dateTime.parent as ViewGroup).removeView(dateTime)\n\n\n                    // 添加组件至新布局\n                    mConstraintLayout!!.addView(bigTime)\n                    mConstraintLayout!!.addView(dateTime)\n\n                    // 组件属性\n                    val dateTimeLp = ConstraintLayout.LayoutParams(\n                        ConstraintLayout.LayoutParams.WRAP_CONTENT,\n                        ConstraintLayout.LayoutParams.WRAP_CONTENT\n                    ).also {\n                        it.startToEnd = bigTimeId\n                        it.bottomToBottom = 0\n                        it.marginStart = context.resources.getDimensionPixelSize(\n                            context.resources.getIdentifier(\n                                \"notification_panel_time_date_space\",\n                                \"dimen\",\n                                context.packageName\n                            )\n                        )\n                        it.bottomMargin = dip2px(context, 5f)\n                    }\n                    dateTime.layoutParams = dateTimeLp\n\n\n                    // 创建天气组件\n                    mWeatherView = WeatherView(context, isDisplayCity).apply {\n                        setTextAppearance(\n                            context.resources.getIdentifier(\n                                \"TextAppearance.QSControl.Date\",\n                                \"style\",\n                                context.packageName\n                            )\n                        )\n\n                    }\n                    mConstraintLayout!!.addView(mWeatherView)\n\n                    val mweatherviewLp = ConstraintLayout.LayoutParams(\n                        ConstraintLayout.LayoutParams.WRAP_CONTENT,\n                        ConstraintLayout.LayoutParams.WRAP_CONTENT\n                    ).also {\n                        it.startToEnd = bigTimeId\n                        it.bottomToTop = dateTimeId\n                        it.marginStart = context.resources.getDimensionPixelSize(\n                            context.resources.getIdentifier(\n                                \"notification_panel_time_date_space\",\n                                \"dimen\",\n                                context.packageName\n                            )\n                        )\n                    }\n\n                    (mWeatherView as WeatherView).layoutParams = mweatherviewLp\n\n                } else {\n                    val layoutParam =\n                        loadClass(\"androidx.constraintlayout.widget.ConstraintLayout\\$LayoutParams\").getConstructor(\n                            Int::class.java,\n                            Int::class.java\n                        ).newInstance(\n                            ViewGroup.LayoutParams.WRAP_CONTENT,\n                            ViewGroup.LayoutParams.WRAP_CONTENT\n                        ) as ViewGroup.MarginLayoutParams\n                    layoutParam.setObjectField(\n                        \"bottomToTop\",\n                        context.resources.getIdentifier(\"date_time\", \"id\", context.packageName)\n                    )\n                    layoutParam.setObjectField(\n                        \"startToEnd\",\n                        context.resources.getIdentifier(\"big_time\", \"id\", context.packageName)\n                    )\n                    layoutParam.marginStart = context.resources.getDimensionPixelSize(\n                        context.resources.getIdentifier(\n                            \"notification_panel_time_date_space\",\n                            \"dimen\",\n                            context.packageName\n                        )\n                    )\n                    mWeatherView = WeatherView(context, isDisplayCity).apply {\n                        setTextAppearance(\n                            context.resources.getIdentifier(\n                                \"TextAppearance.QSControl.Date\",\n                                \"style\",\n                                context.packageName\n                            )\n                        )\n                        layoutParams = layoutParam\n                    }\n                    viewGroup.addView(mWeatherView)\n                }\n\n                (mWeatherView as WeatherView).setOnClickListener {\n                    try {\n                        val intent = Intent().apply {\n                            flags = Intent.FLAG_ACTIVITY_NEW_TASK\n                            component = ComponentName(\n                                \"com.miui.weather2\",\n                                \"com.miui.weather2.ActivityWeatherMain\"\n                            )\n                        }\n                        context.startActivity(intent)\n                    } catch (e: Exception) {\n                        Toast.makeText(context, \"启动失败\", Toast.LENGTH_LONG).show()\n                    }\n                }\n            }\n        }\n\n        loadClass(\"com.android.systemui.qs.MiuiNotificationHeaderView\").methodFinder().first {\n            name == \"updateLayout\"\n        }.createHook {\n            after {\n                val viewGroup = it.thisObject as ViewGroup\n                val context = viewGroup.context\n                val mOrientation = viewGroup.getObjectField(\"mOrientation\") as Int\n                // MIUI编译时间大于 2022-03-12 00:00:00 且为内测版\n                if (SystemProperties[context, \"ro.build.date.utc\"].toInt() >= 1647014400 && !SystemProperties[context, \"ro.build.version.incremental\"].endsWith(\n                        \"DEV\"\n                    ) &&\n                    !SystemProperties[context, \"ro.build.version.incremental\"].endsWith(\"XM\")\n                ) {\n                    if (mOrientation == 1) {\n                        mConstraintLayout!!.visibility = View.VISIBLE\n                    } else {\n                        mConstraintLayout!!.visibility = View.GONE\n                    }\n                } else {\n                    if (mOrientation == 1) {\n                        mWeatherView!!.visibility = View.VISIBLE\n                    } else {\n                        mWeatherView!!.visibility = View.GONE\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/NotificationWeatherNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.annotation.SuppressLint\nimport android.content.pm.ApplicationInfo\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.invokeMethod\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidT\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\nimport com.sevtinge.cemiuiler.utils.getObjectFieldOrNullAs\nimport com.sevtinge.cemiuiler.view.WeatherData\n\n\n@SuppressLint(\"StaticFieldLeak\")\nobject NotificationWeatherNew : BaseHook() {\n    lateinit var weather: WeatherData\n    var clockId: Int = -2\n\n    @SuppressLint(\"DiscouragedApi\", \"ClickableViewAccessibility\")\n    override fun init() {\n        val mControlCenterDateViewClass =\n            loadClass(\"com.android.systemui.controlcenter.phone.widget.ControlCenterDateView\")\n\n        mControlCenterDateViewClass.methodFinder().findSuper().first {\n            name == \"onDetachedFromWindow\"\n        }.createHook {\n            before {\n                if ((it.thisObject as TextView).id == clockId && this@NotificationWeatherNew::weather.isInitialized) {\n                    weather.onDetachedFromWindow()\n                }\n            }\n        }\n        mControlCenterDateViewClass.methodFinder().findSuper().first {\n            name == \"setText\"\n        }.createHook {\n            before {\n                val time = it.args[0]?.toString()\n                val view = it.thisObject as TextView\n                if (view.id == clockId && time != null && this@NotificationWeatherNew::weather.isInitialized) {\n                    // val layout = view.layoutParams as ViewGroup.MarginLayoutParams\n                    // val y = view.height / 2\n                    // layout.topMargin = -y\n                    it.args[0] = \"${weather.weatherData}$time\"\n                }\n            }\n        }\n\n        val pluginLoaderClass =\n            if (isAndroidU()) \"com.android.systemui.shared.plugins.PluginInstance\\$Factory\\$\\$ExternalSyntheticLambda0\"\n            else if (isAndroidT()) \"com.android.systemui.shared.plugins.PluginInstance\\$Factory\"\n            else \"com.android.systemui.shared.plugins.PluginManagerImpl\"\n\n        var appInfo: ApplicationInfo?\n\n        if (isAndroidU()) {\n            hookAllMethods(\"com.android.systemui.shared.plugins.PluginInstance\\$Factory\",\n                \"create\", object : MethodHook() {\n                    override fun before(param: MethodHookParam) {\n                        appInfo = param.args[1] as ApplicationInfo\n                        loadClass(pluginLoaderClass, lpparam.classLoader).methodFinder().first {\n                            name == \"get\"\n                        }.createHook {\n                            after { getClassLoader ->\n                                if (appInfo!!.packageName == \"miui.systemui.plugin\") {\n                                    val classLoader = getClassLoader.result as ClassLoader\n                                    mainPanelHeader(classLoader)\n                                }\n                            }\n                        }\n                    }\n                }\n            )\n        } else {\n            loadClass(pluginLoaderClass, lpparam.classLoader).methodFinder().first {\n                name == \"getClassLoader\"\n            }.createHook {\n                after { getClassLoader ->\n                    appInfo = getClassLoader.args[0] as ApplicationInfo\n                    if (appInfo!!.packageName == \"miui.systemui.plugin\") {\n                        val classLoader = getClassLoader.result as ClassLoader\n                        mainPanelHeader(classLoader)\n                    }\n                }\n            }\n        }\n    }\n\n    fun mainPanelHeader(pluginClassLoader: ClassLoader) {\n        val isDisplayCity = mPrefsMap.getBoolean(\"system_ui_control_center_show_weather_city\")\n        loadClass(\n            \"miui.systemui.controlcenter.windowview.MainPanelHeaderController\",\n            pluginClassLoader\n        ).methodFinder().first {\n            name == \"addClockViews\"\n        }.createHook {\n            after {\n                val dateView =\n                    it.thisObject.getObjectFieldOrNullAs<TextView>(\"dateView\")!!\n                clockId = dateView.id\n                weather = WeatherData(dateView.context, isDisplayCity)\n                weather.callBacks = {\n                    dateView.invokeMethod(\"updateTime\")\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/NotificationWeatherOld.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.annotation.SuppressLint\nimport android.content.ComponentName\nimport android.content.Intent\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.setObjectField\nimport com.sevtinge.cemiuiler.view.WeatherView\n\nobject NotificationWeatherOld : BaseHook() {\n\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        var mWeatherView: TextView?\n        val isDisplayCity = mPrefsMap.getBoolean(\"system_ui_control_center_show_weather_city\")\n        loadClass(\"com.android.systemui.qs.MiuiQSHeaderView\").methodFinder().first {\n            name == \"onFinishInflate\"\n        }.createHook {\n            after {\n                val viewGroup = it.thisObject as ViewGroup\n                val context = viewGroup.context\n                val layoutParam =\n                    loadClass(\"androidx.constraintlayout.widget.ConstraintLayout\\$LayoutParams\")\n                        .getConstructor(Int::class.java, Int::class.java)\n                        .newInstance(\n                            ViewGroup.LayoutParams.WRAP_CONTENT,\n                            ViewGroup.LayoutParams.WRAP_CONTENT\n                        ) as ViewGroup.MarginLayoutParams\n\n                layoutParam.setObjectField(\n                    \"endToStart\",\n                    context.resources.getIdentifier(\n                        \"notification_shade_shortcut\",\n                        \"id\",\n                        context.packageName\n                    )\n                )\n                layoutParam.setObjectField(\n                    \"topToTop\",\n                    context.resources.getIdentifier(\n                        \"notification_shade_shortcut\",\n                        \"id\",\n                        context.packageName\n                    )\n                )\n                layoutParam.setObjectField(\n                    \"bottomToBottom\",\n                    context.resources.getIdentifier(\n                        \"notification_shade_shortcut\",\n                        \"id\",\n                        context.packageName\n                    )\n                )\n\n                mWeatherView = WeatherView(context, isDisplayCity).apply {\n                    setTextAppearance(\n                        context.resources.getIdentifier(\n                            \"TextAppearance.StatusBar.Expanded.Clock.QuickSettingDate\",\n                            \"style\",\n                            context.packageName\n                        )\n                    )\n                    layoutParams = layoutParam\n                }\n\n\n                viewGroup.addView(mWeatherView)\n                (mWeatherView as WeatherView).setOnClickListener {\n                    try {\n                        val intent = Intent().apply {\n                            flags = Intent.FLAG_ACTIVITY_NEW_TASK\n                            component = ComponentName(\n                                \"com.miui.weather2\",\n                                \"com.miui.weather2.ActivityWeatherMain\"\n                            )\n                        }\n                        context.startActivity(intent)\n                    } catch (e: Exception) {\n                        XposedLogUtils.logE(TAG, e)\n                    }\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/QQSGrid.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.content.res.Configuration\nimport android.view.ViewGroup\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass QQSGrid : BaseHook() {\n    override fun init() {\n        val cols = mPrefsMap.getInt(\"system_control_center_old_qs_grid_columns\", 5);\n        val colsHorizontal = mPrefsMap.getInt(\"system_control_center_old_qs_grid_columns_horizontal\", 6);\n\n        loadClass(\"com.android.systemui.qs.MiuiQuickQSPanel\").methodFinder().first {\n                name == \"setMaxTiles\" && parameterCount == 1\n            }.createHook {\n                before {\n                    val viewGroup = it.thisObject as ViewGroup\n                    val mConfiguration: Configuration = viewGroup.context.resources.configuration\n                    if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n                        it.args[0] = cols\n                    } else {\n                        it.args[0] = colsHorizontal\n                    }\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/QQSGridOld.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class QQSGridOld extends BaseHook {\n    @Override\n    public void init() {\n        int cols = mPrefsMap.getInt(\"system_control_center_old_qs_grid_column\", 2);\n        int colsResId = switch (cols) {\n            case 3 -> R.integer.quick_quick_settings_num_rows_3;\n            case 4 -> R.integer.quick_quick_settings_num_rows_4;\n            case 5 -> R.integer.quick_quick_settings_num_rows_5;\n            case 6 -> R.integer.quick_quick_settings_num_rows_6;\n            case 7 -> R.integer.quick_quick_settings_num_rows_7;\n            default -> R.integer.quick_quick_settings_num_rows_5;\n        };\n        mResHook.setResReplacement(\"com.android.systemui\", \"integer\", \"quick_settings_qqs_count\", colsResId);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/QSControlDetailBackgroundAlpha.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.graphics.drawable.Drawable\nimport android.view.View\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.HookUtils\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.logW\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\nimport de.robv.android.xposed.XposedHelpers\n\nobject QSControlDetailBackgroundAlpha : BaseHook() {\n    override fun init() {\n        val qSControlDetailBackgroundAlpha =\n            mPrefsMap.getInt(\"system_ui_control_center_control_detail_background_alpha\", 255)\n        val qSControlDetailClass = findClassIfExists(\n            \"com.android.systemui.controlcenter.phone.detail.QSControlDetail\"\n        )\n        if (qSControlDetailClass != null) {\n            XposedHelpers.findAndHookMethod(\n                qSControlDetailClass,\n                \"updateBackground\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val mDetailContainer =\n                            HookUtils.getValueByField(param.thisObject, \"mDetailContainer\") as View\n                        if (mDetailContainer.background != null) {\n                            val smoothRoundDrawable = mDetailContainer.background\n                            smoothRoundDrawable.alpha = qSControlDetailBackgroundAlpha\n                        }\n                    }\n                })\n        }\n        val modalQSControlDetailClass = findClassIfExists(\n            \"com.android.systemui.statusbar.notification.modal.ModalQSControlDetail\"\n        )\n        if (modalQSControlDetailClass != null) {\n            XposedHelpers.findAndHookMethod(\n                modalQSControlDetailClass,\n                \"updateBackground\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val mDetailContainer = HookUtils.getValueByField(param.thisObject, \"mDetailContainer\") as View\n                        if (mDetailContainer.background != null) {\n                            val smoothRoundDrawable = mDetailContainer.background\n                            smoothRoundDrawable.alpha = qSControlDetailBackgroundAlpha\n                        }\n                    }\n                })\n        }\n\n        hookClassInPlugin { classLoader ->\n            try {\n                val smoothRoundDrawableClass = XposedHelpers.callMethod(\n                    classLoader,\n                    \"loadClass\",\n                    \"miui.systemui.widget.SmoothRoundDrawable\"\n                ) ?: return@hookClassInPlugin\n                XposedBridge.hookAllMethods(\n                    smoothRoundDrawableClass as Class<*>,\n                    \"inflate\",\n                    object : XC_MethodHook() {\n                        override fun afterHookedMethod(param: MethodHookParam) {\n                            try {\n                                val currentDrawable = param.thisObject as Drawable\n                                currentDrawable.alpha = qSControlDetailBackgroundAlpha\n                            } catch (e: Throwable) {\n                                // Do Nothings.\n                                logW(TAG, e)\n                            }\n                        }\n                    })\n            } catch (e: Throwable) {\n                logW(TAG, e)\n            }\n        }\n    }\n\n    private fun hookClassInPlugin(afterGetClassLoader: (classLoader: ClassLoader) -> Unit) {\n        val pluginHandlerClass = findClassIfExists(\n            \"com.android.systemui.shared.plugins.PluginInstanceManager\\$PluginHandler\"\n        )\n        if (pluginHandlerClass != null) {\n            XposedBridge.hookAllMethods(\n                pluginHandlerClass,\n                \"handleLoadPlugin\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val componentName = param.args[0]\n                        val className =\n                            XposedHelpers.callMethod(componentName, \"getClassName\") as String\n                        if (className != \"miui.systemui.volume.VolumeDialogPlugin\") {\n                            return\n                        }\n                        try {\n                            val pluginContextWrapper =\n                                HookUtils.getValueByField(param.result ?: return, \"mPluginContext\") ?: return\n                            val classLoader = XposedHelpers.callMethod(\n                                pluginContextWrapper,\n                                \"getClassLoader\"\n                            ) as ClassLoader\n                            afterGetClassLoader(classLoader)\n                        } catch (e: Throwable) {\n                            // Do Nothings.\n                            logW(TAG, e)\n                        }\n                    }\n                })\n            return\n        }\n\n        val pluginActionManagerClass = findClassIfExists(\n            \"com.android.systemui.shared.plugins.PluginActionManager\"\n        )\n        if (pluginActionManagerClass != null) {\n            XposedBridge.hookAllMethods(\n                pluginActionManagerClass,\n                \"loadPluginComponent\",\n                object : XC_MethodHook() {\n                    override fun afterHookedMethod(param: MethodHookParam) {\n                        val componentName = param.args[0]\n                        val className =\n                            XposedHelpers.callMethod(componentName, \"getClassName\") as String\n                        if (className != \"miui.systemui.volume.VolumeDialogPlugin\") {\n                            return\n                        }\n                        try {\n                            val pluginContextWrapper =\n                                HookUtils.getValueByField(param.result ?: return, \"mPluginContext\")\n                                    ?: return\n                            val classLoader = XposedHelpers.callMethod(\n                                pluginContextWrapper,\n                                \"getClassLoader\"\n                            ) as ClassLoader\n                            afterGetClassLoader(classLoader)\n                        } catch (e: Throwable) {\n                            // Do Nothings.\n                            logW(TAG, e)\n                        }\n                    }\n                })\n            return\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/QSGrid.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.content.res.Configuration\nimport android.view.View\nimport android.view.ViewGroup\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nimport de.robv.android.xposed.XposedHelpers\n\nclass QSGrid : BaseHook() {\n    override fun init() {\n        val cols = mPrefsMap.getInt(\"system_control_center_old_qs_columns\", 4)\n        val colsHorizontal = mPrefsMap.getInt(\"system_control_center_old_qs_columns_horizontal\", 5)\n        val rows = mPrefsMap.getInt(\"system_control_center_old_qs_rows\", 3)\n        val rowsHorizontal = mPrefsMap.getInt(\"system_control_center_old_qs_rows_horizontal\", 2)\n\n        loadClass(\"com.android.systemui.qs.MiuiTileLayout\").methodFinder().first {\n                name == \"updateColumns\"\n            }.createHook {\n                after {\n                    val viewGroup = it.thisObject as ViewGroup\n                    val mConfiguration: Configuration = viewGroup.context.resources.configuration\n                    if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n                        XposedHelpers.setObjectField (\n                            it.thisObject,\n                            \"mColumns\",\n                            cols\n                        )\n                    } else {\n                        XposedHelpers.setObjectField (\n                            it.thisObject,\n                            \"mColumns\",\n                            colsHorizontal\n                        )\n                    }\n                }\n            }\n\n        loadClass(\"com.android.systemui.qs.MiuiTileLayout\").methodFinder().first {\n                name == \"updateResources\"\n            }.createHook {\n                after {\n                    val viewGroup = it.thisObject as ViewGroup\n                    val mConfiguration: Configuration = viewGroup.context.resources.configuration\n                    if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n                        XposedHelpers.setObjectField (\n                            it.thisObject,\n                            \"mMaxAllowedRows\",\n                            rows\n                        )\n                    } else {\n                        XposedHelpers.setObjectField (\n                            it.thisObject,\n                            \"mMaxAllowedRows\",\n                            rowsHorizontal\n                        )\n                    }\n                    viewGroup.requestLayout()\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/QSGridLabels.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.res.Configuration;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport java.util.ArrayList;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class QSGridLabels extends BaseHook {\n    @Override\n    public void init() {\n        Helpers.hookAllMethods(\"com.android.systemui.qs.MiuiTileLayout\", lpparam.classLoader, \"addTile\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                updateLabelsVisibility(param.args[0], XposedHelpers.getIntField(param.thisObject, \"mRows\"), ((ViewGroup) param.thisObject).getResources().getConfiguration().orientation);\n            }\n        });\n\n        Helpers.hookAllMethods(\"com.android.systemui.qs.MiuiPagedTileLayout\", lpparam.classLoader, \"addTile\", new MethodHook() {\n            @Override\n            @SuppressWarnings(\"unchecked\")\n            protected void before(MethodHookParam param) throws Throwable {\n                ArrayList<Object> mPages = (ArrayList<Object>) XposedHelpers.getObjectField(param.thisObject, \"mPages\");\n                if (mPages == null) return;\n                int mRows = 0;\n                if (mPages.size() > 0) mRows = XposedHelpers.getIntField(mPages.get(0), \"mRows\");\n                updateLabelsVisibility(param.args[0], mRows, ((ViewGroup) param.thisObject).getResources().getConfiguration().orientation);\n            }\n        });\n\n        int rows = isMoreAndroidVersion(33)\n            ? mPrefsMap.getInt(\"system_control_center_old_qs_rows\", 1)\n            : mPrefsMap.getInt(\"system_control_center_old_qs_row\", 1);\n        if (rows == 4) {\n            Helpers.findAndHookMethod(\"com.android.systemui.qs.tileimpl.MiuiQSTileView\", lpparam.classLoader, \"createLabel\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    ViewGroup mLabelContainer = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, \"mLabelContainer\");\n                    if (mLabelContainer != null) mLabelContainer.setPadding(\n                        mLabelContainer.getPaddingLeft(),\n                        Math.round(mLabelContainer.getResources().getDisplayMetrics().density * 2),\n                        mLabelContainer.getPaddingRight(),\n                        mLabelContainer.getPaddingBottom()\n                    );\n                }\n            });\n        }\n    }\n\n    private static void updateLabelsVisibility(Object mRecord, int mRows, int orientation) {\n        if (mRecord == null) return;\n        Object tileView = XposedHelpers.getObjectField(mRecord, \"tileView\");\n        if (tileView != null) {\n            ViewGroup mLabelContainer = null;\n            try {\n                mLabelContainer = (ViewGroup) XposedHelpers.getObjectField(tileView, \"mLabelContainer\");\n            } catch (Throwable ignore) {\n            }\n\n            if (mLabelContainer != null) {\n                if (isMoreAndroidVersion(33)) {\n                    mLabelContainer.setVisibility(\n                        mPrefsMap.getBoolean(\"system_control_center_qs_tile_label\") ? View.GONE : View.VISIBLE\n                    );\n                } else {\n                    mLabelContainer.setVisibility(\n                        mPrefsMap.getBoolean(\"system_control_center_qs_tile_label\") ||\n                            orientation == Configuration.ORIENTATION_PORTRAIT && mRows >= 5 ||\n                            orientation == Configuration.ORIENTATION_LANDSCAPE && mRows >= 3 ? View.GONE : View.VISIBLE\n                    );\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/QSGridOld.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class QSGridOld extends BaseHook {\n\n    @Override\n    public void init() {\n        int cols = mPrefsMap.getInt(\"system_control_center_old_qs_column\", 2);\n        int rows = mPrefsMap.getInt(\"system_control_center_old_qs_row\", 1);\n        int colsRes = R.integer.quick_settings_num_columns_3;\n        int rowsRes = R.integer.quick_settings_num_rows_4;\n\n        switch (cols) {\n            case 3 -> colsRes = R.integer.quick_settings_num_columns_3;\n            case 4 -> colsRes = R.integer.quick_settings_num_columns_4;\n            case 5 -> colsRes = R.integer.quick_settings_num_columns_5;\n            case 6 -> colsRes = R.integer.quick_settings_num_columns_6;\n            case 7 -> colsRes = R.integer.quick_settings_num_columns_7;\n        }\n\n        switch (rows) {\n            case 2 -> rowsRes = R.integer.quick_settings_num_rows_2;\n            case 3 -> rowsRes = R.integer.quick_settings_num_rows_3;\n            case 4 -> rowsRes = R.integer.quick_settings_num_rows_4;\n            case 5 -> rowsRes = R.integer.quick_settings_num_rows_5;\n        }\n\n        if (cols > 2)\n            mResHook.setResReplacement(\"com.android.systemui\", \"integer\", \"quick_settings_num_columns\", colsRes);\n        if (rows > 1) mResHook.setResReplacement(\"com.android.systemui\", \"integer\", \"quick_settings_num_rows\", rowsRes);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/RedirectToNotificationChannelSetting.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter\n\nimport android.content.Context\nimport android.content.Intent\nimport android.os.UserHandle\nimport android.provider.Settings\nimport android.service.notification.StatusBarNotification\nimport com.github.kyuubiran.ezxhelper.ClassUtils.getStaticObjectOrNullAs\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.EzXHelper.appContext\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.ObjectHelper.Companion.objectHelper\nimport com.github.kyuubiran.ezxhelper.ObjectUtils.invokeMethodBestMatch\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject RedirectToNotificationChannelSetting : BaseHook() {\n    override fun init() {\n        var statusBarNotification: StatusBarNotification? = null\n        loadClass(\"com.android.systemui.statusbar.notification.row.MiuiNotificationMenuRow\")\n            .methodFinder()\n            .filterByName(\"onClickInfoItem\").first().createHook {\n                before { param ->\n                    param.thisObject.objectHelper {\n                        EzXHelper.initAppContext(getObjectOrNullAs<Context>(\"mContext\"))\n                        statusBarNotification = getObjectOrNullAs<StatusBarNotification>(\"mSbn\")\n                    }\n                }\n                after {\n                    statusBarNotification = null\n                }\n            }\n        loadClass(\"com.android.systemui.statusbar.notification.NotificationSettingsHelper\")\n            .methodFinder()\n            .filterByName(\"startAppNotificationSettings\").first().createHook {\n                before { param ->\n                    val intent = Intent(Intent.ACTION_MAIN)\n                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)\n                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                        .setClassName(\"com.android.settings\", \"com.android.settings.SubSettings\")\n                        .putExtra(\n                            \":android:show_fragment\",\n                            \"com.android.settings.notification.ChannelNotificationSettings\"\n                        )\n                        .putExtra(Settings.EXTRA_APP_PACKAGE, statusBarNotification!!.packageName)\n                        .putExtra(\n                            Settings.EXTRA_CHANNEL_ID,\n                            statusBarNotification!!.notification.channelId\n                        )\n                        .putExtra(\"app_uid\", statusBarNotification!!.uid)\n                        .putExtra(\n                            Settings.EXTRA_CONVERSATION_ID,\n                            statusBarNotification!!.notification.shortcutId\n                        )\n                    val userHandleCurrent = getStaticObjectOrNullAs<UserHandle>(\n                        UserHandle::class.java,\n                        \"CURRENT\"\n                    )\n                    invokeMethodBestMatch(\n                        appContext,\n                        \"startActivityAsUser\",\n                        null,\n                        intent,\n                        userHandleCurrent\n                    )\n                    param.result = null\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/SmartHome.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport android.content.pm.ApplicationInfo;\nimport android.widget.RelativeLayout;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SmartHome extends BaseHook {\n\n    private ClassLoader mPluginLoader = null;\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.systemui.shared.plugins.PluginManagerImpl\", \"getClassLoader\", ApplicationInfo.class, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ApplicationInfo appInfo = (ApplicationInfo) param.args[0];\n                if (\"miui.systemui.plugin\".equals(appInfo.packageName)) {\n                    if (mPluginLoader == null) {\n                        mPluginLoader = (ClassLoader) param.getResult();\n                        Helpers.findAndHookMethod(\"miui.systemui.devicecontrols.ui.MiuiControlsUiControllerImpl\", mPluginLoader, \"updateOrientation\", new MethodHook() {\n                            @Override\n                            protected void after(MethodHookParam param) throws Throwable {\n                                RelativeLayout mParent = (RelativeLayout) XposedHelpers.getObjectField(param.thisObject, \"parent\");\n                            }\n                        });\n                    }\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/SunlightMode.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.database.ContentObserver;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Handler;\nimport android.provider.Settings;\nimport android.util.ArrayMap;\n\nimport androidx.annotation.Nullable;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.utils.ShellUtils;\nimport com.sevtinge.cemiuiler.utils.TileUtils;\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.io.BufferedReader;\nimport java.io.BufferedWriter;\nimport java.io.File;\nimport java.io.FileReader;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.util.Objects;\n\nimport de.robv.android.xposed.XC_MethodHook.MethodHookParam;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SunlightMode extends TileUtils {\n    public static String path = null;\n    public static boolean mMode = false;\n    public static boolean useSystem = false;\n    public static int lastSunlight = 0;\n    // public static int lastBrightnessMode = 0;\n    // public static int maxSunlight = 0;\n    public static int pathSunlight = 0;\n    public static boolean intentListening = false;\n    // public static boolean imOpenCustomMode = false;\n    public static final String screenBrightness = \"screen_brightness\";\n    public static final String screenBrightnessEnable = \"screen_brightness_enable\";\n    public static final String screenBrightnessMode = \"screen_brightness_mode\";\n    public static final String screenBrightnessCustomMode = \"screen_brightness_custom_mode\";\n    public static final String sunlightMode = \"sunlight_mode\";\n    String mQSFactoryClsName = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"com.android.systemui.qs.tileimpl.MiuiQSFactory\" :\n        \"com.android.systemui.qs.tileimpl.QSFactoryImpl\";\n\n    @Override\n    public void init() {\n        modeSwitch();\n        setPath();\n        super.init();\n    }\n\n    /*public void sLog(String log) {\n        Log.i(\"SunlightMode\", \"sLog: \" + log);\n    }*/\n\n    public void modeSwitch() {\n        int mode = mPrefsMap.getStringAsInt(\"system_control_center_sunshine_new_mode\", 0);\n        switch (mode) {\n            case 1 -> mMode = false;\n            case 2 -> mMode = true;\n        }\n    }\n\n    @Override\n    public boolean needCustom() {\n        return true;\n    }\n\n    public void setPath() {\n        String fileOne = \"/sys/class/mi_display/disp-DSI-0/brightness_clone\";\n        String fileTwo = \"/sys/class/backlight/panel0-backlight/brightness\";\n        File file = new File(fileOne);\n        if (file.exists()) {\n            path = fileOne;\n        } else {\n            File file1 = new File(fileTwo);\n            if (file1.exists()) {\n                path = fileTwo;\n            }\n        }\n        /*ShellUtils.CommandResult commandResult = ShellUtils.execCommand(\"[ -f \" + fileOne + \" ]\", true, false);\n        if (commandResult.result == 0) {\n            path = fileOne;\n        } else {\n            ShellUtils.CommandResult shell = ShellUtils.execCommand(\"[ -f \" + fileOne + \" ]\", true, false);\n            if (shell.result == 0) {\n                path = fileTwo;\n            }\n        }\n        sLog(\"tileCheck: shell result is: \" + commandResult.result);\n        intentListening = true;*/\n        if (path == null) {\n            useSystem = true;\n            XposedLogUtils.logE(TAG, \"Missing directory, unable to set this mode: true\");\n        } else {\n            ShellUtils.execCommand(\"chmod 777 \" + path, true, false);\n            // XposedLogUtils.logI(\"setPath: im get file: \" + path);\n        }\n    }\n\n    @Override\n    public Class<?> customQSFactory() {\n        return findClassIfExists(mQSFactoryClsName);\n    }\n\n    @Override\n    public Class<?> customClass() {\n        return findClassIfExists(\"com.android.systemui.qs.tiles.PowerSaverTile\");\n    }\n\n    @Override\n    public String[] customTileProvider() {\n        String[] TileProvider = new String[3];\n        TileProvider[0] = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"powerSaverTileProvider\" : \"mPowerSaverTileProvider\";\n        TileProvider[1] = isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU) ? \"createTileInternal\" : \"interceptCreateTile\";\n        TileProvider[2] = \"createTile\";\n        return TileProvider;\n    }\n\n    @Override\n    public String customName() {\n        return \"custom_SUN\";\n    }\n\n    @Override\n    public int customValue() {\n        return R.string.system_control_center_sunshine_mode;\n    }\n\n    public void refreshState(Object o) {\n        XposedHelpers.callMethod(o, \"refreshState\");\n    }\n\n    @Override\n    public void tileCheck(MethodHookParam param, String tileName) {\n        param.setResult(true);\n    }\n\n    @Override\n    public void tileLongClickIntent(MethodHookParam param, String tileName) {\n        param.setResult(null);\n    }\n\n    @Override\n    public boolean needAfter() {\n        return false;\n    }\n\n    @Override\n    public void tileClick(MethodHookParam param, String tileName) {\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        try {\n            if (!mMode) {\n                /*系统阳光模式*/\n                int systemMode = Settings.System.getInt(mContext.getContentResolver(), sunlightMode);\n                if (systemMode == 1) {\n                    Settings.System.putInt(mContext.getContentResolver(), sunlightMode, 0);\n                    refreshState(param.thisObject);\n                } else if (systemMode == 0) {\n                    Settings.System.putInt(mContext.getContentResolver(), sunlightMode, 1);\n                    refreshState(param.thisObject);\n                } else {\n                    XposedLogUtils.logE(TAG, \"ERROR Int For sunlight_mode\");\n                }\n            } else {\n                if (!useSystem) {\n                    /*强制最高亮度*/\n                    if (lastSunlight == 0 || Integer.parseInt(readAndWrit(null, false)) != pathSunlight) {\n                        // imOpenCustomMode = true;\n                        if (getBrightnessMode(mContext) == 1) {\n                            setCustomBrightnessMode(mContext, 1);\n                        }\n                        setBroadcastReceiver(mContext, param);\n                        lastSunlight = Integer.parseInt(readAndWrit(null, false));\n                        readAndWrit(\"\" + Integer.MAX_VALUE, true);\n                        /*Settings.System.putInt(mContext.getContentResolver(), screenBrightness, Integer.MAX_VALUE);\n                        if (maxSunlight == 0)\n                            maxSunlight = Settings.System.getInt(mContext.getContentResolver(), screenBrightness);\n                        sLog(\"tileClick: lastSunlight: \" + lastSunlight + \" pathSunlight: \" + pathSunlight + \" filter: \" + filter);\n                        ShellUtils.CommandResult commandResult = ShellUtils.execCommand(\"sleep 0.8 && echo \" + Integer.MAX_VALUE + \" > \" + path + \" && cat \" + path, true, true);\n                        try {\n                            pathSunlight = Integer.parseInt(commandResult.successMsg);\n                        } catch (NumberFormatException e) {\n                            logE(\"cant to int: \" + pathSunlight);\n                        }*/\n                    } else {\n                        // imOpenCustomMode = false;\n                        if (getCustomBrightnessMode(mContext) == 1) {\n                            setCustomBrightnessMode(mContext, 0);\n                        }\n                        // sLog(\"tileClick: comeback lastSunlight: \" + lastSunlight + \" pathSunlight: \" + pathSunlight);\n                        unBroadcastReceiver(mContext, param);\n                        readAndWrit(\"\" + lastSunlight, false);\n                        lastSunlight = 0; // 重置\n                    }\n                } else {\n                    /*系统Api最高亮度*/\n                    if (lastSunlight == 0) {\n                        // imOpenCustomMode = true;\n                        if (getBrightnessMode(mContext) == 1) {\n                            setCustomBrightnessMode(mContext, 1);\n                        }\n                        setBroadcastReceiver(mContext, param);\n                        lastSunlight = Settings.System.getInt(mContext.getContentResolver(), screenBrightness);\n                        Settings.System.putInt(mContext.getContentResolver(), screenBrightness, Integer.MAX_VALUE);\n                        Settings.System.putInt(mContext.getContentResolver(), screenBrightnessEnable, 1);\n                        // pathSunlight = Settings.System.getInt(mContext.getContentResolver(), screenBrightness); // 不稳定\n                    } else {\n                        // imOpenCustomMode = false;\n                        if (getCustomBrightnessMode(mContext) == 1) {\n                            setCustomBrightnessMode(mContext, 0);\n                        }\n                        unBroadcastReceiver(mContext, param);\n                        Settings.System.putInt(mContext.getContentResolver(), screenBrightness, lastSunlight);\n                        Settings.System.putInt(mContext.getContentResolver(), screenBrightnessEnable, 0);\n                        lastSunlight = 0; // 重置\n                    }\n                }\n                refreshState(param.thisObject);\n            }\n        } catch (Settings.SettingNotFoundException e) {\n            refreshState(param.thisObject);\n        }\n    }\n\n    public static int getBrightnessMode(Context context) {\n        try {\n            return Settings.System.getInt(context.getContentResolver(), screenBrightnessMode);\n        } catch (Settings.SettingNotFoundException e) {\n            AndroidLogUtils.LogE(\"No Found Settings: \", e);\n            return -1;\n        }\n    }\n\n    public static void setBrightnessMode(Context context, int value) {\n        Settings.System.putInt(context.getContentResolver(), screenBrightnessMode, value);\n    }\n\n    public static int getCustomBrightnessMode(Context context) {\n        try {\n            return Settings.System.getInt(context.getContentResolver(), screenBrightnessCustomMode);\n        } catch (Settings.SettingNotFoundException e) {\n            setCustomBrightnessMode(context, 0);\n            AndroidLogUtils.LogE(\"No Found Settings: \", e);\n            return -1;\n        }\n    }\n\n    public static void setCustomBrightnessMode(Context context, int value) {\n        Settings.System.putInt(context.getContentResolver(), screenBrightnessCustomMode, value);\n    }\n\n    public void setBroadcastReceiver(Context mContext, MethodHookParam param) {\n        BroadcastReceiver broadcastReceiver = new Screen();\n        IntentFilter filter = new IntentFilter();\n        filter.addAction(Intent.ACTION_SCREEN_OFF);\n        mContext.registerReceiver(broadcastReceiver, filter);\n        // logE(\"setBroadcastReceiver: registerReceiver: \" + broadcastReceiver + \" filter: \" + filter);\n        XposedHelpers.setAdditionalInstanceField(param.thisObject, \"broadcastReceiver\", broadcastReceiver);\n        intentListening = true;\n    }\n\n    public void unBroadcastReceiver(Context mContext, MethodHookParam param) {\n        BroadcastReceiver broadcastReceiver = (BroadcastReceiver) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"broadcastReceiver\");\n        // logE(\"unBroadcastReceiver: broadcastReceiver: \" + broadcastReceiver);\n        if (broadcastReceiver != null) {\n            // logE(\"unBroadcastReceiver: unregisterReceiver: \" + broadcastReceiver);\n            mContext.unregisterReceiver(broadcastReceiver);\n            intentListening = false;\n        }\n    }\n\n    @Override\n    public void tileListening(MethodHookParam param, String tileName) {\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        boolean mListening = (boolean) param.args[0];\n        // sLog(\"tileListening: mListening: \" + mListening);\n        if (mListening) {\n            ContentObserver contentObserver = new ContentObserver(new Handler(mContext.getMainLooper())) {\n                @Override\n                public void onChange(boolean selfChange, @Nullable Uri uri) {\n                    super.onChange(selfChange, uri);\n                    if (uri != null) {\n                        String uriString = uri.toString();\n                        String mUriString = Settings.System.getUriFor(screenBrightnessCustomMode).toString();\n                        if (uriString.equals(mUriString)) {\n                            if (getBrightnessMode(mContext) == 0 && getCustomBrightnessMode(mContext) == 0) {\n                                setBrightnessMode(mContext, 1);\n                            } else if (getBrightnessMode(mContext) == 1 && getCustomBrightnessMode(mContext) == 1) {\n                                setBrightnessMode(mContext, 0);\n                            }\n                        }\n                    }\n                    refreshState(param.thisObject);\n                }\n            };\n            getCustomBrightnessMode(mContext);\n            mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(screenBrightness), false, contentObserver);\n            mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(screenBrightnessCustomMode), false, contentObserver);\n            XposedHelpers.setAdditionalInstanceField(param.thisObject, \"tileListener\", contentObserver);\n        } else {\n            // if (contentObserver != null) {\n            //     sLog(\"tileListening: im unregisterContentObserver: \" + contentObserver);\n            //     mContext.getContentResolver().unregisterContentObserver(contentObserver);\n            // }\n            ContentObserver contentObserver = (ContentObserver) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"tileListener\");\n            // sLog(\"tileListening: im unregisterContentObserver: \" + contentObserver);\n            mContext.getContentResolver().unregisterContentObserver(contentObserver);\n        }\n    }\n\n    @Override\n    public ArrayMap<String, Integer> tileUpdateState(MethodHookParam param, Class<?> mResourceIcon, String tileName) {\n        int nowInt = 0;\n        int nowSunlight;\n        boolean isEnable = false;\n        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n        try {\n            Settings.System.getInt(mContext.getContentResolver(), sunlightMode);\n            if (mMode) {\n                try {\n                    Settings.System.getInt(mContext.getContentResolver(), screenBrightness);\n                } catch (Settings.SettingNotFoundException e) {\n                    mMode = false;\n                    // sLog(\"tileCheck: Missing system API: \" + screenBrightness);\n                }\n            }\n        } catch (Settings.SettingNotFoundException e) {\n            XposedLogUtils.logE(TAG, \"tileUpdateState: Missing system API: \" + sunlightMode);\n        }\n        try {\n            if (!mMode) {\n                nowInt = Settings.System.getInt(mContext.getContentResolver(), sunlightMode);\n            } else {\n                if (!useSystem) {\n                    // nowInt = Settings.System.getInt(mContext.getContentResolver(), screenBrightness);\n                    nowSunlight = Integer.parseInt(readAndWrit(null, false));\n                    if (nowSunlight == pathSunlight) nowInt = 1;\n                    // if (nowInt == maxSunlight) {\n                    //     nowInt = 1;\n                    // } else\n                    // sLog(\"tileUpdateState: nowInt is: \" + nowInt + \" pathSunlight: \" + pathSunlight + \" nowSunlight: \" + nowSunlight);\n                } else {\n                    nowSunlight = Settings.System.getInt(mContext.getContentResolver(), screenBrightnessEnable);\n                    if (nowSunlight == 1) nowInt = 1;\n                }\n            }\n            if (nowInt == 1) isEnable = true;\n            if (intentListening && !isEnable) {\n                unBroadcastReceiver(mContext, param);\n            }\n            // sLog(\"tileUpdateState: isEnable is: \" + isEnable);\n        } catch (Settings.SettingNotFoundException e) {\n            XposedLogUtils.logE(TAG, \"tileUpdateState: Not Find sunlight_mode\");\n        }\n        ArrayMap<String, Integer> tileResMap = new ArrayMap<>();\n        tileResMap.put(\"custom_SUN_Enable\", isEnable ? 1 : 0);\n        tileResMap.put(\"custom_SUN_ON\", mResHook.addResource(\"ic_control_center_sunlight_mode_on\", R.drawable.baseline_wb_sunny_24));\n        tileResMap.put(\"custom_SUN_OFF\", mResHook.addResource(\"ic_control_center_sunlight_mode_off\", R.drawable.baseline_wb_sunny_24));\n        return tileResMap;\n    }\n\n    public static String readAndWrit(String writ, boolean need) {\n        String line;\n        BufferedReader reader = null;\n        BufferedWriter writer = null;\n        StringBuilder builder = null;\n        /*try {\n            // 800毫秒获得丝滑转场效果，太好笑了，记录一下\n            Thread.sleep(need ? 800 : 400);\n        } catch (InterruptedException e) {\n            logE(\"sleep error: \" + e);\n        }*/\n        if (writ != null) {\n            try {\n                writer = new BufferedWriter(new FileWriter(path, false));\n                writer.write(writ);\n            } catch (IOException e) {\n                AndroidLogUtils.LogE(\"SunlightMode\", \"error to writer: \" + path + \" \", e);\n            } finally {\n                try {\n                    if (writer != null) {\n                        writer.close();\n                    }\n                } catch (IOException e) {\n                    AndroidLogUtils.LogE(\"SunlightMode\", \"close writer error: \", e);\n                }\n            }\n        }\n        try {\n            reader = new BufferedReader(new FileReader(path));\n            builder = new StringBuilder();\n            while ((line = reader.readLine()) != null) {\n                builder.append(line);\n            }\n        } catch (IOException e) {\n            AndroidLogUtils.LogE(\"SunlightMode\", \"error to read: \" + path + \" \", e);\n        } finally {\n            try {\n                if (reader != null) {\n                    reader.close();\n                }\n            } catch (IOException e) {\n                AndroidLogUtils.LogE(\"SunlightMode\", \"close reader error: \", e);\n            }\n        }\n        if (builder != null) {\n            // logE(\"get string: \" + builder);\n            if (need) pathSunlight = Integer.parseInt(builder.toString());\n            return builder.toString();\n        }\n        return null;\n    }\n\n    public static class Screen extends BroadcastReceiver {\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            // 息屏还原，按照之前的逻辑写的，如果需要再改\n            if (Objects.equals(intent.getAction(), Intent.ACTION_SCREEN_OFF)) {\n                // Log.i(\"SunlightMode\", \"onReceive: run 1\");\n                // AndroidLogUtils.LogE(\"SunlightMode\", \"onReceive 1: \" + lastSunlight + \" use: \" + useSystem, null);\n                if (lastSunlight != 0) {\n                    // AndroidLogUtils.LogE(\"SunlightMode\", \"onReceive 2: \" + lastSunlight + \" use: \" + useSystem, null);\n                    if (!useSystem) {\n                        // Log.i(\"SunlightMode\", \"onReceive: run\");\n                        // Settings.System.putInt(context.getContentResolver(), screenBrightness, lastSunlight);\n                        readAndWrit(\"\" + lastSunlight, false);\n                    } else {\n                        Settings.System.putInt(context.getContentResolver(), screenBrightness, lastSunlight);\n                        Settings.System.putInt(context.getContentResolver(), screenBrightnessEnable, 0);\n                    }\n                    lastSunlight = 0; // 重置\n                    if (getCustomBrightnessMode(context) == 1) {\n                        setBrightnessMode(context, 1);\n                        setCustomBrightnessMode(context, 0);\n                    }\n                }\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/controlcenter/SwitchCCAndNotification.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.controlcenter;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidU;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\nimport android.view.MotionEvent;\nimport android.widget.FrameLayout;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SwitchCCAndNotification extends BaseHook {\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(\n            \"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView\", lpparam.classLoader,\n            \"handleEvent\",\n            MotionEvent.class, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                boolean useCC = (boolean) XposedHelpers.callMethod(XposedHelpers.getObjectField(param.thisObject, \"mPanelController\"), \"isExpandable\");\n                if (useCC) {\n                    FrameLayout bar = (FrameLayout) param.thisObject;\n                    Object mControlPanelWindowManager = XposedHelpers.getObjectField(param.thisObject, \"mControlPanelWindowManager\");\n                    boolean dispatchToControlPanel = (boolean) XposedHelpers.callMethod(mControlPanelWindowManager, \"dispatchToControlPanel\", param.args[0], bar.getWidth());\n                    if (isAndroidU()) {\n                        XposedHelpers.setObjectField(mControlPanelWindowManager, \"mTransToControlPanel\", dispatchToControlPanel);\n                    } else {\n                        XposedHelpers.callMethod(mControlPanelWindowManager, \"setTransToControlPanel\", dispatchToControlPanel);\n                    }\n                    param.setResult(dispatchToControlPanel);\n                    return;\n                }\n                param.setResult(false);\n            }\n        });\n\n        Helpers.findAndHookMethod(\n            \"com.android.systemui.controlcenter.phone.ControlPanelWindowManager\", lpparam.classLoader,\n            \"dispatchToControlPanel\",\n            MotionEvent.class, float.class,\n            new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                boolean added = XposedHelpers.getBooleanField(param.thisObject, \"added\");\n                if (added) {\n                    boolean useCC;\n                    if (isMoreAndroidVersion(33)) {\n                        useCC = XposedHelpers.getBooleanField(XposedHelpers.getObjectField(param.thisObject, \"mControlCenterController\"), \"useControlCenter\");\n                    } else {\n                        useCC = (boolean) XposedHelpers.callMethod(XposedHelpers.getObjectField(param.thisObject, \"mControlCenterController\"), \"isExpandable\");\n                    }\n                    if (useCC) {\n                        MotionEvent motionEvent = (MotionEvent) param.args[0];\n                        if (motionEvent.getActionMasked() == 0) {\n                            XposedHelpers.setObjectField(param.thisObject, \"mDownX\", motionEvent.getRawX());\n                        }\n                        Object controlCenterWindowView = XposedHelpers.getObjectField(param.thisObject, \"mControlPanel\");\n                        if (controlCenterWindowView == null) {\n                            param.setResult(false);\n                        }\n                        else {\n                            float mDownX = XposedHelpers.getFloatField(param.thisObject, \"mDownX\");\n                            float width = (float) param.args[1];\n                            if (mDownX < width / 2.0f) {\n                                param.setResult(XposedHelpers.callMethod(controlCenterWindowView, \"handleMotionEvent\", motionEvent, true));\n                            } else {\n                                param.setResult(false);\n                            }\n                        }\n                        return;\n                    }\n                }\n                param.setResult(false);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/AddBlurEffectToLockScreen.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.animation.ValueAnimator\nimport android.graphics.drawable.LayerDrawable\nimport android.view.ViewGroup\nimport android.widget.ImageView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.HookUtils\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\nimport de.robv.android.xposed.XposedHelpers\n\nobject AddBlurEffectToLockScreen : BaseHook() {\n    override fun init() {\n        val miuiNotificationPanelViewControllerClass = findClassIfExists(\n            if (isAndroidU())\n                \"com.android.systemui.shade.MiuiNotificationPanelViewController\"\n            else\n                \"com.android.systemui.statusbar.phone.MiuiNotificationPanelViewController\"\n        ) ?: return\n\n        val keyguardBottomAreaViewClass = findClassIfExists(\n            \"com.android.systemui.statusbar.phone.KeyguardBottomAreaView\"\n        ) ?: return\n\n        val lockScreenMagazineControllerClass = findClassIfExists(\n            \"com.android.keyguard.magazine.LockScreenMagazineController\"\n        ) ?: return\n\n        // to com.sevtinge.cemiuiler.module.systemui.lockscreen.BlurButton\n        /*XposedBridge.hookAllMethods(\n            keyguardBottomAreaViewClass,\n            \"onAttachedToWindow\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    /*if (!isDefaultLockScreenTheme()) {\n                        return\n                    }*/\n                    val mLeftAffordanceView = HookUtils.getValueByField(\n                        param.thisObject,\n                        \"mLeftAffordanceView\"\n                    ) as ImageView\n                    val mRightAffordanceView = HookUtils.getValueByField(\n                        param.thisObject,\n                        \"mRightAffordanceView\"\n                    ) as ImageView\n\n                    val keyguardBottomAreaView = param.thisObject as View\n                    val leftBlurDrawable = HookUtils.createBlurDrawable(\n                        keyguardBottomAreaView,\n                        40,\n                        100,\n                        Color.argb(60, 255, 255, 255)\n                    )\n                    val leftLayerDrawable = LayerDrawable(arrayOf(leftBlurDrawable))\n                    val rightBlurDrawable = HookUtils.createBlurDrawable(\n                        keyguardBottomAreaView,\n                        40,\n                        100,\n                        Color.argb(60, 255, 255, 255)\n                    )\n                    val rightLayerDrawable = LayerDrawable(arrayOf(rightBlurDrawable))\n                    leftLayerDrawable.setLayerInset(0, 40, 40, 40, 40)\n                    rightLayerDrawable.setLayerInset(0, 40, 40, 40, 40)\n                    mLeftAffordanceView.background = leftLayerDrawable\n                    mRightAffordanceView.background = rightLayerDrawable\n                }\n            })*/\n\n        XposedBridge.hookAllMethods(\n            miuiNotificationPanelViewControllerClass,\n            \"setBouncerShowingFraction\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    if (!isDefaultLockScreenTheme()) {\n                        return\n                    }\n                    val mKeyguardBouncerShowing = HookUtils.getValueByField(\n                        param.thisObject,\n                        \"mKeyguardBouncerShowing\"\n                    ) as Boolean\n                    val mKeyguardBottomArea =\n                        XposedHelpers.callMethod(param.thisObject, \"getKeyguardBottomArea\")\n                    val mLeftAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mLeftAffordanceView\"\n                    ) as ImageView\n                    val mRightAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mRightAffordanceView\"\n                    ) as ImageView\n                    if (mLeftAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mLeftAffordanceView.background as LayerDrawable\n                        val blurDrawable = layerDrawable.getDrawable(0)\n                        XposedHelpers.callMethod(\n                            blurDrawable,\n                            \"setVisible\",\n                            !mKeyguardBouncerShowing,\n                            false\n                        )\n                    }\n                    if (mRightAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mRightAffordanceView.background as LayerDrawable\n                        val blurDrawable = layerDrawable.getDrawable(0)\n                        XposedHelpers.callMethod(\n                            blurDrawable,\n                            \"setVisible\",\n                            !mKeyguardBouncerShowing,\n                            false\n                        )\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            miuiNotificationPanelViewControllerClass,\n            \"updateKeyguardElementAlpha\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    if (!isDefaultLockScreenTheme()) {\n                        return\n                    }\n                    val mNotificationStackScroller =\n                        HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mNotificationStackScroller\"\n                        ) ?: return\n                    val mKeyguardBouncerShowing = HookUtils.getValueByField(\n                        param.thisObject,\n                        \"mKeyguardBouncerShowing\"\n                    ) ?: return\n                    mNotificationStackScroller as ViewGroup\n                    mKeyguardBouncerShowing as Boolean\n                    val keyguardContentsAlpha =\n                        XposedHelpers.callMethod(\n                            param.thisObject,\n                            \"getKeyguardContentsAlpha\"\n                        ) as Float\n                    val drawableAlpha = keyguardContentsAlpha * 255\n                    val mKeyguardBottomArea =\n                        XposedHelpers.callMethod(param.thisObject, \"getKeyguardBottomArea\")\n                    val mLeftAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mLeftAffordanceView\"\n                    ) as ImageView\n                    val mRightAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mRightAffordanceView\"\n                    ) as ImageView\n                    if (mLeftAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mLeftAffordanceView.background as LayerDrawable\n                        val blurDrawable = layerDrawable.getDrawable(0)\n                        XposedHelpers.callMethod(\n                            blurDrawable,\n                            \"setAlpha\",\n                            drawableAlpha.toInt()\n                        )\n                    }\n                    if (mRightAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mRightAffordanceView.background as LayerDrawable\n                        val blurDrawable = layerDrawable.getDrawable(0)\n                        XposedHelpers.callMethod(\n                            blurDrawable,\n                            \"setAlpha\",\n                            drawableAlpha.toInt()\n                        )\n                    }\n                }\n            })\n\n        // 控制中心异常\n        /*XposedBridge.hookAllMethods(\n            keyguardMoveHelperClass,\n            \"setTranslation\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    if (!isDefaultLockScreenTheme()) {\n                        return\n                    }\n                    val mCurrentScreen =\n                        HookUtils.getValueByField(param.thisObject, \"mCurrentScreen\") as Int\n                    val mLeftViewBg =\n                        HookUtils.getValueByField(param.thisObject, \"mLeftViewBg\") as ImageView\n                    mLeftViewBg.setImageDrawable(null)\n                    mLeftViewBg.setBackgroundColor(Color.TRANSPARENT)\n                    val transitionX = param.args[0] as Float\n                    val screenWidth =\n                        XposedHelpers.callMethod(\n                            param.thisObject,\n                            \"getScreenWidth\"\n                        ) as Float\n                    var alpha = (transitionX / screenWidth) * 255\n                    if (mCurrentScreen != 1) {\n                        alpha += 255\n                    }\n                    if (alpha > 255 || alpha < 0) {\n                        return\n                    }\n                    val drawableAlpha = (255 - alpha).toInt()\n                    var blurRadius = (transitionX / screenWidth) * 80\n                    var colorAlpha = (transitionX / screenWidth) * 50\n                    if (mCurrentScreen != 1) {\n                        blurRadius += 80\n                        colorAlpha += 50\n                    }\n                    val mFaceUnlockView =\n                        HookUtils.getValueByField(param.thisObject, \"mFaceUnlockView\") ?: return\n                    mFaceUnlockView as View\n                    if (mFaceUnlockView.parent == null || mFaceUnlockView.parent.parent == null) {\n                        return\n                    }\n                    val targetView = mFaceUnlockView.parent.parent as View\n                    if (blurRadius in 1f..81f) {\n                        if (HookUtils.isBlurDrawable(targetView.background)) {\n                            XposedHelpers.callMethod(\n                                targetView.background,\n                                \"setBlurRadius\",\n                                blurRadius.toInt()\n                            )\n                            XposedHelpers.callMethod(\n                                targetView.background,\n                                \"setColor\",\n                                Color.argb(colorAlpha.toInt(), 0, 0, 0)\n                            )\n                        } else {\n                            targetView.background =\n                                HookUtils.createBlurDrawable(\n                                    targetView,\n                                    blurRadius.toInt(),\n                                    0,\n                                    Color.argb(colorAlpha.toInt(), 0, 0, 0)\n                                )\n                        }\n                    } else {\n                        targetView.background = null\n                    }\n                    val mNotificationPanelViewController =\n                        HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mNotificationPanelViewController\"\n                        )\n                            ?: return\n                    val mNotificationStackScroller =\n                        HookUtils.getValueByField(\n                            mNotificationPanelViewController,\n                            \"mNotificationStackScroller\"\n                        ) ?: return\n                    mNotificationStackScroller as ViewGroup\n\n                    val mKeyguardBottomArea =\n                        XposedHelpers.callMethod(\n                            mNotificationPanelViewController,\n                            \"getKeyguardBottomArea\"\n                        )\n                    val mLeftAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mLeftAffordanceView\"\n                    ) as ImageView\n                    val mRightAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mRightAffordanceView\"\n                    ) as ImageView\n                    if (mLeftAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mLeftAffordanceView.background as LayerDrawable\n                        layerDrawable.alpha = drawableAlpha\n                    }\n                    if (mRightAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mRightAffordanceView.background as LayerDrawable\n                        layerDrawable.alpha = drawableAlpha\n                    }\n                }\n            })\n         */\n\n        // 锁屏过渡至桌面模糊异常\n        /*\n        XposedBridge.hookAllMethods(\n            baseKeyguardMoveHelperClass,\n            \"doPanelViewAnimation\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    if (!isDefaultLockScreenTheme()) {\n                        return\n                    }\n                    val mNotificationPanelViewController =\n                        HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mNotificationPanelViewController\"\n                        )\n                            ?: return\n                    val panelView = XposedHelpers.callMethod(\n                        mNotificationPanelViewController,\n                        \"getPanelView\"\n                    ) ?: return\n                    panelView as View\n                    if (panelView.parent == null) {\n                        return\n                    }\n                    val targetBlurView = panelView.parent as View\n                    val isOnKeyguard = XposedHelpers.callMethod(\n                        mNotificationPanelViewController,\n                        \"isOnKeyguard\"\n                    ) as Boolean\n                    if (!isOnKeyguard) {\n                        if (HookUtils.isBlurDrawable(targetBlurView.background)) {\n                            targetBlurView.background = null\n                        }\n                        return\n                    }\n                    val mKeyguardBouncerShowing = HookUtils.getValueByField(\n                        mNotificationPanelViewController,\n                        \"mKeyguardBouncerShowing\"\n                    ) as Boolean\n                    if (mKeyguardBouncerShowing) {\n                        return\n                    }\n                    val mTranslationPer =\n                        HookUtils.getValueByField(param.thisObject, \"mTranslationPer\") as Float\n                    val f2 = 1.0f - (1.0f - mTranslationPer) * (1.0f - mTranslationPer)\n                    val blurRadius = f2 * 50\n                    if (blurRadius > 0f) {\n                        if (HookUtils.isBlurDrawable(targetBlurView.background)) {\n                            XposedHelpers.callMethod(\n                                targetBlurView.background,\n                                \"setBlurRadius\",\n                                blurRadius.toInt()\n                            )\n                        } else {\n                            targetBlurView.background =\n                                HookUtils.createBlurDrawable(targetBlurView, blurRadius.toInt(), 0)\n                        }\n                    } else if (!mKeyguardBouncerShowing) {\n                        targetBlurView.background = null\n                    }\n                }\n            })\n\n         */\n\n        XposedBridge.hookAllMethods(\n            miuiNotificationPanelViewControllerClass,\n            \"onBouncerShowingChanged\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (!isDefaultLockScreenTheme()) {\n                        return\n                    }\n                    val isBouncerShowing = param.args[0] as Boolean\n                    val mBouncerFractionAnimator =\n                        HookUtils.getValueByField(\n                            param.thisObject,\n                            \"mBouncerFractionAnimator\"\n                        ) ?: return\n                    mBouncerFractionAnimator as ValueAnimator\n                    if (isBouncerShowing) {\n                        val mKeyguardBouncerFractionField =\n                            miuiNotificationPanelViewControllerClass.getDeclaredField(\"mKeyguardBouncerFraction\")\n                        mKeyguardBouncerFractionField.isAccessible = true\n                        mKeyguardBouncerFractionField.set(param.thisObject, 1f)\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            lockScreenMagazineControllerClass,\n            \"setViewsAlpha\",\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    if (!isDefaultLockScreenTheme()) {\n                        return\n                    }\n                    val alpha = param.args[0] as Float\n                    val drawableAlpha = alpha * 255\n                    if (drawableAlpha < 0 || drawableAlpha > 255) {\n                        return\n                    }\n                    val mNotificationStackScrollLayout = HookUtils.getValueByField(\n                        param.thisObject,\n                        \"mNotificationStackScrollLayout\"\n                    ) ?: return\n                    // NotificationStackScrollLayoutController\n                    val mController =\n                        HookUtils.getValueByField(mNotificationStackScrollLayout, \"mController\")\n                            ?: return\n\n                    val mPanelViewController =\n                        HookUtils.getValueByField(mController, \"mPanelViewController\") ?: return\n\n                    val mKeyguardBottomArea =\n                        XposedHelpers.callMethod(\n                            mPanelViewController,\n                            \"getKeyguardBottomArea\"\n                        ) ?: return\n                    val mLeftAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mLeftAffordanceView\"\n                    ) as ImageView\n                    val mRightAffordanceView = HookUtils.getValueByField(\n                        mKeyguardBottomArea,\n                        \"mRightAffordanceView\"\n                    ) as ImageView\n                    if (mLeftAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mLeftAffordanceView.background as LayerDrawable\n                        layerDrawable.alpha = drawableAlpha.toInt()\n                    }\n                    if (mRightAffordanceView.background is LayerDrawable) {\n                        val layerDrawable = mRightAffordanceView.background as LayerDrawable\n                        layerDrawable.alpha = drawableAlpha.toInt()\n                    }\n                }\n            })\n\n        XposedBridge.hookAllMethods(\n            keyguardBottomAreaViewClass,\n            \"setDozing\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    if (!isDefaultLockScreenTheme()) {\n                        return\n                    }\n                    val isDozing = param.args[0] as Boolean\n                    val mLeftAffordanceView = HookUtils.getValueByField(\n                        param.thisObject,\n                        \"mLeftAffordanceView\"\n                    ) as ImageView\n                    val mRightAffordanceView = HookUtils.getValueByField(\n                        param.thisObject,\n                        \"mRightAffordanceView\"\n                    ) as ImageView\n                    if (mLeftAffordanceView.background == null || mRightAffordanceView.background == null) {\n                        return\n                    }\n                    val leftLayerDrawable = mLeftAffordanceView.background\n                    val rightLayerDrawable = mRightAffordanceView.background\n                    if (leftLayerDrawable is LayerDrawable && rightLayerDrawable is LayerDrawable) {\n                        val leftBlurDrawable = leftLayerDrawable.getDrawable(0) ?: return\n                        val rightBlurDrawable = rightLayerDrawable.getDrawable(0) ?: return\n                        XposedHelpers.callMethod(\n                            leftBlurDrawable,\n                            \"setVisible\",\n                            !isDozing,\n                            false\n                        )\n                        XposedHelpers.callMethod(\n                            rightBlurDrawable,\n                            \"setVisible\",\n                            !isDozing,\n                            false\n                        )\n                    }\n                }\n            })\n\n    }\n\n    fun isDefaultLockScreenTheme(): Boolean {\n        val miuiKeyguardUtilsClass = findClassIfExists(\n            if (isAndroidU())\n                \"com.miui.systemui.util.CommonUtil\"\n            else\n                \"com.android.keyguard.utils.MiuiKeyguardUtils\"\n        ) ?: return true\n        return XposedHelpers.callStaticMethod(\n            miuiKeyguardUtilsClass,\n            \"isDefaultLockScreenTheme\"\n        ) as Boolean\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/BlurButton.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.app.KeyguardManager\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.drawable.LayerDrawable\nimport android.view.View\nimport android.widget.ImageView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.ObjectUtils\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.HookUtils.createBlurDrawable\n\nobject BlurButton : BaseHook() {\n    override fun init() {\n        lateinit var mLeftAffordanceView: ImageView\n        lateinit var mRightAffordanceView: ImageView\n        lateinit var keyguardBottomAreaView: View\n\n        loadClassOrNull(\n            \"com.android.systemui.statusbar.phone.KeyguardBottomAreaView\"\n        )!!.methodFinder()\n            .filter {\n                name in setOf(\n                    \"onAttachedToWindow\",\n                    \"onDetachedFromWindow\",\n                    \"updateRightAffordanceIcon\",\n                    \"updateLeftAffordanceIcon\"\n                )\n            }.toList().createHooks {\n                after { param ->\n                    mLeftAffordanceView =\n                        ObjectUtils.getObjectOrNullAs<ImageView>(param.thisObject, \"mLeftAffordanceView\")!!\n\n                    mRightAffordanceView =\n                        ObjectUtils.getObjectOrNullAs<ImageView>(param.thisObject, \"mRightAffordanceView\")!!\n\n                    keyguardBottomAreaView = param.thisObject as View\n\n                    // Your blur logic\n                    val context = keyguardBottomAreaView.context ?: return@after\n                    val keyguardManager =\n                        context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager\n\n                    if (keyguardManager.isKeyguardLocked) {\n                        val leftBlurDrawable = createBlurDrawable(\n                            keyguardBottomAreaView, 40, 100, Color.argb(60, 255, 255, 255)\n                        )\n                        val leftLayerDrawable = LayerDrawable(arrayOf(leftBlurDrawable))\n                        val rightBlurDrawable = createBlurDrawable(\n                            keyguardBottomAreaView, 40, 100, Color.argb(60, 255, 255, 255)\n                        )\n                        val rightLayerDrawable = LayerDrawable(arrayOf(rightBlurDrawable))\n                        leftLayerDrawable.setLayerInset(0, 40, 40, 40, 40)\n                        rightLayerDrawable.setLayerInset(0, 40, 40, 40, 40)\n                        mLeftAffordanceView.background = leftLayerDrawable\n                        mRightAffordanceView.background = rightLayerDrawable\n                    } else {\n                        mLeftAffordanceView.background = null\n                        mRightAffordanceView.background = null\n                    }\n                }\n            }\n\n        /*var mLeftAffordanceView: WeakReference<ImageView>? = null\n        var mRightAffordanceView: WeakReference<ImageView>? = null\n        var keyguardBottomAreaView: WeakReference<View>? = null\n        var handler = Handler(Looper.getMainLooper())\n        var needUpdate = true\n\n        // from com.sevtinge.cemiuiler.module.systemui.lockscreen.AddBlurEffectToLockScreen\n\n        val keyguardBottomAreaViewClass =\n            findClassIfExists(\"com.android.systemui.statusbar.phone.KeyguardBottomAreaView\") ?: return\n\n        XposedBridge.hookAllMethods(\n            keyguardBottomAreaViewClass,\n            \"onAttachedToWindow\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    mLeftAffordanceView = WeakReference(\n                        getValueByField(param.thisObject, \"mLeftAffordanceView\") as ImageView\n                    )\n                    mRightAffordanceView = WeakReference(\n                        getValueByField(param.thisObject, \"mRightAffordanceView\") as ImageView\n                    )\n                    keyguardBottomAreaView = WeakReference(param.thisObject as View)\n                }\n            })\n\n        fun createBlurLayerDrawable(view: View, color: Int): Array<LayerDrawable> {\n            val blurDrawable = createBlurDrawable(view, 40, 100, color)\n            val leftLayerDrawable = LayerDrawable(arrayOf(blurDrawable)).apply {\n                setLayerInset(0, 40, 40, 40, 40) }\n            val rightLayerDrawable = LayerDrawable(arrayOf(blurDrawable)).apply {\n                setLayerInset(0, 40, 40, 40, 40) }\n            return arrayOf(leftLayerDrawable, rightLayerDrawable)\n        }\n\n        // 已摆烂，剩下数组异常问题（会多生成一个 0 的数组，导致抛出 ArrayIndexOutOfBoundsException 异常），感觉我没能力修好（\n        // 性能优化得差不多了\n        val timer = Timer()\n        timer.scheduleAtFixedRate(object : TimerTask() {\n            override fun run() {\n                val context = keyguardBottomAreaView?.get()?.context ?: return\n                val keyguardManager =\n                    context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager\n\n                if (keyguardManager.isKeyguardLocked) {\n                    if (needUpdate) {\n                        val message = Message.obtain()\n                        message.obj = true\n                        handler.sendMessage(message)\n                        needUpdate = false\n                    }\n                } else {\n                    if (needUpdate) {\n                        val message = Message.obtain()\n                        message.obj = false\n                        handler.sendMessage(message)\n                        needUpdate = false\n                    }\n                }\n            }\n        }, 0, 100)\n\n        handler = object : Handler(Looper.getMainLooper()) {\n            override fun handleMessage(msg: Message) {\n                val updateFlag = msg.obj as? Boolean\n                if (updateFlag != null) {\n                    if (updateFlag) {\n                        val blurColor = Color.argb(60, 255, 255, 255)\n                        keyguardBottomAreaView?.get()?.let { view ->\n                            val layerDrawables = createBlurLayerDrawable(view, blurColor)\n                            mLeftAffordanceView?.get()?.background = layerDrawables[0]\n                            mRightAffordanceView?.get()?.background = layerDrawables[1]\n                        }\n                    } else {\n                        mLeftAffordanceView?.get()?.background = null\n                        mRightAffordanceView?.get()?.background = null\n                    }\n                    needUpdate = true\n                }\n            }\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/ChargingCVP.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.annotation.SuppressLint\nimport android.app.AndroidAppHelper\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.os.BatteryManager\nimport android.os.Handler\nimport android.os.PowerManager\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.invokeStaticMethodBestMatch\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.ObjectUtils.invokeMethodBestMatch\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.getAndroidVersion\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\nimport com.sevtinge.cemiuiler.utils.devicesdk.isMoreAndroidVersion\nimport de.robv.android.xposed.XposedHelpers\nimport java.io.BufferedReader\nimport java.io.FileReader\nimport java.math.BigDecimal\nimport java.math.RoundingMode\nimport kotlin.math.abs\n\nobject ChargingCVP : BaseHook() {\n    @SuppressLint(\"SetTextI18n\")\n    override fun init() {\n        // 去除单行限制，Android13 以上扩展一个刷新频率，Android12 的后面再看看情况\n        if (getAndroidVersion() >= 33) {\n            val clazzDependency = loadClass(\"com.android.systemui.Dependency\")\n            val clazzKeyguardIndicationController =\n                loadClass(\"com.android.systemui.statusbar.KeyguardIndicationController\")\n            loadClassOrNull(\"com.android.systemui.statusbar.phone.KeyguardIndicationTextView\")?.constructors\n             ?.createHooks {\n                after { param ->\n                    (param.thisObject as TextView).isSingleLine = false\n                    val screenOnOffReceiver = @SuppressLint(\"ServiceCast\")\n                    object : BroadcastReceiver() {\n                        val keyguardIndicationController = if (isAndroidU())\n                            loadClass(\"com.android.systemui.statusbar.KeyguardIndicationController\")\n                        else invokeStaticMethodBestMatch(\n                            clazzDependency, \"get\", null, clazzKeyguardIndicationController)!!\n                        val handler = Handler((param.thisObject as TextView).context.mainLooper)\n                        val runnable = object : Runnable {\n                            override fun run() {\n                                if (isAndroidU())\n                                    XposedHelpers.callStaticMethod(loadClass(\"com.android.systemui.statusbar.KeyguardIndicationController\"), \"updatePowerIndication\")\n                                else\n                                    invokeMethodBestMatch(keyguardIndicationController, \"updatePowerIndication\")\n\n                                handler.postDelayed(\n                                    this, mPrefsMap.getInt(\"system_ui_statusbar_lock_screen_show_spacing\", 6) / 2 * 1000L\n                                )\n                            }\n                        }\n\n                        init {\n                            if (((param.thisObject as TextView).context.getSystemService(Context.POWER_SERVICE) as PowerManager).isInteractive) {\n                                handler.post(runnable)\n                            }\n                        }\n\n                        override fun onReceive(context: Context, intent: Intent) {\n                            when (intent.action) {\n                                Intent.ACTION_SCREEN_ON -> {\n                                    handler.post(runnable)\n                                }\n\n                                Intent.ACTION_SCREEN_OFF -> {\n                                    handler.removeCallbacks(runnable)\n                                }\n                            }\n                        }\n                    }\n\n                    with(param.thisObject as TextView) {\n                        val filter = IntentFilter().apply {\n                            addAction(Intent.ACTION_SCREEN_ON)\n                            addAction(Intent.ACTION_SCREEN_OFF)\n                        }\n                        context.registerReceiver(screenOnOffReceiver, filter)\n                    }\n                }\n            }\n        } else {\n            loadClassOrNull(\"com.android.systemui.statusbar.phone.KeyguardIndicationTextView\")?.constructors\n                ?.createHooks {\n                after {\n                    (it.thisObject as TextView).isSingleLine = false\n                }\n            }\n        }\n\n        // 修改底部文本信息\n        val mBottomChargeClass by lazy {\n            when {\n                isMoreAndroidVersion(34) -> \"com.miui.charge.ChargeUtils\"\n                else -> \"com.android.keyguard.charge.ChargeUtils\"\n            }\n        }\n\n        loadClass(mBottomChargeClass).methodFinder()\n            .filterByName(\"getChargingHintText\")\n            /*.filterByParamTypes(\n                Context::class.java,\n                Boolean::class.javaPrimitiveType,\n                Int::class.javaPrimitiveType\n            )*/\n            .first().createHook {\n                after {\n                    it.result?.let { result ->\n                        it.result = result as String + getCVP()\n                    }\n                }\n        }\n    }\n\n    private fun getCVP(): String {\n        // 获取电流信息\n        val batteryManager =\n            AndroidAppHelper.currentApplication()\n                .getSystemService(Context.BATTERY_SERVICE) as BatteryManager\n        val current =\n            abs(batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW) / 1000)\n        var voltage = 0.0\n        var temp = 0.0\n\n        kotlin.runCatching {\n            // 获取电压信息\n            val voltageNow =\n                BufferedReader(FileReader(\"/sys/class/power_supply/battery/voltage_now\"))\n            voltage =\n                BigDecimal(voltageNow.readLine().toDouble() / 1000.0).setScale(1, RoundingMode.HALF_UP).toDouble()\n            // 获取电池温度信息\n            val temNow =\n                BufferedReader(FileReader(\"/sys/class/power_supply/battery/temp\"))\n            temp =\n                BigDecimal(temNow.readLine().toDouble() / 10.0).setScale(1, RoundingMode.HALF_UP).toDouble()\n        }\n\n        // 计算功率信息\n        val powerAll = abs((current * voltage) / 1000f / 1000f)\n        val power = String.format(\"%.2f\", powerAll)\n\n        // 电流展示逻辑设置\n        val mCurrent = if (mPrefsMap.getBoolean(\"system_ui_show_charging_c_more\")) {\n            \"$current mA\"\n        } else {\n            \"${String.format(\"%.1f\", abs(current / 1000f))} A\"\n        }\n        val mVoltage = \"${String.format(\"%.1f\", abs(voltage / 1000f))} V\"\n        // 电池温度是否展示\n        val mTemp = if (mPrefsMap.getBoolean(\"system_ui_show_battery_temperature\")) \" · $temp ℃\" else \"\"\n\n        // 判断充满信息是否归零\n        val showBattery = if (current == 0) {\n            mTemp\n        } else {\n            \"$mTemp\\n$mCurrent · $mVoltage · $power W\"\n        }\n\n        // 输出展示信息\n        return showBattery\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/ClockDisplaySeconds.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.os.Handler\nimport android.provider.Settings\nimport android.util.Log\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.paramCount\nimport com.github.kyuubiran.ezxhelper.finders.ConstructorFinder.`-Static`.constructorFinder\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectFieldAs\nimport de.robv.android.xposed.XC_MethodHook\nimport java.lang.reflect.Method\nimport java.text.SimpleDateFormat\nimport java.util.*\n\nobject ClockDisplaySeconds : BaseHook() {\n    private var nowTime: Date = Calendar.getInstance().time\n\n    override fun init() {\n        loadClass(\"com.miui.clock.MiuiBaseClock\").constructorFinder().first {\n            paramCount == 2\n        }.createHook {\n            after {\n                try {\n                    val viewGroup = it.thisObject as LinearLayout\n                    val d: Method = viewGroup.javaClass.getDeclaredMethod(\"updateTime\")\n                    val r = Runnable {\n                        d.isAccessible = true\n                        d.invoke(viewGroup)\n                    }\n\n                    class T : TimerTask() {\n                        override fun run() {\n                            Handler(viewGroup.context.mainLooper).post(r)\n                        }\n                    }\n                    Timer().scheduleAtFixedRate(T(), 1000 - System.currentTimeMillis() % 1000, 1000)\n                } catch (_: Exception) {\n                }\n            }\n        }\n\n        loadClass(\"com.miui.clock.MiuiLeftTopClock\").methodFinder().first {\n            name == \"updateTime\"\n        }.createHook {\n            after { updateTime(it, false) }\n        }\n\n        loadClass(\"com.miui.clock.MiuiCenterHorizontalClock\").methodFinder().first {\n            name == \"updateTime\"\n        }.createHook {\n            after { updateTime(it, false) }\n        }\n\n        loadClass(\"com.miui.clock.MiuiLeftTopLargeClock\").methodFinder().first {\n            name == \"updateTime\"\n        }.createHook {\n            after { updateTime(it, false) }\n        }\n\n        loadClass(\"com.miui.clock.MiuiVerticalClock\").methodFinder().first {\n            name == \"updateTime\"\n        }.createHook {\n            after { updateTime(it, true) }\n        }\n    }\n\n    private fun updateTime(it: XC_MethodHook.MethodHookParam, isVertical: Boolean) {\n        val textV = it.thisObject.getObjectFieldAs<TextView>(\"mTimeText\")\n        val c: Context = textV.context\n\n        Log.d(\"lock_screen_clock_display_seconds\", \"updateTime: ${it.thisObject.javaClass.simpleName}\")\n        val is24 = Settings.System.getString(c.contentResolver, Settings.System.TIME_12_24) == \"24\"\n\n        nowTime = Calendar.getInstance().time\n\n        textV.text = getTime(is24, isVertical)\n\n    }\n\n\n    @SuppressLint(\"SimpleDateFormat\")\n    private fun getTime(is24: Boolean, isVertical: Boolean): String {\n        var timePattern = \"\"\n        timePattern += if (isVertical) { // 垂直\n            if (is24) \"HH\\nmm\\nss\" else \"hh\\nmm\\nss\"\n        } else { // 水平\n            if (is24) \"HH:mm:ss\" else \"h:mm:ss\"\n        }\n        timePattern = SimpleDateFormat(timePattern).format(nowTime)\n        return timePattern\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/ForceClockUseSystemFontsHook.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.graphics.Typeface\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.getObjectFieldAs\n\n\nobject ForceClockUseSystemFontsHook : BaseHook() {\n    override fun init() {\n        loadClass(\"com.miui.clock.MiuiBaseClock\").methodFinder().filter {\n            name == \"updateViewsTextSize\"\n        }.toList().createHooks {\n            after { param ->\n                val mTimeText =\n                    param.thisObject.getObjectFieldAs<TextView>(\"mTimeText\")\n                mTimeText.typeface = Typeface.DEFAULT\n            }\n        }\n\n        loadClass(\"com.miui.clock.MiuiLeftTopLargeClock\").methodFinder().filter {\n            name == \"onLanguageChanged\" && parameterTypes == String::class.java\n        }.toList().createHooks {\n            after { param ->\n                val mTimeText =\n                    param.thisObject.getObjectFieldAs<TextView>(\"mCurrentDateLarge\")\n                mTimeText.typeface = Typeface.DEFAULT\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/HideLockScreenHint.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.devicesdk.isMoreAndroidVersion\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedHelpers\n\nobject HideLockScreenHint : BaseHook() {\n    override fun init() {\n        val hook: MethodHook = object : MethodHook() {\n            @Throws(Throwable::class)\n            override fun before(param: MethodHookParam) {\n                XposedHelpers.setObjectField(param.thisObject, \"mUpArrowIndication\", null)\n            }\n        }\n\n        if (isMoreAndroidVersion(33)) {\n            Helpers.findAndHookMethod(\n                \"com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController\",\n                lpparam.classLoader,\n                \"hasIndicationsExceptResting\",\n                XC_MethodReplacement.returnConstant(true)\n            )\n        } else {\n            Helpers.findAndHookMethod(\n                \"com.android.systemui.statusbar.KeyguardIndicationController\",\n                lpparam.classLoader,\n                \"updateIndication\",\n                Boolean::class.javaPrimitiveType,\n                Boolean::class.javaPrimitiveType,\n                hook\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/HideLockScreenStatusBar.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.view.View\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.devicesdk.isMoreAndroidVersion\nimport de.robv.android.xposed.XposedHelpers\n\nobject HideLockScreenStatusBar : BaseHook() {\n    override fun init() {\n        val statusBarClass = if (isMoreAndroidVersion(33))\n            \"com.android.systemui.statusbar.phone.CentralSurfacesImpl\"\n        else\n            \"com.android.systemui.statusbar.phone.StatusBar\"\n\n        Helpers.hookAllMethods(statusBarClass, lpparam.classLoader, \"makeStatusBarView\",\n            object : MethodHook() {\n                override fun after(param: MethodHookParam) {\n                    val mKeyguardStatusBar = XposedHelpers.getObjectField(\n                        XposedHelpers.getObjectField(\n                            param.thisObject,\n                            \"mNotificationPanelViewController\"\n                        ), \"mKeyguardStatusBar\"\n                    ) as View\n                    mKeyguardStatusBar.translationY = -999f\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/HideLockscreenZenMode.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject HideLockscreenZenMode : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.statusbar.notification.zen.ZenModeViewController\", lpparam.classLoader)\n            .methodFinder().first {\n                name == \"shouldBeVisible\"\n            }.createHook {\n                returnConstant(false)\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/LockScreenDoubleTapToSleep.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.app.KeyguardManager\nimport android.content.Context\nimport android.os.SystemClock\nimport android.view.MotionEvent\nimport android.view.View\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\nimport de.robv.android.xposed.XposedHelpers\nimport de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField\nimport de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField\n\nobject LockScreenDoubleTapToSleep : BaseHook() {\n    override fun init() {\n        loadClass(\n            if (isAndroidU())\n                \"com.android.systemui.shade.NotificationsQuickSettingsContainer\"\n            else\n                \"com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer\").methodFinder().first {\n            name == \"onFinishInflate\"\n        }.createHook {\n            before {\n                val view = it.thisObject as View\n                setAdditionalInstanceField(view, \"currentTouchTime\", 0L)\n                setAdditionalInstanceField(view, \"currentTouchX\", 0f)\n                setAdditionalInstanceField(view, \"currentTouchY\", 0f)\n                view.setOnTouchListener(View.OnTouchListener { v, event ->\n                    if (event.action != MotionEvent.ACTION_DOWN) return@OnTouchListener false\n\n                    var currentTouchTime =\n                         getAdditionalInstanceField(view, \"currentTouchTime\") as Long\n                    var currentTouchX =\n                        getAdditionalInstanceField(view, \"currentTouchX\") as Float\n                    var currentTouchY =\n                        getAdditionalInstanceField(view, \"currentTouchY\") as Float\n                    val lastTouchTime = currentTouchTime\n                    val lastTouchX = currentTouchX\n                    val lastTouchY = currentTouchY\n\n                    currentTouchTime = System.currentTimeMillis()\n                    currentTouchX = event.x\n                    currentTouchY = event.y\n\n                    if (currentTouchTime - lastTouchTime < 250L\n                        && kotlin.math.abs(currentTouchX - lastTouchX) < 100f\n                        && kotlin.math.abs(currentTouchY - lastTouchY) < 100f\n                    ) {\n                        val keyguardMgr =\n                            v.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager\n\n                        if (keyguardMgr.isKeyguardLocked) {\n                            XposedHelpers.callMethod(\n                                v.context.getSystemService(Context.POWER_SERVICE),\n                                \"goToSleep\",\n                                SystemClock.uptimeMillis()\n                            )\n                        }\n                        currentTouchTime = 0L\n                        currentTouchX = 0f\n                        currentTouchY = 0f\n                    }\n\n                    setAdditionalInstanceField(view, \"currentTouchTime\", currentTouchTime)\n                    setAdditionalInstanceField(view, \"currentTouchX\", currentTouchX)\n                    setAdditionalInstanceField(view, \"currentTouchY\", currentTouchY)\n                    v.performClick()\n                    false\n                })\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/NoPassword.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject NoPassword : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.internal.widget.LockPatternUtils\\$StrongAuthTracker\").methodFinder().first {\n            name == \"isBiometricAllowedForUser\"\n        }.createHook {\n            before {\n                it.result = true\n            }\n        }\n\n        loadClass(\"com.android.internal.widget.LockPatternUtils\").methodFinder().first {\n            name == \"isBiometricAllowedForUser\"\n        }.createHook {\n            before {\n                it.result = true\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/RemoveCamera.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport android.view.View\nimport android.widget.LinearLayout\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\nimport com.sevtinge.cemiuiler.utils.getObjectField\n\nobject RemoveCamera : BaseHook() {\n    override fun init() {\n        // 屏蔽右下角组件显示\n        loadClass(\n            if (isAndroidU())\n                \"com.android.keyguard.injector.KeyguardBottomAreaInjector\"\n            else\n                \"com.android.systemui.statusbar.phone.KeyguardBottomAreaView\").methodFinder().first {\n            name == \"onFinishInflate\"\n        }.createHook {\n            after {\n                (it.thisObject.getObjectField(\"mRightAffordanceViewLayout\") as LinearLayout).visibility =\n                    View.GONE\n            }\n        }\n\n        // 屏蔽滑动撞墙动画\n        loadClass(\"com.android.keyguard.KeyguardMoveRightController\").methodFinder().first {\n            name == \"onTouchMove\" && parameterCount == 2\n        }.createHook {\n            before {\n                it.result = false\n            }\n        }\n        loadClass(\"com.android.keyguard.KeyguardMoveRightController\").methodFinder().first {\n            name == \"reset\"\n        }.createHook {\n            before {\n                it.result = null\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/RemoveSmartScreen.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject RemoveSmartScreen : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer\").methodFinder().first {\n            name == \"inflateLeftView\"\n        }.createHook {\n            before {\n                it.result = null\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/lockscreen/ScramblePIN.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.lockscreen;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ScramblePIN extends BaseHook {\n\n    Class<?> mKeyguardPINView;\n\n    @Override\n    public void init() {\n        mKeyguardPINView = findClassIfExists(\"com.android.keyguard.KeyguardPINView\");\n\n        findAndHookMethod(mKeyguardPINView, \"onFinishInflate\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View[][] mViews = (View[][]) XposedHelpers.getObjectField(param.thisObject, \"mViews\");\n                ArrayList<View> mRandomViews = new ArrayList<>();\n                for (int row = 1; row <= 3; row++) {\n                    for (int col = 0; col <= 2; col++) {\n                        if (mViews[row][col] != null) mRandomViews.add(mViews[row][col]);\n                    }\n                }\n                mRandomViews.add(mViews[4][1]);\n                Collections.shuffle(mRandomViews);\n\n                View pinview = (View) param.thisObject;\n                ViewGroup row1 = pinview.findViewById(pinview.getResources().getIdentifier(\"row1\", \"id\", \"com.android.systemui\"));\n                ViewGroup row2 = pinview.findViewById(pinview.getResources().getIdentifier(\"row2\", \"id\", \"com.android.systemui\"));\n                ViewGroup row3 = pinview.findViewById(pinview.getResources().getIdentifier(\"row3\", \"id\", \"com.android.systemui\"));\n                ViewGroup row4 = pinview.findViewById(pinview.getResources().getIdentifier(\"row4\", \"id\", \"com.android.systemui\"));\n\n                row1.removeAllViews();\n                row2.removeAllViews();\n                row3.removeAllViews();\n                row4.removeViewAt(1);\n\n                mViews[1] = new View[]{mRandomViews.get(0), mRandomViews.get(1), mRandomViews.get(2)};\n                row1.addView(mRandomViews.get(0));\n                row1.addView(mRandomViews.get(1));\n                row1.addView(mRandomViews.get(2));\n\n                mViews[2] = new View[]{mRandomViews.get(3), mRandomViews.get(4), mRandomViews.get(5)};\n                row2.addView(mRandomViews.get(3));\n                row2.addView(mRandomViews.get(4));\n                row2.addView(mRandomViews.get(5));\n\n                mViews[3] = new View[]{mRandomViews.get(6), mRandomViews.get(7), mRandomViews.get(8)};\n                row3.addView(mRandomViews.get(6));\n                row3.addView(mRandomViews.get(7));\n                row3.addView(mRandomViews.get(8));\n\n                mViews[4] = new View[]{null, mRandomViews.get(9), mViews[4][2]};\n                row4.addView(mRandomViews.get(9), 1);\n\n                XposedHelpers.setObjectField(param.thisObject, \"mViews\", mViews);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/navigation/HandleLineCustom.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.navigation\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam\n\nobject HandleLineCustom : BaseHook() {\n    override fun init() {\n        val mNavigationHandleRadius =\n            mPrefsMap.getInt(\"system_ui_navigation_handle_custom_thickness\", 185).toFloat() / 100\n        try {\n            mResHook.setDensityReplacement(\n                \"com.android.systemui\", \"dimen\", \"navigation_handle_radius\", mNavigationHandleRadius\n            )\n        } catch (e: Exception) {\n            XposedLogUtils.logI(e.toString())\n        }\n        /*\n        val mNavigationHandleHeight =\n            mPrefsMap.getInt(\"system_ui_navigation_handle_custom_thickness\", 600).toFloat() / 10\n        val mNavigationHomeHandleWidth =\n            mPrefsMap.getInt(\"system_ui_navigation_handle_custom_width\", 145).toFloat()\n        val mNavigationHomeHandleWidthLand =\n            mPrefsMap.getInt(\"system_ui_navigation_handle_custom_width_land\", 254).toFloat()\n        try {\n            mResHook.setDensityReplacement(\n                \"com.android.systemui\",\n                \"dimen\",\n                \"navigation_handle_bottom\",\n                mNavigationHandleHeight\n            );\n        } catch (e: Exception) {\n            log(e.toString())\n        }\n\n         */\n\n        /*\n        try {\n        mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"navigation_home_handle_width\", 666.0f);\n        } catch (Exception e) {\n            log(String.valueOf(e));\n        }\n        try {\n        //写法1\n        //mResHook.setObjectReplacement(\"com.android.systemui\", \"dimen_land\", \"navigation_home_handle_width\", mNavigationHomeHandleWidthLand);\n        } catch (Exception e) {\n            log(String.valueOf(e));\n        }*/\n        // 写法2\n        // mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen_land\", \"navigation_home_handle_width\", mNavigationHomeHandleWidthLand);\n\n        // mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"navigation_handle_horizontal_margin\",  3);\n        // mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"navigation_handle_sample_horizontal_margin\",  3);\n    }\n\n    fun initResource(resParam: InitPackageResourcesParam) {\n        val mNavigationHandleLightColor =\n            mPrefsMap.getInt(\"system_ui_navigation_handle_custom_color\", -872415232)\n        val mNavigationHandleDarkColor =\n            mPrefsMap.getInt(\"system_ui_navigation_handle_custom_color_dark\", -1)\n        XposedLogUtils.logI(\"mNavigationHandleLightColor is $mNavigationHandleLightColor\")\n        XposedLogUtils.logI(\"mNavigationHandleDarkColor is $mNavigationHandleDarkColor\")\n        resParam.res.setReplacement(\n            \"com.android.systemui\",\n            \"color\",\n            \"navigation_bar_home_handle_dark_color\",\n            mNavigationHandleLightColor\n        )\n        resParam.res.setReplacement(\n            \"com.android.systemui\",\n            \"color\",\n            \"navigation_bar_home_handle_light_color\",\n            mNavigationHandleDarkColor\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/navigation/NavigationCustom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.navigation;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class NavigationCustom extends BaseHook {\n    @Override\n    public void init() {\n\n        float mNavigationHeight = ((float) mPrefsMap.getInt(\"system_ui_navigation_custom_height\", 100) / 10);\n        float mNavigationHeightLand = ((float) mPrefsMap.getInt(\"system_ui_navigation_custom_height_land\", 100) / 10);\n        float mNavigationFrameHeight = ((float) mPrefsMap.getInt(\"system_ui_navigation_frame_custom_height\", 100) / 10);\n        float mNavigationFrameHeightLand = ((float) mPrefsMap.getInt(\"system_ui_navigation_frame_custom_height_land\", 100) / 10);\n\n        try {\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"navigation_bar_height\", mNavigationHeight);\n        } catch (Exception e) {\n            XposedLogUtils.logI(String.valueOf(e));\n        }\n        try {\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"navigation_bar_height_landscape\", mNavigationHeightLand);\n        } catch (Exception e) {\n            XposedLogUtils.logI(String.valueOf(e));\n        }\n        try {\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"navigation_bar_frame_height\", mNavigationFrameHeight);\n        } catch (Exception e) {\n            XposedLogUtils.logI(String.valueOf(e));\n        }\n        try {\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"navigation_bar_frame_height_landscape\", mNavigationFrameHeightLand);\n        } catch (Exception e) {\n            XposedLogUtils.logI(String.valueOf(e));\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/plugin/EnableVolumeBlur.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.plugin;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class EnableVolumeBlur {\n    public static void initEnableVolumeBlur(ClassLoader classLoader) {\n        XposedHelpers.findAndHookMethod(\"com.android.systemui.miui.volume.Util\", classLoader, \"isSupportBlurS\", XC_MethodReplacement.returnConstant(true));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/plugin/HideDeviceControlEntry.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.plugin;\n\nimport static com.sevtinge.cemiuiler.module.base.BaseHook.mPrefsMap;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class HideDeviceControlEntry {\n    public static void initHideDeviceControlEntry(ClassLoader classLoader) {\n        if (mPrefsMap.getStringAsInt(\"system_ui_control_center_device_ctrl_entry\", 0) == 1) {\n            XposedHelpers.findAndHookMethod(\"miui.systemui.controlcenter.panel.main.external.DeviceControlEntryController\", classLoader, \"available\", boolean.class, XC_MethodReplacement.returnConstant(true));\n        } else if (mPrefsMap.getStringAsInt(\"system_ui_control_center_device_ctrl_entry\", 0) == 2) {\n            XposedHelpers.findAndHookMethod(\"miui.systemui.controlcenter.panel.main.external.DeviceControlEntryController\", classLoader, \"available\", boolean.class, XC_MethodReplacement.returnConstant(false));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/plugin/HideMiPlayEntry.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.plugin;\n\nimport static com.sevtinge.cemiuiler.module.base.BaseHook.mPrefsMap;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class HideMiPlayEntry {\n    public static void initHideMiPlayEntry(ClassLoader classLoader) {\n        if (mPrefsMap.getStringAsInt(\"system_ui_control_center_mi_play_entry\", 0) == 1) {\n            XposedHelpers.findAndHookMethod(\"miui.systemui.controlcenter.panel.main.external.MiPlayEntryController\", classLoader, \"available\", boolean.class, XC_MethodReplacement.returnConstant(true));\n        } else if (mPrefsMap.getStringAsInt(\"system_ui_control_center_mi_play_entry\", 0) == 2) {\n            XposedHelpers.findAndHookMethod(\"miui.systemui.controlcenter.panel.main.external.MiPlayEntryController\", classLoader, \"available\", boolean.class, XC_MethodReplacement.returnConstant(false));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/plugin/HideMiSmartHubEntry.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.plugin;\n\nimport static com.sevtinge.cemiuiler.module.base.BaseHook.mPrefsMap;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class HideMiSmartHubEntry {\n    public static void initHideMiSmartHubEntry(ClassLoader classLoader) {\n        if (mPrefsMap.getStringAsInt(\"system_ui_control_center_mi_smart_hub_entry\", 0) == 1) {\n            XposedHelpers.findAndHookMethod(\"miui.systemui.controlcenter.panel.main.external.MiSmartHubEntryController\", classLoader, \"available\", boolean.class, XC_MethodReplacement.returnConstant(true));\n        } else if (mPrefsMap.getStringAsInt(\"system_ui_control_center_mi_smart_hub_entry\", 0) == 2) {\n            XposedHelpers.findAndHookMethod(\"miui.systemui.controlcenter.panel.main.external.MiSmartHubEntryController\", classLoader, \"available\", boolean.class, XC_MethodReplacement.returnConstant(false));\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/plugin/PluginHelper.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.plugin;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidU;\n\nimport android.content.pm.ApplicationInfo;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.module.hook.systemui.NotificationVolumeSeparateSlider;\nimport com.sevtinge.cemiuiler.module.hook.systemui.controlcenter.BluetoothTileStyle;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\npublic class PluginHelper extends BaseHook {\n\n    private static ClassLoader pluginLoader = null;\n\n    private static ApplicationInfo appInfo = null;\n\n    @Override\n    public void init() {\n        if (!isAndroidU()) {\n            String pluginLoaderClass = isAndroidT()\n                ? \"com.android.systemui.shared.plugins.PluginInstance$Factory\"\n                : \"com.android.systemui.shared.plugins.PluginManagerImpl\";\n            hookAllMethods(pluginLoaderClass, \"getClassLoader\", new MethodHook() {\n                    private boolean isHooked = false;\n\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        appInfo = (ApplicationInfo) param.args[0];\n                        if (appInfo != null) {\n                            if (\"miui.systemui.plugin\".equals(appInfo.packageName) && !isHooked) {\n                                isHooked = true;\n                                if (pluginLoader == null) {\n                                    pluginLoader = (ClassLoader) param.getResult();\n                                }\n                                // XposedLogUtils.logD(\"pluginLoader: \" + pluginLoader);\n                                setClassLoader(pluginLoader);\n                            } else {\n                                if (!isHooked)\n                                    XposedLogUtils.logD(\"appInfo is not miui.systemui.plugin is: \" + appInfo.packageName + \" isHooked: \" + isHooked);\n                            }\n                        } else {\n                            XposedLogUtils.logE(TAG, \"appInfo is null\");\n                        }\n                    }\n                }\n            );\n        } else {\n            hookAllMethods(\"com.android.systemui.shared.plugins.PluginInstance$Factory\",\n                \"create\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        appInfo = (ApplicationInfo) param.args[1];\n                    }\n                }\n            );\n\n            findAndHookMethod(\"com.android.systemui.shared.plugins.PluginInstance$Factory$$ExternalSyntheticLambda0\",\n                \"get\", new MethodHook() {\n                    private boolean isHooked = false;\n\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        Object pathClassLoader = param.getResult();\n                        if (appInfo != null) {\n                            if (\"miui.systemui.plugin\".equals(appInfo.packageName) && !isHooked) {\n                                isHooked = true;\n                                if (pluginLoader == null) {\n                                    pluginLoader = (ClassLoader) pathClassLoader;\n                                }\n                                // XposedLogUtils.logD(\"AU pluginLoader: \" + pluginLoader);\n                                setClassLoader(pluginLoader);\n                            } else {\n                                if (!isHooked)\n                                    XposedLogUtils.logD(\"AU appInfo is not miui.systemui.plugin is: \" + appInfo.packageName + \" isHooked: \" + isHooked);\n                            }\n                        } else {\n                            XposedLogUtils.logE(TAG, \"AU appInfo is null\");\n                        }\n                    }\n                }\n            );\n        }\n    }\n\n    public void setClassLoader(ClassLoader classLoader) {\n        if (mPrefsMap.getBoolean(\"system_ui_plugin_enable_volume_blur\"))\n            EnableVolumeBlur.initEnableVolumeBlur(classLoader);\n        if (mPrefsMap.getStringAsInt(\"system_ui_control_center_mi_smart_hub_entry\", 0) != 0)\n            HideMiSmartHubEntry.initHideMiSmartHubEntry(classLoader);\n        if (mPrefsMap.getStringAsInt(\"system_ui_control_center_mi_play_entry\", 0) != 0)\n            HideMiPlayEntry.initHideMiPlayEntry(classLoader);\n        if (mPrefsMap.getStringAsInt(\"system_ui_control_center_device_ctrl_entry\", 0) != 0)\n            HideDeviceControlEntry.initHideDeviceControlEntry(classLoader);\n        if (mPrefsMap.getStringAsInt(\"system_ui_control_center_cc_bluetooth_tile_style\", 1) > 1)\n            BluetoothTileStyle.initHideDeviceControlEntry(classLoader);\n        if (mPrefsMap.getBoolean(\"system_framework_volume_separate_control\") && mPrefsMap.getBoolean(\"system_framework_volume_separate_slider\"))\n            NotificationVolumeSeparateSlider.initHideDeviceControlEntry(classLoader);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/BigMobileNetworkType.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.graphics.Typeface;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BigMobileNetworkType extends BaseHook {\n\n    @Override\n    public void init() {\n\n        /*MethodHook showSingleMobileType = new MethodHook(MethodHook.PRIORITY_HIGHEST) {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Object mobileIconState = param.args[0];\n                XposedHelpers.setObjectField(mobileIconState, \"showMobileDataTypeSingle\", true);\n                XposedHelpers.setObjectField(mobileIconState, \"fiveGDrawableId\", 0);\n            }\n        };\n\n        MethodHook afterUpdate = new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                Object mMobileLeftContainer = XposedHelpers.getObjectField(param.thisObject, \"mMobileLeftContainer\");\n                XposedHelpers.callMethod(mMobileLeftContainer, \"setVisibility\", 8);\n            }\n        };\n\n        hookAllMethods(\"com.android.systemui.statusbar.StatusBarMobileView\", \"applyMobileState\", showSingleMobileType);\n        hookAllMethods(\"com.android.systemui.statusbar.StatusBarMobileView\", \"applyMobileState\", afterUpdate);\n*/\n    }\n\n    @SuppressLint(\"DiscouragedApi\")\n    private void old() {\n        findAndHookMethod(\"com.android.systemui.statusbar.StatusBarMobileView\", \"init\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                ViewGroup mStatusBarMobileView = (ViewGroup) param.thisObject;\n                Context mContext = mStatusBarMobileView.getContext();\n                Resources mRes = mContext.getResources();\n\n                // 获取组件\n                // mMobileLeftContainer\n                int mobileContainerLeftId = mRes.getIdentifier(\"mobile_container_left\", \"id\", \"com.android.systemui\");\n                // mMobileType\n                int mobileTypeId = mRes.getIdentifier(\"mobile_type\", \"id\", \"com.android.systemui\");\n                // mLeftInOut\n                int mobileLeftMobileInoutId = mRes.getIdentifier(\n                    \"mobile_left_mobile_inout\",\n                    \"id\",\n                    \"com.android.systemui\");\n\n                ViewGroup mobileContainerLeft = mStatusBarMobileView.findViewById(mobileContainerLeftId);\n                TextView mobileType = mStatusBarMobileView.findViewById(mobileTypeId);\n                ImageView mobileLeftMobileInout = mStatusBarMobileView.findViewById(mobileLeftMobileInoutId);\n\n                // 获取插入位置\n                // mMobileRightContainer\n                int mobileContainerRightId = mRes.getIdentifier(\n                    \"mobile_container_right\",\n                    \"id\",\n                    \"com.android.systemui\"\n                );\n                ViewGroup mobileContainerRight = mStatusBarMobileView.findViewById(mobileContainerRightId);\n                ViewGroup rightParentLayout = (ViewGroup) mobileContainerRight.getParent();\n                int mobileContainerRightIndex = rightParentLayout.indexOfChild(mobileContainerRight);\n\n                // 创建新布局\n                LinearLayout.LayoutParams newLinearLayoutLP = new LinearLayout.LayoutParams(\n                    LinearLayout.LayoutParams.WRAP_CONTENT,\n                    LinearLayout.LayoutParams.MATCH_PARENT\n                );\n\n                LinearLayout newLinearlayout = new LinearLayout(mContext);\n                newLinearlayout.setLayoutParams(newLinearLayoutLP);\n                newLinearlayout.setId(mobileContainerLeftId);\n                newLinearlayout.setPadding(0, 0, 0, 0);\n\n\n                XposedHelpers.setObjectField(param.thisObject, \"mMobileLeftContainer\", newLinearlayout);\n                rightParentLayout.addView(newLinearlayout, mobileContainerRightIndex);\n\n                // 将组件插入新的布局\n                ((ViewGroup) mobileType.getParent()).removeView(mobileType);\n                ((ViewGroup) mobileLeftMobileInout.getParent()).removeView(mobileLeftMobileInout);\n                ((ViewGroup) mobileContainerLeft.getParent()).removeView(mobileContainerLeft);\n\n\n                // 类型\n                newLinearlayout.addView(mobileType);\n                LinearLayout.LayoutParams mobileTypeLp = new LinearLayout.LayoutParams(\n                    LinearLayout.LayoutParams.WRAP_CONTENT,\n                    LinearLayout.LayoutParams.WRAP_CONTENT\n                );\n\n                mobileTypeLp.gravity = Gravity.CENTER_VERTICAL;\n                mobileTypeLp.topMargin = 0;\n\n                mobileType.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12.5f);\n                boolean isBold = true;\n                if (isBold) {\n                    mobileType.setTypeface(Typeface.DEFAULT_BOLD);\n                }\n                mobileType.setLayoutParams(mobileTypeLp);\n\n\n                // 箭头\n                newLinearlayout.addView(mobileLeftMobileInout);\n                LinearLayout.LayoutParams mobileLeftMobileInoutLp = new LinearLayout.LayoutParams(\n                    LinearLayout.LayoutParams.WRAP_CONTENT,\n                    LinearLayout.LayoutParams.MATCH_PARENT\n                );\n                mobileLeftMobileInout.setLayoutParams(mobileLeftMobileInoutLp);\n\n                // 屏蔽更新布局\n                findAndHookMethod(\"com.android.systemui.statusbar.StatusBarMobileView\", \"updateMobileTypeLayout\", String.class, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        param.args[0] = null;\n                    }\n                });\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/DisplayHardwareDetail.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar;\n\nimport static de.robv.android.xposed.XposedHelpers.callMethod;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.graphics.Typeface;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.os.Message;\nimport android.os.PowerManager;\nimport android.util.TypedValue;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport androidx.annotation.NonNull;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.io.FileInputStream;\nimport java.io.FileNotFoundException;\nimport java.io.RandomAccessFile;\nimport java.util.ArrayList;\nimport java.util.Locale;\nimport java.util.Objects;\nimport java.util.Properties;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DisplayHardwareDetail extends BaseHook {\n    boolean showDeviceTemp;\n    boolean showBatteryDetail;\n    boolean isTempAtRight;\n    boolean isBatteryAtRight;\n    /*boolean hasRightIcon = false;\n    boolean hasLeftIcon = false;*/\n\n    Class<?> mDependency;\n    Class<?> mChargeUtils;\n    Class<?> mIconManager;\n    Class<?> mNetworkSpeedView;\n    Class<?> mDarkIconDispatcher;\n    Class<?> mStatusBarIconHolder;\n    Class<?> mNetworkSpeedController;\n    Class<?> mMiuiCollapsedStatusBarFragment;\n\n    int mStatusbarTextIconLayoutResId;\n    static final ArrayList<TextView> mBatteryDetailViews = new ArrayList<>();\n\n    private String getSlotNameByType(int mIconType) {\n        String slotName = \"\";\n        if (mIconType == 91) {\n            slotName = \"battery_detail\";\n        } else if (mIconType == 92) {\n            slotName = \"device_temp\";\n        }\n        return slotName;\n    }\n\n    static class TextIcon {\n        public boolean atRight;\n        public int iconType;\n\n        public TextIcon(boolean mAtRight, int mIconType) {\n            atRight = mAtRight;\n            iconType = mIconType;\n        }\n    }\n\n    static class TextIconInfo {\n        public boolean iconShow;\n        public int iconType;\n        public String iconText;\n    }\n\n    @Override\n    public void init() {\n        showBatteryDetail = mPrefsMap.getBoolean(\"system_ui_statusbar_battery_enable\"); // 电池相关\n        showDeviceTemp = mPrefsMap.getBoolean(\"system_ui_statusbar_temp_enable\"); // 温度相关\n\n        isTempAtRight = mPrefsMap.getBoolean(\"system_ui_statusbar_temp_right_show\");\n        isBatteryAtRight = mPrefsMap.getBoolean(\"system_ui_statusbar_battery_right_show\");\n\n        mStatusbarTextIconLayoutResId = mResHook.addResource(\"statusbar_text_icon\", R.layout.statusbar_text_icon);\n        mDependency = findClassIfExists(\"com.android.systemui.Dependency\");\n        mChargeUtils = showBatteryDetail ? findClassIfExists(\"com.android.keyguard.charge.ChargeUtils\") : null;\n        mIconManager = findClassIfExists(\"com.android.systemui.statusbar.phone.StatusBarIconController$IconManager\");\n        mNetworkSpeedView = findClassIfExists(\"com.android.systemui.statusbar.views.NetworkSpeedView\");\n        mDarkIconDispatcher = findClassIfExists(\"com.android.systemui.plugins.DarkIconDispatcher\");\n        mStatusBarIconHolder = findClassIfExists(\"com.android.systemui.statusbar.phone.StatusBarIconHolder\");\n        mNetworkSpeedController = findClassIfExists(\"com.android.systemui.statusbar.policy.NetworkSpeedController\");\n        mMiuiCollapsedStatusBarFragment = findClassIfExists(\"com.android.systemui.statusbar.phone.MiuiCollapsedStatusBarFragment\");\n\n        Class<?> mFinalChargeUtils = mChargeUtils;\n\n        ArrayList<TextIcon> mTextIcons = new ArrayList<>();\n        if (showBatteryDetail) {\n            mTextIcons.add(new TextIcon(isBatteryAtRight, 91));\n        }\n        if (showDeviceTemp) {\n            mTextIcons.add(new TextIcon(isTempAtRight, 92));\n        }\n\n        boolean hasRightIcon = false;\n        boolean hasLeftIcon = false;\n        for (TextIcon ti : mTextIcons) {\n            if (ti.atRight) {\n                hasRightIcon = true;\n            } else {\n                hasLeftIcon = true;\n            }\n        }\n\n        if (hasRightIcon) {\n            findAndHookMethod(\"com.android.systemui.statusbar.phone.MiuiCollapsedStatusBarFragment\", \"initMiuiViewsOnViewCreated\", View.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    Object iconController = XposedHelpers.getObjectField(param.thisObject, \"mStatusBarIconController\");\n                    for (TextIcon ti : mTextIcons) {\n                        if (ti.atRight) {\n                            int slotIndex = (int) callMethod(iconController, \"getSlotIndex\", getSlotNameByType(ti.iconType));\n                            Object iconHolder = callMethod(iconController, \"getIcon\", slotIndex, 0);\n                            if (iconHolder == null) {\n                                iconHolder = XposedHelpers.newInstance(mStatusBarIconHolder);\n                                XposedHelpers.setObjectField(iconHolder, \"mType\", ti.iconType);\n                                callMethod(iconController, \"setIcon\", slotIndex, iconHolder);\n                            }\n                        }\n                    }\n                }\n            });\n\n            hookAllMethods(mIconManager, \"addHolder\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    if (param.args.length != 4) return;\n                    Object iconHolder = param.args[3];\n                    int type = (int) callMethod(iconHolder, \"getType\");\n                    if (type == 91 || type == 92) {\n                        Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) callMethod(param.thisObject, \"onCreateLayoutParams\");\n                        TextIcon createIcon = null;\n                        for (TextIcon ti : mTextIcons) {\n                            if (ti.iconType == type) {\n                                createIcon = ti;\n                                break;\n                            }\n                        }\n                        TextView batteryView = createBatteryDetailView(mContext, lp, createIcon);\n                        int i = (int) param.args[0];\n                        ViewGroup mGroup = (ViewGroup) XposedHelpers.getObjectField(param.thisObject, \"mGroup\");\n                        mGroup.addView(batteryView, i);\n                        mBatteryDetailViews.add(batteryView);\n                        param.setResult(batteryView);\n                    }\n                }\n            });\n        }\n\n        if (hasLeftIcon) {\n            findAndHookMethod(mMiuiCollapsedStatusBarFragment, \"initMiuiViewsOnViewCreated\", View.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    Context mContext = (Context) callMethod(param.thisObject, \"getContext\");\n                    Object DarkIconDispatcher = XposedHelpers.callStaticMethod(mDependency, \"get\", mDarkIconDispatcher);\n                    TextView mSplitter = (TextView) XposedHelpers.getObjectField(param.thisObject, \"mDripNetworkSpeedSplitter\");\n                    ViewGroup batteryViewContainer = (ViewGroup) mSplitter.getParent();\n                    int bvIndex = batteryViewContainer.indexOfChild(mSplitter);\n                    LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mSplitter.getLayoutParams();\n                    for (TextIcon ti : mTextIcons) {\n                        if (!ti.atRight) {\n                            TextView batteryView = createBatteryDetailView(mContext, lp, ti);\n                            batteryViewContainer.addView(batteryView, bvIndex + 1);\n                            mBatteryDetailViews.add(batteryView);\n                            callMethod(DarkIconDispatcher, \"addDarkReceiver\", batteryView);\n                            XposedHelpers.setAdditionalInstanceField(param.thisObject, getSlotNameByType(ti.iconType), batteryView);\n                        }\n                    }\n                }\n            });\n\n            findAndHookMethod(mMiuiCollapsedStatusBarFragment, \"showSystemIconArea\", boolean.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    for (TextIcon ti : mTextIcons) {\n                        if (!ti.atRight) {\n                            Object bv = XposedHelpers.getAdditionalInstanceField(param.thisObject, getSlotNameByType(ti.iconType));\n                            if (bv != null) {\n                                callMethod(bv, \"setVisibilityByController\", true);\n                            }\n                        }\n                    }\n                }\n            });\n\n            findAndHookMethod(mMiuiCollapsedStatusBarFragment, \"hideSystemIconArea\", boolean.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    for (TextIcon ti : mTextIcons) {\n                        if (!ti.atRight) {\n                            Object bv = XposedHelpers.getAdditionalInstanceField(param.thisObject, getSlotNameByType((ti.iconType)));\n                            if (bv != null) {\n                                callMethod(bv, \"setVisibilityByController\", false);\n                            }\n                        }\n                    }\n                }\n            });\n        }\n\n        findAndHookMethod(mNetworkSpeedView, \"getSlot\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Object customSlot = XposedHelpers.getAdditionalInstanceField(param.thisObject, \"mCustomSlot\");\n                if (customSlot != null) {\n                    param.setResult(customSlot);\n                }\n            }\n        });\n\n        Helpers.hookAllConstructors(\"com.android.systemui.statusbar.policy.NetworkSpeedController\", lpparam.classLoader, new Helpers.MethodHook() {\n            Handler mBgHandler;\n\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                Context mContext = (Context) param.args[0];\n                final Handler mHandler = new Handler(Looper.getMainLooper()) {\n                    public void handleMessage(Message message) {\n                        if (message.what == 100021) {\n                            TextIconInfo tii = (TextIconInfo) message.obj;\n                            String slotName = getSlotNameByType(tii.iconType);\n                            for (TextView tv : mBatteryDetailViews) {\n                                if (slotName.equals(XposedHelpers.getAdditionalInstanceField(tv, \"mCustomSlot\"))) {\n                                    XposedHelpers.callMethod(tv, \"setBlocked\", !tii.iconShow);\n                                    XposedHelpers.callMethod(tv, \"setNetworkSpeed\", tii.iconText);\n                                }\n                            }\n                        }\n                    }\n                };\n                mBgHandler = new Handler((Looper) param.args[1]) {\n                    @SuppressLint(\"DefaultLocale\")\n                    public void handleMessage(@NonNull Message message) {\n                        String subKey = \"\";\n                        if (message.what == 200021) {\n                            String batteryInfo = \"\";\n                            String deviceInfo = \"\";\n                            boolean showBatteryInfo = showBatteryDetail;\n                            if (showBatteryInfo && mPrefsMap.getBoolean(\"system_ui_statusbar_battery_only_changing_show\") && mFinalChargeUtils != null) {\n                                Object batteryStatus = Helpers.getStaticObjectFieldSilently(mFinalChargeUtils, \"sBatteryStatus\");\n                                if (batteryStatus == null) {\n                                    showBatteryInfo = false;\n                                } else {\n                                    showBatteryInfo = (boolean) XposedHelpers.callMethod(batteryStatus, \"isCharging\");\n                                }\n                            }\n                            if (showBatteryInfo || showDeviceTemp) {\n                                Properties props = null;\n                                String cpuProps = null;\n                                PowerManager powerMgr = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);\n                                boolean isScreenOn = powerMgr.isInteractive();\n                                if (isScreenOn) {\n                                    FileInputStream fis = null;\n                                    RandomAccessFile cpuReader = null;\n                                    try {\n                                        fis = new FileInputStream(\"/sys/class/power_supply/battery/uevent\");\n                                        props = new Properties();\n                                        props.load(fis);\n                                        if (showDeviceTemp) {\n                                            cpuReader = new RandomAccessFile(\"/sys/devices/virtual/thermal/thermal_zone0/temp\", \"r\");\n                                            if (!Objects.equals(mPrefsMap.getString(\"system_ui_statusbar_temp_fix_cpu_get\", \"0\"), \"\")) {\n                                                try {\n                                                    cpuReader = new RandomAccessFile(\"/sys/devices/virtual/thermal/thermal_zone\" + mPrefsMap.getString(\"system_ui_statusbar_temp_fix_cpu_get\", \"0\") + \"/temp\", \"r\");\n                                                } catch (FileNotFoundException e) {\n                                                    XposedLogUtils.logI(\"get /sys/devices/virtual/thermal/thermal_zone*/temp (\" + mPrefsMap.getString(\"system_ui_statusbar_temp_fix_cpu_get\", \"0\") + \") failed: \" + e);\n                                                }\n                                            }\n                                            cpuProps = cpuReader.readLine();\n                                        }\n                                    } catch (Throwable ignored) {\n                                    } finally {\n                                        try {\n                                            if (fis != null) {\n                                                fis.close();\n                                            }\n                                            if (cpuReader != null) {\n                                                cpuReader.close();\n                                            }\n                                        } catch (Throwable ignored) {\n                                        }\n                                    }\n                                }\n                                if (showBatteryInfo && props != null) {\n                                    String currVal;\n                                    int rawCurr = 0;\n                                    try {\n                                        rawCurr = -1 * Math.round(Integer.parseInt(props.getProperty(\"POWER_SUPPLY_CURRENT_NOW\")) / 1000f);// 概率fc\n                                    } catch (NumberFormatException e) {\n                                        XposedLogUtils.logI(\"get POWER_SUPPLY_CURRENT_NOW failed: \" + e);\n                                    }\n                                    String preferred = \"mA\";\n                                    if (mPrefsMap.getBoolean(\"system_ui_statusbar_battery_electric_current\")) { // 电流始终显示正值\n                                        rawCurr = Math.abs(rawCurr);\n                                    }\n                                    if (Math.abs(rawCurr) > 999) {\n                                        currVal = String.format(\"%.2f\", rawCurr / 1000f);\n                                        preferred = \"A\";\n                                    } else {\n                                        currVal = \"\" + rawCurr;\n                                    }\n                                    int opt = mPrefsMap.getStringAsInt(\"system_ui_statusbar_battery_show\", 1); // 电池显示内容\n                                    int hideUnit = mPrefsMap.getStringAsInt(\"system_ui_statusbar_battery_disable\", 0);\n                                    String powerUnit = (hideUnit == 1 || hideUnit == 2) ? \"\" : \"W\";\n                                    String currUnit = (hideUnit == 1 || hideUnit == 3) ? \"\" : preferred;\n                                    if (opt == 1) {\n                                        float voltVal = 0f;\n                                        String powerNow;\n                                        try {\n                                            powerNow = props.getProperty(\"POWER_SUPPLY_VOLTAGE_NOW\");\n                                        } catch (Exception e) {\n                                            throw new RuntimeException(e);\n                                        }\n                                        if (powerNow != null)\n                                            voltVal = Integer.parseInt(powerNow) / 1000f / 1000f;\n                                        String simpleWatt = String.format(Locale.getDefault(), \"%.2f\", Math.abs(voltVal * rawCurr) / 1000);\n                                        String splitChar = mPrefsMap.getBoolean(\"system_ui_statusbar_battery_line_show\")\n                                            ? \" \" : \"\\n\";\n                                        batteryInfo = simpleWatt + powerUnit + splitChar + currVal + currUnit;\n                                        if (mPrefsMap.getBoolean(\"system_ui_statusbar_battery_opposite\")) {\n                                            batteryInfo = currVal + currUnit + splitChar + simpleWatt + powerUnit;\n                                        }\n                                    } else if (opt == 2) {\n                                        float voltVal = 0f;\n                                        String powerNow;\n                                        try {\n                                            powerNow = props.getProperty(\"POWER_SUPPLY_VOLTAGE_NOW\");\n                                        } catch (Exception e) {\n                                            throw new RuntimeException(e);\n                                        }\n                                        if (powerNow != null)\n                                            voltVal = Integer.parseInt(powerNow) / 1000f / 1000f;\n                                        String simpleWatt = String.format(Locale.getDefault(), \"%.2f\", Math.abs(voltVal * rawCurr) / 1000);\n                                        batteryInfo = simpleWatt + powerUnit;\n                                    } else {\n                                        batteryInfo = currVal + currUnit;\n                                    }\n                                }\n                                if (showDeviceTemp && props != null && cpuProps != null) {\n                                    int batteryTempVal = 0;\n                                    String powerTempNow;\n                                    try {\n                                        powerTempNow = props.getProperty(\"POWER_SUPPLY_TEMP\");\n                                    } catch (Exception e) {\n                                        throw new RuntimeException(e);\n                                    }\n                                    if (powerTempNow != null)\n                                        batteryTempVal = Integer.parseInt(powerTempNow);\n                                    int cpuTempVal = Integer.parseInt(cpuProps);\n                                    boolean DecimalPlacesOr = mPrefsMap.getBoolean(\"system_ui_statusbar_temp_decimal_places\");\n                                    String DecimalPlaces = DecimalPlacesOr ? \"%.0f\" : \"%.1f\";\n                                    String simpleBatteryTemp = String.format(Locale.getDefault(), DecimalPlaces, batteryTempVal / 10f);\n                                    String simpleCpuTemp = String.format(Locale.getDefault(), DecimalPlaces, cpuTempVal / 1000f);\n                                    int opt = mPrefsMap.getStringAsInt(\"system_ui_statusbar_temp_show\", 1);\n                                    boolean hideUnit = mPrefsMap.getBoolean(\"system_ui_statusbar_temp_disable\");\n                                    String tempUnit = hideUnit ? \"\" : \"℃\";\n                                    if (opt == 1) {\n                                        String splitChar = mPrefsMap.getBoolean(\"system_ui_statusbar_temp_line_show\")\n                                            ? \" \" : \"\\n\";\n                                        deviceInfo = simpleBatteryTemp + tempUnit + splitChar + simpleCpuTemp + tempUnit;\n                                        if (mPrefsMap.getBoolean(\"system_ui_statusbar_temp_opposite\")) {\n                                            deviceInfo = simpleCpuTemp + tempUnit + splitChar + simpleBatteryTemp + tempUnit;\n                                        }\n                                    } else if (opt == 2) {\n                                        deviceInfo = simpleBatteryTemp + tempUnit;\n                                    } else {\n                                        deviceInfo = simpleCpuTemp + tempUnit;\n                                    }\n                                }\n                            }\n                            if (showBatteryDetail) {\n                                TextIconInfo tii = new TextIconInfo();\n                                tii.iconShow = showBatteryInfo;\n                                tii.iconText = batteryInfo;\n                                tii.iconType = 91;\n                                subKey = \"battery\";\n                                mHandler.obtainMessage(100021, tii).sendToTarget();\n                            }\n                            if (showDeviceTemp) {\n                                TextIconInfo tii = new TextIconInfo();\n                                tii.iconShow = showDeviceTemp;\n                                tii.iconText = deviceInfo;\n                                tii.iconType = 92;\n                                subKey = \"temp\";\n                                mHandler.obtainMessage(100021, tii).sendToTarget();\n                            }\n                        }\n                        mBgHandler.removeMessages(200021);\n                        mBgHandler.sendEmptyMessageDelayed(200021, mPrefsMap.getInt(\"system_ui_statusbar_\" + subKey + \"_update_spacing\", 2) * 1000L);\n                    }\n                };\n                mBgHandler.sendEmptyMessage(200021);\n            }\n        });\n    }\n\n    @SuppressLint(\"DiscouragedApi\")\n    private TextView createBatteryDetailView(Context mContext, LinearLayout.LayoutParams lp, TextIcon ti) {\n        Resources res = mContext.getResources();\n        TextView batteryView = (TextView) LayoutInflater.from(mContext).inflate(res.getIdentifier(\"network_speed\", \"layout\", \"com.android.systemui\"), (ViewGroup) null);\n        batteryView.setTag(\"slot_text_icon\");\n        batteryView.setVisibility(View.VISIBLE);\n        XposedHelpers.setObjectField(batteryView, \"mVisibilityByDisableInfo\", 0);\n        XposedHelpers.setObjectField(batteryView, \"mVisibleByController\", true);\n        XposedHelpers.setObjectField(batteryView, \"mShown\", true);\n        XposedHelpers.setAdditionalInstanceField(batteryView, \"mCustomSlot\", getSlotNameByType(ti.iconType));\n        int styleId = res.getIdentifier(\"TextAppearance.StatusBar.Clock\", \"style\", \"com.android.systemui\");\n        batteryView.setTextAppearance(styleId);\n        String subKey = \"\";\n        if (ti.iconType == 91) {\n            subKey = \"battery\";\n        } else if (ti.iconType == 92) {\n            subKey = \"temp\";\n        }\n        float fontSize = mPrefsMap.getInt(\"system_ui_statusbar_\" + subKey + \"_size\", 13);\n        int opt = mPrefsMap.getStringAsInt(\"system_ui_statusbar_\" + subKey + \"_show\", 1);\n        if (!mPrefsMap.getBoolean(\"system_ui_statusbar_\" + subKey + \"_line_show\") || mPrefsMap.getStringAsInt(\"system_ui_statusbar_\" + subKey + \"_show\", 1) != 1) {\n            fontSize = (float) (fontSize * 0.5);\n        }\n        XposedLogUtils.logI(\"fontsize = \" + fontSize);\n        int align = mPrefsMap.getStringAsInt(\"system_ui_status_bar_\" + subKey + \"_align\", 1);\n        int fixedWidth = mPrefsMap.getInt(\"system_ui_statusbar_\" + subKey + \"_fixedcontent_width\", 10);\n        int leftMargin = mPrefsMap.getInt(\"system_ui_statusbar_\" + subKey + \"_left_margin\", 4);\n        int rightMargin = mPrefsMap.getInt(\"system_ui_statusbar_\" + subKey + \"_right_margin\", 4);\n        int vertical = mPrefsMap.getInt(\"system_ui_statusbar_\" + subKey + \"_vertical_offset\", 8);\n        boolean isSingleRow = mPrefsMap.getBoolean(\"system_ui_statusbar_\" + subKey + \"_line_show\");\n        boolean isFontBold = mPrefsMap.getBoolean(\"system_ui_statusbar_\" + subKey + \"_bold\");\n        if (opt == 1 && !isSingleRow) {\n            batteryView.setSingleLine(false);\n            batteryView.setMaxLines(2);\n            batteryView.setLineSpacing(0, fontSize > 8.5f ? 0.85f : 0.85f);\n        }\n        batteryView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize);\n        if (isFontBold) batteryView.setTypeface(Typeface.DEFAULT_BOLD);\n        switch (align) {\n            case 2 -> batteryView.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);\n            case 3 -> batteryView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);\n            case 4 -> batteryView.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END);\n        }\n        if (fixedWidth > 10)\n            lp.width = (int) (batteryView.getResources().getDisplayMetrics().density * fixedWidth);\n        leftMargin = (int) TypedValue.applyDimension(\n            TypedValue.COMPLEX_UNIT_DIP,\n            leftMargin,\n            res.getDisplayMetrics()\n        );\n        int topMargin = 0;\n        if (vertical != 0) {\n            float marginTop = TypedValue.applyDimension(\n                TypedValue.COMPLEX_UNIT_DIP,\n                (vertical - 8) * 0.5f,\n                res.getDisplayMetrics()\n            );\n            topMargin = (int) marginTop;\n        }\n        rightMargin = (int) TypedValue.applyDimension(\n            TypedValue.COMPLEX_UNIT_DIP,\n            rightMargin,\n            res.getDisplayMetrics()\n        );\n        batteryView.setPaddingRelative(leftMargin, topMargin, rightMargin, 0);\n        batteryView.setLayoutParams(lp);\n        return batteryView;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/DoubleTapToSleep.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar\n\nimport android.content.Context\nimport android.os.SystemClock\nimport android.view.MotionEvent\nimport android.view.View\nimport android.view.ViewGroup\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XposedHelpers\nimport kotlin.math.abs\n\nobject DoubleTapToSleep : BaseHook() {\n\n    override fun init() {\n        loadClass(\"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView\").methodFinder().first {\n            name == \"onFinishInflate\"\n        }.createHook {\n            before {\n                val view = it.thisObject as ViewGroup\n                XposedHelpers.setAdditionalInstanceField(view, \"currentTouchTime\", 0L)\n                XposedHelpers.setAdditionalInstanceField(view, \"currentTouchX\", 0f)\n                XposedHelpers.setAdditionalInstanceField(view, \"currentTouchY\", 0f)\n                view.setOnTouchListener(View.OnTouchListener { v, event ->\n                    if (event.action != MotionEvent.ACTION_DOWN) return@OnTouchListener false\n                    var currentTouchTime =\n                        XposedHelpers.getAdditionalInstanceField(view, \"currentTouchTime\") as Long\n                    var currentTouchX =\n                        XposedHelpers.getAdditionalInstanceField(view, \"currentTouchX\") as Float\n                    var currentTouchY =\n                        XposedHelpers.getAdditionalInstanceField(view, \"currentTouchY\") as Float\n                    val lastTouchTime = currentTouchTime\n                    val lastTouchX = currentTouchX\n                    val lastTouchY = currentTouchY\n                    currentTouchTime = System.currentTimeMillis()\n                    currentTouchX = event.x\n                    currentTouchY = event.y\n                    if (currentTouchTime - lastTouchTime < 250L && abs(currentTouchX - lastTouchX) < 100f && abs(\n                            currentTouchY - lastTouchY\n                        ) < 100f\n                    ) {\n                        XposedHelpers.callMethod(\n                            v.context.getSystemService(Context.POWER_SERVICE),\n                            \"goToSleep\",\n                            SystemClock.uptimeMillis()\n                        )\n                        currentTouchTime = 0L\n                        currentTouchX = 0f\n                        currentTouchY = 0f\n                    }\n                    XposedHelpers.setAdditionalInstanceField(\n                        view,\n                        \"currentTouchTime\",\n                        currentTouchTime\n                    )\n                    XposedHelpers.setAdditionalInstanceField(view, \"currentTouchX\", currentTouchX)\n                    XposedHelpers.setAdditionalInstanceField(view, \"currentTouchY\", currentTouchY)\n                    v.performClick()\n                    false\n                })\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/DualRowSignalHook.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.util.SparseIntArray;\nimport android.util.TypedValue;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport java.util.HashMap;\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DualRowSignalHook extends BaseHook {\n\n    @Override\n    public void init() {\n        boolean mobileTypeSingle = mPrefsMap.getBoolean(\"system_ui_statusbar_mobile_type_enable\"); // 移动网络类型单独显示\n        if (!mobileTypeSingle) {\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"status_bar_mobile_type_half_to_top_distance\", 3);\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"status_bar_mobile_left_inout_over_strength\", 0);\n            mResHook.setDensityReplacement(\"com.android.systemui\", \"dimen\", \"status_bar_mobile_type_middle_to_strength_start\", -0.4f);\n        }\n\n        HashMap<String, Integer> dualSignalResMap = new HashMap<String, Integer>();\n        String[] colorModeList = {\"\", \"dark\", \"tint\"};\n//        String[] iconStyles = {\"\", \"thick\", \"theme\"};\n        String selectedIconStyle = mPrefsMap.getString(\"system_ui_status_mobile_network_icon_style\", \"\"); // 图标样式\n\n        Helpers.findAndHookMethod(\"com.android.systemui.SystemUIApplication\", lpparam.classLoader, \"onCreate\", new MethodHook() {\n            private boolean isHooked = false;\n\n            @Override\n            @SuppressLint(\"DiscouragedApi\")\n            protected void after(MethodHookParam param) throws Throwable {\n                if (!isHooked) {\n                    isHooked = true;\n                    Context mContext = (Context) XposedHelpers.callMethod(param.thisObject, \"getApplicationContext\");\n                    Resources modRes = Helpers.getModuleRes(mContext);\n                    for (int slot = 1; slot <= 2; slot++) {\n                        for (int lvl = 0; lvl <= 5; lvl++) {\n                            for (String colorMode : colorModeList) {\n                                if (!selectedIconStyle.equals(\"theme\") || !colorMode.equals(\"tint\")) {\n                                    String dualIconResName = \"statusbar_signal_\" + slot + \"_\" + lvl + (!colorMode.equals(\"\") ? (\"_\" + colorMode) : \"\") + (!selectedIconStyle.equals(\"\") ? (\"_\" + selectedIconStyle) : \"\");\n                                    int iconResId = modRes.getIdentifier(dualIconResName, \"drawable\", Helpers.mAppModulePkg);\n                                    dualSignalResMap.put(dualIconResName, mResHook.addResource(dualIconResName, iconResId));\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        SparseIntArray signalResToLevelMap = new SparseIntArray();\n        // 移动网络和WiFi网络都移动到左侧\n        boolean moveSignalLeft = (mPrefsMap.getBoolean(\"system_ui_status_bar_wifi_at_left\") || mPrefsMap.getBoolean(\"system_ui_status_bar_mobile_network_at_left\"));\n        String ControllerImplName = moveSignalLeft ? \"MiuiDripLeftStatusBarIconControllerImpl\" : \"StatusBarIconControllerImpl\";\n        Helpers.hookAllMethods(\"com.android.systemui.statusbar.phone.\" + ControllerImplName, lpparam.classLoader, \"setMobileIcons\", new MethodHook() {\n            private boolean isHooked = false;\n\n            @Override\n            @SuppressLint(\"DiscouragedApi\")\n            protected void before(MethodHookParam param) throws Throwable {\n                if (!isHooked) {\n                    isHooked = true;\n                    Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                    Resources res = mContext.getResources();\n                    signalResToLevelMap.put(res.getIdentifier(\"stat_sys_signal_0\", \"drawable\", lpparam.packageName), 0);\n                    signalResToLevelMap.put(res.getIdentifier(\"stat_sys_signal_1\", \"drawable\", lpparam.packageName), 1);\n                    signalResToLevelMap.put(res.getIdentifier(\"stat_sys_signal_2\", \"drawable\", lpparam.packageName), 2);\n                    signalResToLevelMap.put(res.getIdentifier(\"stat_sys_signal_3\", \"drawable\", lpparam.packageName), 3);\n                    signalResToLevelMap.put(res.getIdentifier(\"stat_sys_signal_4\", \"drawable\", lpparam.packageName), 4);\n                    signalResToLevelMap.put(res.getIdentifier(\"stat_sys_signal_5\", \"drawable\", lpparam.packageName), 5);\n                    signalResToLevelMap.put(res.getIdentifier(\"stat_sys_signal_null\", \"drawable\", lpparam.packageName), 6);\n                }\n                List<?> iconStates = (List<?>) param.args[1];\n                if (iconStates.size() == 2) {\n                    Object mainIconState = iconStates.get(0);\n                    Object subIconState = iconStates.get(1);\n                    boolean subDataConnected = (boolean) XposedHelpers.getObjectField(subIconState, \"dataConnected\");\n                    XposedHelpers.setObjectField(subIconState, \"visible\", false);\n                    int mainSignalResId = (int) XposedHelpers.getObjectField(mainIconState, \"strengthId\");\n                    int subSignalResId = (int) XposedHelpers.getObjectField(subIconState, \"strengthId\");\n                    int mainLevel = signalResToLevelMap.get(mainSignalResId);\n                    int subLevel = signalResToLevelMap.get(subSignalResId);\n                    int level;\n                    if (subDataConnected) {\n                        level = subLevel * 10 + mainLevel;\n                        String[] syncFields = {\"showName\", \"activityIn\", \"activityOut\"};\n                        for (String field : syncFields) {\n                            XposedHelpers.setObjectField(mainIconState, field, XposedHelpers.getObjectField(subIconState, field));\n                        }\n                        XposedHelpers.setObjectField(mainIconState, \"dataConnected\", true);\n                    } else {\n                        level = mainLevel * 10 + subLevel;\n                    }\n                    XposedHelpers.setObjectField(mainIconState, \"strengthId\", level);\n                    param.args[1] = iconStates;\n                }\n            }\n        });\n\n        MethodHook beforeUpdate = new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                Object mobileIconState = param.args[0];\n                boolean visible = (boolean) XposedHelpers.getObjectField(mobileIconState, \"visible\");\n                boolean airplane = (boolean) XposedHelpers.getObjectField(mobileIconState, \"airplane\");\n                int level = (int) XposedHelpers.getObjectField(mobileIconState, \"strengthId\");\n                if (!visible || airplane || level == 0 || level > 100) {\n                    XposedHelpers.setAdditionalInstanceField(param.thisObject, \"subStrengthId\", -1);\n                } else {\n                    XposedHelpers.setAdditionalInstanceField(param.thisObject, \"subStrengthId\", level % 10);\n                    XposedHelpers.setObjectField(mobileIconState, \"fiveGDrawableId\", 0);\n                }\n            }\n        };\n        MethodHook afterUpdate = new MethodHook() {\n            @Override\n            protected void after(final MethodHookParam param) throws Throwable {\n                int subStrengthId = (int) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"subStrengthId\");\n                if (subStrengthId < 0) return;\n                Object mSmallHd = XposedHelpers.getObjectField(param.thisObject, \"mSmallHd\");\n                XposedHelpers.callMethod(mSmallHd, \"setVisibility\", 8);\n                Object mSmallRoaming = XposedHelpers.getObjectField(param.thisObject, \"mSmallRoaming\");\n                XposedHelpers.callMethod(mSmallRoaming, \"setVisibility\", 0);\n            }\n        };\n        Helpers.hookAllMethods(\"com.android.systemui.statusbar.StatusBarMobileView\", lpparam.classLoader, \"applyMobileState\", beforeUpdate);\n        Helpers.hookAllMethods(\"com.android.systemui.statusbar.StatusBarMobileView\", lpparam.classLoader, \"applyMobileState\", afterUpdate);\n\n        MethodHook resetImageDrawable = new MethodHook() {\n            @Override\n            protected void before(final MethodHookParam param) throws Throwable {\n                int subStrengthId = (int) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"subStrengthId\");\n                if (subStrengthId < 0) return;\n                if (subStrengthId == 6) subStrengthId = 0;\n                Object mobileIconState = XposedHelpers.getObjectField(param.thisObject, \"mState\");\n                int level1 = (int) XposedHelpers.getObjectField(mobileIconState, \"strengthId\");\n                level1 = level1 / 10;\n                if (level1 == 6) level1 = 0;\n                boolean mLight = (boolean) XposedHelpers.getObjectField(param.thisObject, \"mLight\");\n                boolean mUseTint = (boolean) XposedHelpers.getObjectField(param.thisObject, \"mUseTint\");\n                Object mSmallRoaming = XposedHelpers.getObjectField(param.thisObject, \"mSmallRoaming\");\n                Object mMobile = XposedHelpers.getObjectField(param.thisObject, \"mMobile\");\n                String colorMode = \"\";\n                if (mUseTint && !selectedIconStyle.equals(\"theme\")) {\n                    colorMode = \"_tint\";\n                } else if (!mLight) {\n                    colorMode = \"_dark\";\n                }\n                String iconStyle = \"\";\n                if (!selectedIconStyle.equals(\"\")) {\n                    iconStyle = \"_\" + selectedIconStyle;\n                }\n                String sim1IconId = \"statusbar_signal_1_\" + level1 + colorMode + iconStyle;\n                String sim2IconId = \"statusbar_signal_2_\" + subStrengthId + colorMode + iconStyle;\n                int sim1ResId = dualSignalResMap.get(sim1IconId);\n                int sim2ResId = dualSignalResMap.get(sim2IconId);\n                XposedHelpers.callMethod(mMobile, \"setImageResource\", sim1ResId);\n                XposedHelpers.callMethod(mSmallRoaming, \"setImageResource\", sim2ResId);\n            }\n        };\n        Helpers.findAndHookMethod(\"com.android.systemui.statusbar.StatusBarMobileView\", lpparam.classLoader, \"applyDarknessInternal\", resetImageDrawable);\n        int rightMargin = mPrefsMap.getInt(\"system_ui_statusbar_mobile_network_icon_right_margin\", 0);\n        int leftMargin = mPrefsMap.getInt(\"system_ui_statusbar_mobile_network_icon_left_margin\", 0);\n        int iconScale = mPrefsMap.getInt(\"system_ui_statusbar_mobile_network_icon_size\", 10); // 图标缩放\n        int verticalOffset = mPrefsMap.getInt(\"system_ui_statusbar_mobile_network_icon_vertical_offset\", 8);\n        if (rightMargin > 0 || leftMargin > 0 || iconScale != 10 || verticalOffset != 8) {\n            Helpers.findAndHookMethod(\"com.android.systemui.statusbar.StatusBarMobileView\", lpparam.classLoader, \"init\", new MethodHook() {\n                @Override\n                protected void after(final MethodHookParam param) throws Throwable {\n                    LinearLayout mobileView = (LinearLayout) param.thisObject;\n                    Context mContext = mobileView.getContext();\n                    Resources res = mContext.getResources();\n                    int rightSpacing = (int) TypedValue.applyDimension(\n                        TypedValue.COMPLEX_UNIT_DIP,\n                        rightMargin * 0.5f,\n                        res.getDisplayMetrics()\n                    );\n                    int leftSpacing = (int) TypedValue.applyDimension(\n                        TypedValue.COMPLEX_UNIT_DIP,\n                        leftMargin * 0.5f,\n                        res.getDisplayMetrics()\n                    );\n                    mobileView.setPadding(leftSpacing, 0, rightSpacing, 0);\n                    View mMobile = (View) XposedHelpers.getObjectField(param.thisObject, \"mMobile\");\n                    if (verticalOffset != 8) {\n                        float marginTop = TypedValue.applyDimension(\n                            TypedValue.COMPLEX_UNIT_DIP,\n                            (verticalOffset - 8) * 0.5f,\n                            res.getDisplayMetrics()\n                        );\n                        FrameLayout mobileIcon = (FrameLayout) mMobile.getParent();\n                        mobileIcon.setTranslationY(marginTop);\n                    }\n                    if (iconScale != 10) {\n                        View mSmallRoaming = (View) XposedHelpers.getObjectField(param.thisObject, \"mSmallRoaming\");\n                        FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mMobile.getLayoutParams();\n                        int mIconHeight = (int) TypedValue.applyDimension(\n                            TypedValue.COMPLEX_UNIT_DIP,\n                            20 * iconScale / 10f,\n                            res.getDisplayMetrics()\n                        );\n                        if (layoutParams == null) {\n                            layoutParams = new FrameLayout.LayoutParams(-2, mIconHeight);\n                        } else {\n                            layoutParams.height = mIconHeight;\n                        }\n                        layoutParams.gravity = Gravity.CENTER;\n                        mMobile.setLayoutParams(layoutParams);\n                        mSmallRoaming.setLayoutParams(layoutParams);\n                    }\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/HideStatusBarBeforeScreenshot.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar;\n\nimport android.annotation.SuppressLint;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\npublic class HideStatusBarBeforeScreenshot extends BaseHook {\n\n    @Override\n    public void init() {\n        Helpers.findAndHookMethod(\"com.android.systemui.statusbar.phone.MiuiCollapsedStatusBarFragment\", lpparam.classLoader, \"initMiuiViewsOnViewCreated\", View.class, new MethodHook() {\n            @SuppressLint(\"UnspecifiedRegisterReceiverFlag\")\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View view = (View) param.args[0];\n                BroadcastReceiver br = new BroadcastReceiver() {\n                    @Override\n                    public void onReceive(Context context, Intent intent) {\n                        if (\"miui.intent.TAKE_SCREENSHOT\".equals(intent.getAction())) {\n                            boolean finished = intent.getBooleanExtra(\"IsFinished\", true);\n                            view.setVisibility(finished ? View.VISIBLE : View.INVISIBLE);\n                        }\n                    }\n                };\n                view.getContext().registerReceiver(br, new IntentFilter(\"miui.intent.TAKE_SCREENSHOT\"));\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/MobileNetwork.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar;\n\nimport android.view.View;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook.MethodHookParam;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class MobileNetwork extends BaseHook {\n\n    Class<?> mStatusBarMobileView;\n    Class<?> mMobileIconState;\n    Class<?> mHDController;\n\n    @Override\n    public void init() {\n\n        mStatusBarMobileView = findClassIfExists(\"com.android.systemui.statusbar.StatusBarMobileView\");\n        mMobileIconState = findClassIfExists(\"com.android.systemui.statusbar.phone.StatusBarSignalPolicy$MobileIconState\");\n\n        mHDController = findClassIfExists(\"com.android.systemui.statusbar.policy.HDController\");\n\n        findAndHookMethod(mStatusBarMobileView, \"initViewState\", mMobileIconState, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                updateIconState(param, \"mSmallHd\", \"system_ui_status_bar_icon_small_hd\");\n                updateIconState(param, \"mVolte\", \"system_ui_status_bar_icon_big_hd\");\n            }\n        });\n\n        findAndHookMethod(mStatusBarMobileView, \"updateState\", mMobileIconState, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                updateIconState(param, \"mSmallHd\", \"system_ui_status_bar_icon_small_hd\");\n                updateIconState(param, \"mVolte\", \"system_ui_status_bar_icon_big_hd\");\n            }\n        });\n\n        hookAllMethods(mStatusBarMobileView, \"applyMobileState\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                int qpt = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_mobile_network_type\", 0);\n                boolean singleMobileType = mPrefsMap.getBoolean(\"system_ui_statusbar_mobile_type_enable\");\n                boolean hideIndicator = mPrefsMap.getBoolean(\"system_ui_status_bar_mobile_indicator\");\n                View mMobileType = getMobileType(param, qpt, singleMobileType);\n                // 隐藏移动网络活动指示器\n                View mLeftInOut = (View) XposedHelpers.getObjectField(param.thisObject, \"mLeftInOut\");\n                if (hideIndicator) {\n                    View mRightInOut = (View) XposedHelpers.getObjectField(param.thisObject, \"mRightInOut\");\n                    mLeftInOut.setVisibility(View.GONE);\n                    mRightInOut.setVisibility(View.GONE);\n                }\n                if (mMobileType.getVisibility() == View.GONE && mLeftInOut.getVisibility() == View.GONE) {\n                    View mMobileLeftContainer = (View) XposedHelpers.getObjectField(param.thisObject, \"mMobileLeftContainer\");\n                    mMobileLeftContainer.setVisibility(View.GONE);\n                }\n            }\n        });\n\n        findAndHookMethod(mHDController, \"update\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                int opt = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_new_hd\", 0);\n                if (opt > 0) {\n                    XposedHelpers.setBooleanField(param.thisObject, \"mWifiAvailable\", opt == 1 ? false : opt == 2);\n                }\n            }\n        });\n\n\n        // 信号\n        /*hookAllMethods(\"com.android.systemui.statusbar.StatusBarMobileView\", \"applyMobileState\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                XposedHelpers.callMethod(param.thisObject, \"setVisibility\", View.GONE);\n            }\n        });*/\n    }\n\n    private static View getMobileType(MethodHookParam param, int qpt, boolean singleMobileType) {\n        View mMobileType = (View) XposedHelpers.getObjectField(param.thisObject, \"mMobileType\");\n        boolean dataConnected = (boolean) XposedHelpers.getObjectField(param.args[0], \"dataConnected\");\n        if (qpt > 0) {\n            if (qpt == 1) {\n                if (singleMobileType) {\n                    TextView mMobileTypeSingle = (TextView) XposedHelpers.getObjectField(param.thisObject, \"mMobileTypeSingle\");\n                    mMobileTypeSingle.setVisibility(View.VISIBLE);\n                } else {\n                    mMobileType.setVisibility(View.VISIBLE);\n                }\n            }\n            if (qpt == 3 && !dataConnected) {\n                if (singleMobileType) {\n                    TextView mMobileTypeSingle = (TextView) XposedHelpers.getObjectField(param.thisObject, \"mMobileTypeSingle\");\n                    mMobileTypeSingle.setVisibility(View.GONE);\n                } else {\n                    mMobileType.setVisibility(View.GONE);\n                }\n            }\n            if (qpt == 2) {\n                if (singleMobileType) {\n                    TextView mMobileTypeSingle = (TextView) XposedHelpers.getObjectField(param.thisObject, \"mMobileTypeSingle\");\n                    mMobileTypeSingle.setVisibility(View.GONE);\n                } else {\n                    mMobileType.setVisibility(View.GONE);\n                }\n            }\n        }\n        return mMobileType;\n    }\n\n    private void updateIconState(MethodHookParam param, String fieldName, String key) {\n        boolean isMobileConnected = false;\n        int opt = mPrefsMap.getStringAsInt(key, 0);\n        if (opt != 0) {\n            View view = (View) XposedHelpers.getObjectField(param.thisObject, fieldName);\n            switch (opt) {\n                case 1 -> view.setVisibility(View.VISIBLE);\n                case 2 -> view.setVisibility(View.GONE);\n                case 3 -> {\n                    view.setVisibility(View.GONE);\n                    isMobileConnected = (boolean) XposedHelpers.getObjectField(param.args[0], \"dataConnected\");\n                }\n            }\n\n            if (isMobileConnected) {\n                view.setVisibility(View.VISIBLE);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/NotificationIconColumns.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidR\nimport com.sevtinge.cemiuiler.utils.devicesdk.isMoreAndroidVersion\nimport com.sevtinge.cemiuiler.utils.setObjectField\n\n\nobject NotificationIconColumns : BaseHook() {\n    override fun init() {\n        if (isAndroidR()) return\n\n        val maxIconsNum = mPrefsMap.getInt(\"system_ui_status_bar_notification_icon_maximum\", 3)\n        val maxDotsNum = mPrefsMap.getInt(\"system_ui_status_bar_notification_dots_maximum\", 3)\n\n        loadClass(\"com.android.systemui.statusbar.phone.NotificationIconContainer\").methodFinder()\n            .filterByName(\"miuiShowNotificationIcons\")\n            .filterByParamCount(1)\n            .first().createHook {\n                replace {\n                    if (it.args[0] as Boolean) {\n                        it.thisObject.setObjectField(\"MAX_DOTS\", maxDotsNum)\n                        it.thisObject.setObjectField(\"MAX_STATIC_ICONS\", maxIconsNum)\n                        if (isMoreAndroidVersion(33)) {\n                            it.thisObject.setObjectField(\"MAX_ICONS_ON_LOCKSCREEN\", maxIconsNum)\n                        } else {\n                            it.thisObject.setObjectField(\"MAX_VISIBLE_ICONS_ON_LOCK\", maxIconsNum)\n                        }\n                    } else {\n                        it.thisObject.setObjectField(\"MAX_DOTS\", 0)\n                        it.thisObject.setObjectField(\"MAX_STATIC_ICONS\", 0)\n                        if (isMoreAndroidVersion(33)) {\n                            it.thisObject.setObjectField(\"MAX_ICONS_ON_LOCKSCREEN\", 0)\n                        } else {\n                            it.thisObject.setObjectField(\"MAX_VISIBLE_ICONS_ON_LOCK\", 0)\n                        }\n                    }\n                    it.thisObject.callMethod(\"updateState\")\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/SelectiveHideIconForAlarmClock.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar;\n\nimport android.app.AlarmManager;\nimport android.content.BroadcastReceiver;\nimport android.content.ContentResolver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.database.ContentObserver;\nimport android.os.Handler;\nimport android.provider.Settings;\nimport android.text.TextUtils;\nimport android.text.format.DateFormat;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.text.SimpleDateFormat;\nimport java.util.Calendar;\nimport java.util.Locale;\nimport java.util.Objects;\nimport java.util.TimeZone;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class SelectiveHideIconForAlarmClock extends BaseHook {\n\n    private boolean lastState = false;\n\n    Class<?> mMiuiPhoneStatusBarPolicy;\n\n    @Override\n    public void init() {\n        mMiuiPhoneStatusBarPolicy = findClassIfExists(\"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy\");\n        hookAllConstructors(mMiuiPhoneStatusBarPolicy, new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) {\n                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mNextAlarmTime\", getNextMIUIAlarmTime(mContext));\n                ContentResolver resolver = mContext.getContentResolver();\n                ContentObserver alarmObserver = new ContentObserver(new Handler()) {\n                    @Override\n                    public void onChange(boolean selfChange) {\n                        if (selfChange) return;\n                        XposedHelpers.setAdditionalInstanceField(param.thisObject, \"mNextAlarmTime\", getNextMIUIAlarmTime(mContext));\n                        updateAlarmVisibility(param.thisObject, lastState);\n                    }\n                };\n                resolver.registerContentObserver(Settings.System.getUriFor(\"next_alarm_clock_formatted\"), false, alarmObserver);\n\n                IntentFilter filter = new IntentFilter();\n                filter.addAction(\"android.intent.action.TIME_TICK\");\n                filter.addAction(\"android.intent.action.TIME_SET\");\n                filter.addAction(\"android.intent.action.TIMEZONE_CHANGED\");\n                filter.addAction(\"android.intent.action.LOCALE_CHANGED\");\n                final Object thisObject = param.thisObject;\n                mContext.registerReceiver(new BroadcastReceiver() {\n                    @Override\n                    public void onReceive(Context context, Intent intent) {\n                        updateAlarmVisibility(thisObject, lastState);\n                    }\n                }, filter);\n            }\n        });\n\n        findAndHookMethod(\"com.android.systemui.statusbar.phone.PhoneStatusBarPolicy\", \"updateAlarm\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                lastState = (boolean) XposedHelpers.getObjectField(param.thisObject, \"mHasAlarm\");\n                updateAlarmVisibility(param.thisObject, lastState);\n            }\n        });\n\n        findAndHookMethod(mMiuiPhoneStatusBarPolicy, \"onMiuiAlarmChanged\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                lastState = (boolean) XposedHelpers.getObjectField(param.thisObject, \"mHasAlarm\");\n                updateAlarmVisibility(param.thisObject, lastState);\n                param.setResult(null);\n            }\n        });\n    }\n\n    private void updateAlarmVisibility(Object thisObject, boolean state) {\n        try {\n            Object mIconController = XposedHelpers.getObjectField(thisObject, \"mIconController\");\n            if (!state) {\n                XposedHelpers.callMethod(mIconController, \"setIconVisibility\", \"alarm_clock\", false);\n                return;\n            }\n\n            Context mContext = (Context) XposedHelpers.getObjectField(thisObject, \"mContext\");\n            long nowTime = java.lang.System.currentTimeMillis();\n            long nextTime;\n            try {\n                nextTime = (long) XposedHelpers.getAdditionalInstanceField(thisObject, \"mNextAlarmTime\");\n            } catch (Throwable t) {\n                nextTime = getNextMIUIAlarmTime(mContext);\n            }\n            if (nextTime == 0) nextTime = getNextStockAlarmTime(mContext);\n\n            long diffMSec = nextTime - nowTime;\n            if (diffMSec < 0) diffMSec += 7 * 24 * 60 * 60 * 1000;\n            float diffHours = (diffMSec - 59 * 1000) / (1000f * 60f * 60f);\n            boolean vis = diffHours <= mPrefsMap.getInt(\"system_ui_status_bar_icon_alarm_clock_n\", 0);\n            XposedHelpers.callMethod(mIconController, \"setIconVisibility\", \"alarm_clock\", vis);\n            mIconController = XposedHelpers.getObjectField(thisObject, \"miuiDripLeftStatusBarIconController\");\n            XposedHelpers.callMethod(mIconController, \"setIconVisibility\", \"alarm_clock\", vis);\n            XposedLogUtils.logI(\"Now is \" + diffHours + \"min remain, show when \" + vis + \"min remain.\");\n        } catch (Throwable t) {\n            XposedLogUtils.logI(\"updateAlarmVisibility failed by \" + t);\n        }\n    }\n\n\n    public long getNextMIUIAlarmTime(Context context) {\n        String nextAlarm = Settings.System.getString(context.getContentResolver(), \"next_alarm_clock_formatted\");\n        long nextTime = 0;\n        if (!TextUtils.isEmpty(nextAlarm)) try {\n            TimeZone timeZone = TimeZone.getTimeZone(\"UTC\");\n            SimpleDateFormat dateFormat = new SimpleDateFormat(DateFormat.getBestDateTimePattern(Locale.getDefault(), DateFormat.is24HourFormat(context) ? \"EHm\" : \"Ehma\"), Locale.getDefault());\n            dateFormat.setTimeZone(timeZone);\n            long nextTimePart = Objects.requireNonNull(dateFormat.parse(nextAlarm)).getTime();\n\n            Calendar cal = Calendar.getInstance(timeZone);\n            cal.setFirstDayOfWeek(Calendar.MONDAY);\n            cal.setTimeInMillis(nextTimePart);\n            int targetDay = cal.get(Calendar.DAY_OF_WEEK);\n            int targetHour = cal.get(Calendar.HOUR_OF_DAY);\n            int targetMinute = cal.get(Calendar.MINUTE);\n\n            cal = Calendar.getInstance();\n            int diff = targetDay - cal.get(Calendar.DAY_OF_WEEK);\n            if (diff < 0) diff += 7;\n\n            cal.add(Calendar.DAY_OF_MONTH, diff);\n            cal.set(Calendar.HOUR_OF_DAY, targetHour);\n            cal.set(Calendar.MINUTE, targetMinute);\n            cal.clear(Calendar.SECOND);\n            cal.clear(Calendar.MILLISECOND);\n\n            nextTime = cal.getTimeInMillis();\n        } catch (Throwable t) {\n            XposedLogUtils.logE(TAG, t);\n        }\n        return nextTime;\n    }\n\n    public long getNextStockAlarmTime(Context context) {\n        AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);\n        if (alarmMgr == null) return 0;\n        AlarmManager.AlarmClockInfo aci = alarmMgr.getNextAlarmClock();\n        return aci == null ? 0 : aci.getTriggerTime();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/WifiStandard.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodHook.MethodHookParam;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class WifiStandard extends BaseHook {\n\n    Class<?> mWifiView;\n    Class<?> mWifiIconState;\n\n    @Override\n    public void init() {\n\n        mWifiView = findClassIfExists(\"com.android.systemui.statusbar.StatusBarWifiView\");\n        mWifiIconState = findClassIfExists(\"com.android.systemui.statusbar.phone.StatusBarSignalPolicy$WifiIconState\");\n\n\n        findAndHookMethod(mWifiView, \"applyWifiState\", mWifiIconState, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                Object mWifiIconState = param.args[0];\n                int mWifiStandard = XposedHelpers.getIntField(mWifiIconState, \"wifiStandard\");\n                if (mWifiIconState != null) {\n                    int opt = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_wifi_standard\", 0);\n                    if (opt == 1) {\n                        XposedHelpers.setBooleanField(mWifiIconState, \"showWifiStandard\", mWifiStandard != 0);\n                    } else if (opt == 2) {\n                        XposedHelpers.setBooleanField(mWifiIconState, \"showWifiStandard\", false);\n                    }\n                }\n            }\n        });\n    }\n\n    private void setWifiStandardIconState(MethodHookParam param) {\n        int wifiStandard = XposedHelpers.getIntField(param.thisObject, \"wifiStandard\");\n        int key = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_wifi_standard\", 0);\n        if (key == 1) {\n            XposedHelpers.setBooleanField(param.thisObject, \"showWifiStandard\", wifiStandard != 0);\n        } else if (key == 2) {\n            XposedHelpers.setBooleanField(param.thisObject, \"showWifiStandard\", false);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/clock/TimeCustomization.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.clock\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.os.Handler\nimport android.provider.Settings\nimport android.util.TypedValue\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.paramCount\nimport com.github.kyuubiran.ezxhelper.finders.ConstructorFinder.`-Static`.constructorFinder\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport com.sevtinge.cemiuiler.utils.devicesdk.getAndroidVersion\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport java.lang.reflect.Method\nimport java.text.SimpleDateFormat\nimport java.util.Calendar\nimport java.util.Date\nimport java.util.Timer\nimport java.util.TimerTask\n\nobject TimeCustomization : BaseHook() {\n    // 预设模式\n    private val getMode = mPrefsMap.getStringAsInt(\"system_ui_statusbar_clock_mode\", 0)\n    private val getClockSize = mPrefsMap.getInt(\"system_ui_statusbar_clock_size\", 0)\n    private val getClockDoubleSize = mPrefsMap.getInt(\"system_ui_statusbar_clock_double_size\", 0)\n    private val isYear = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_year\")\n    private val isMonth = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_month\")\n    private val isDay = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_date\")\n    private val isWeek = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_week\")\n    private val isHideSpace = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_hide_space\")\n    private val isDoubleLine = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_double\")\n    private val isSecond = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_second\")\n    private val isDoubleHour = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_hour_cn\")\n    private val isPeriod = mPrefsMap.getBoolean(\"system_ui_statusbar_clock_period\")\n\n    // 极客模式\n    private val getGeekClockSize = mPrefsMap.getInt(\"system_ui_statusbar_clock_size_geek\", 0)\n    private val getGeekFormat = mPrefsMap.getString(\"system_ui_statusbar_clock_editor\", \"HH:mm:ss\")\n\n    private val mClockClass = when {\n        getAndroidVersion() >= 31 -> loadClass(\"com.android.systemui.statusbar.views.MiuiClock\")\n        else -> loadClass(\"com.android.systemui.statusbar.policy.MiuiClock\")\n    }\n\n    private lateinit var nowTime: Date\n    private var str = \"\"\n\n    @SuppressLint(\"SetTextI18n\")\n    override fun init() {\n        when (getMode) {\n            // 预设模式\n            1 -> {\n                var c: Context? = null\n                mClockClass!!.constructorFinder().first {\n                    paramCount == 3\n                }.createHook {\n                    after {\n                        try {\n                            c = it.args[0] as Context\n                            val textV = it.thisObject as TextView\n                            if (textV.resources.getResourceEntryName(textV.id) != \"clock\") return@after\n                            textV.isSingleLine = false\n                            if (isDoubleLine) {\n                                str = \"\\n\"\n                                var clockDoubleLineSize = 7F\n                                if (getClockDoubleSize != 0) {\n                                    clockDoubleLineSize = getClockDoubleSize.toFloat()\n                                }\n                                textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockDoubleLineSize)\n                                textV.setLineSpacing(0F, 0.8F)\n                            } else {\n                                if (getClockSize != 0) {\n                                    val clockSize = getClockSize.toFloat()\n                                    textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockSize)\n                                }\n                            }\n                            val d: Method = textV.javaClass.getDeclaredMethod(\"updateTime\")\n                            val r = Runnable {\n                                d.isAccessible = true\n                                d.invoke(textV)\n                            }\n\n                            class T : TimerTask() {\n                                override fun run() {\n                                    Handler(textV.context.mainLooper).post(r)\n                                }\n                            }\n                            Timer().scheduleAtFixedRate(\n                                T(), 1000 - System.currentTimeMillis() % 1000, 1000\n                            )\n                        } catch (_: Exception) {\n                        }\n                    }\n                }\n\n                mClockClass.methodFinder().first {\n                    name == \"updateTime\"\n                }.createHook {\n                    after {\n                        try {\n                            val textV = it.thisObject as TextView\n                            if (textV.resources.getResourceEntryName(textV.id) == \"clock\") {\n                                val t = Settings.System.getString(\n                                    c!!.contentResolver, Settings.System.TIME_12_24\n                                )\n                                val is24 = t == \"24\"\n                                nowTime = Calendar.getInstance().time\n                                textV.text = getDate(c!!) + str + getTime(c!!, is24)\n                            }\n                        } catch (_: Exception) {\n                        }\n                    }\n                }\n            }\n            // 极客模式\n            2 -> {\n                var c: Context? = null\n\n                mClockClass!!.constructorFinder().first {\n                    paramCount == 3\n                }.createHook {\n                    after {\n                        try {\n                            c = it.args[0] as Context\n                            val textV = it.thisObject as TextView\n                            if (textV.resources.getResourceEntryName(textV.id) != \"clock\") return@after\n                            textV.isSingleLine = false\n                            textV.setLineSpacing(0F, 0.8F)\n                            if (getGeekClockSize != 0) {\n                                val clockSize = getGeekClockSize.toFloat()\n                                textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockSize)\n                            }\n\n                            val d: Method = textV.javaClass.getDeclaredMethod(\"updateTime\")\n                            val r = Runnable {\n                                d.isAccessible = true\n                                d.invoke(textV)\n                            }\n\n                            class T : TimerTask() {\n                                override fun run() {\n                                    Handler(textV.context.mainLooper).post(r)\n                                }\n                            }\n                            Timer().scheduleAtFixedRate(\n                                T(), 1000 - System.currentTimeMillis() % 1000, 1000\n                            )\n                        } catch (_: Exception) {\n                        }\n                    }\n                }\n\n                mClockClass.methodFinder().first {\n                    name == \"updateTime\"\n                }.createHook {\n                    before {\n                        try {\n                            val textV = it.thisObject as TextView\n                            if (textV.resources.getResourceEntryName(textV.id) == \"clock\") {\n                                val mMiuiStatusBarClockController =\n                                    textV.getObjectField(\"mMiuiStatusBarClockController\")\n                                val mCalendar =\n                                    mMiuiStatusBarClockController?.callMethod(\"getCalendar\")\n                                mCalendar?.callMethod(\"setTimeInMillis\", System.currentTimeMillis())\n                                val textSb = StringBuilder()\n                                val formatSb = StringBuilder(getGeekFormat.toString())\n                                mCalendar?.callMethod(\"format\", c, textSb, formatSb)\n                                textV.text = textSb.toString()\n                                it.result = null\n                            }\n                        } catch (_: Exception) {\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @SuppressLint(\"SimpleDateFormat\")\n    private fun getDate(context: Context): String {\n        var datePattern = \"\"\n        val isZh = isZh(context)\n\n        if (isYear) {\n            if (isZh) {\n                datePattern += \"YY年\"\n            } else {\n                datePattern += \"YY\"\n                if (isMonth || isDay) datePattern += \"/\"\n            }\n        }\n        if (isMonth) {\n            if (isZh) {\n                datePattern += \"M月\"\n            } else {\n                datePattern += \"M\"\n                if (isDay) datePattern += \"/\"\n            }\n        }\n        if (isDay) {\n            datePattern += if (isZh) {\n                \"d日\"\n            } else {\n                \"d\"\n            }\n        }\n        if (isWeek) {\n            if (!isHideSpace) datePattern = \"$datePattern \"\n            datePattern += \"E\"\n            if (!isDoubleLine) {\n                if (!isHideSpace) datePattern = \"$datePattern \"\n            }\n        }\n        datePattern = SimpleDateFormat(datePattern).format(nowTime)\n        return datePattern\n    }\n\n    @SuppressLint(\"SimpleDateFormat\")\n    private fun getTime(context: Context, t: Boolean): String {\n        var timePattern = \"\"\n        val isZh = isZh(context)\n        timePattern += if (t) \"HH:mm\" else \"h:mm\"\n        if (isSecond) timePattern += \":ss\"\n        timePattern = SimpleDateFormat(timePattern).format(nowTime)\n        if (isZh) timePattern = getPeriod(isZh) + timePattern else timePattern += getPeriod(isZh)\n        timePattern = getDoubleHour() + timePattern\n        return timePattern\n    }\n\n    @SuppressLint(\"SimpleDateFormat\")\n    private fun getPeriod(isZh: Boolean): String {\n        var period = \"\"\n        if (isPeriod) {\n            if (isZh) {\n                when (SimpleDateFormat(\"HH\").format(nowTime)) {\n                    \"00\", \"01\", \"02\", \"03\", \"04\", \"05\" -> {\n                        period = \"凌晨\"\n                    }\n\n                    \"06\", \"07\", \"08\", \"09\", \"10\", \"11\" -> {\n                        period = \"上午\"\n                    }\n\n                    \"12\" -> {\n                        period = \"中午\"\n                    }\n\n                    \"13\", \"14\", \"15\", \"16\", \"17\" -> {\n                        period = \"下午\"\n                    }\n\n                    \"18\" -> {\n                        period = \"傍晚\"\n                    }\n\n                    \"19\", \"20\", \"21\", \"22\", \"23\" -> {\n                        period = \"晚上\"\n                    }\n                }\n            } else {\n                period = SimpleDateFormat(\"a\").format(nowTime)\n                if (!isHideSpace) {\n                    period = \" $period\"\n                }\n            }\n\n        }\n        return period\n    }\n\n    @SuppressLint(\"SimpleDateFormat\")\n    private fun getDoubleHour(): String {\n        var doubleHour = \"\"\n        if (isDoubleHour) {\n            when (SimpleDateFormat(\"HH\").format(nowTime)) {\n                \"23\", \"00\" -> {\n                    doubleHour = \"子时\"\n                }\n\n                \"01\", \"02\" -> {\n                    doubleHour = \"丑时\"\n                }\n\n                \"03\", \"04\" -> {\n                    doubleHour = \"寅时\"\n                }\n\n                \"05\", \"06\" -> {\n                    doubleHour = \"卯时\"\n                }\n\n                \"07\", \"08\" -> {\n                    doubleHour = \"辰时\"\n                }\n\n                \"09\", \"10\" -> {\n                    doubleHour = \"巳时\"\n                }\n\n                \"11\", \"12\" -> {\n                    doubleHour = \"午时\"\n                }\n\n                \"13\", \"14\" -> {\n                    doubleHour = \"未时\"\n                }\n\n                \"15\", \"16\" -> {\n                    doubleHour = \"申时\"\n                }\n\n                \"17\", \"18\" -> {\n                    doubleHour = \"酉时\"\n                }\n\n                \"19\", \"20\" -> {\n                    doubleHour = \"戌时\"\n                }\n\n                \"21\", \"22\" -> {\n                    doubleHour = \"亥时\"\n                }\n            }\n            if (!isHideSpace) {\n                doubleHour += \" \"\n            }\n        }\n        return doubleHour\n    }\n\n    private fun isZh(context: Context): Boolean {\n        return context.resources.configuration.locales.get(0).language.endsWith(\"zh\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/clock/TimeStyle.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.clock\n\nimport android.annotation.SuppressLint\nimport android.content.res.Resources\nimport android.graphics.Typeface\nimport android.util.TypedValue\nimport android.view.View\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.paramCount\nimport com.github.kyuubiran.ezxhelper.finders.ConstructorFinder.`-Static`.constructorFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.getAndroidVersion\n\nobject TimeStyle : BaseHook() {\n    private val clockBold by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_clock_bold\")\n    }\n    private val getMode by lazy {\n        mPrefsMap.getStringAsInt(\"system_ui_statusbar_clock_mode\", 0)\n    }\n    private val isAlign by lazy {\n        mPrefsMap.getStringAsInt(\"system_ui_statusbar_clock_double_mode\", 0)\n    }\n    private val isGeekAlign by lazy {\n        mPrefsMap.getStringAsInt(\"system_ui_statusbar_clock_double_mode_geek\", 0)\n    }\n    private val verticalOffset by lazy {\n        mPrefsMap.getInt(\"system_ui_statusbar_clock_vertical_offset\", 12)\n    }\n\n    private val mClockClass = when {\n        getAndroidVersion() >= 31 -> loadClass(\"com.android.systemui.statusbar.views.MiuiClock\")\n        else -> loadClass(\"com.android.systemui.statusbar.policy.MiuiClock\")\n    }\n\n    @SuppressLint(\"RtlHardcoded\", \"DiscouragedApi\")\n    override fun init() {\n        mClockClass.constructorFinder().first {\n            paramCount == 3\n        }.createHook {\n            after {\n                val textV = it.thisObject as TextView\n                val res: Resources = textV.resources\n\n                if (textV.resources.getResourceEntryName(textV.id) == \"clock\") {\n                    // 时钟加粗\n                    if (clockBold) {\n                        textV.typeface = Typeface.DEFAULT_BOLD\n                    }\n                    // 时钟对齐方式\n                    when (getMode) {\n                        // 预设模式下\n                        1 -> {\n                            textV.textAlignment = when (isAlign) {\n                                1 -> View.TEXT_ALIGNMENT_CENTER\n                                2 -> View.TEXT_ALIGNMENT_TEXT_END\n                                else -> View.TEXT_ALIGNMENT_TEXT_START\n                            }\n                        }\n                        // 极客模式下\n                        2 -> {\n                            textV.textAlignment = when (isGeekAlign) {\n                                1 -> View.TEXT_ALIGNMENT_CENTER\n                                2 -> View.TEXT_ALIGNMENT_TEXT_END\n                                else -> View.TEXT_ALIGNMENT_TEXT_START\n                            }\n                        }\n                    }\n                }\n\n                // 时钟边距调整\n                if (verticalOffset != 12) {\n                    val marginTop =\n                        TypedValue.applyDimension(\n                            TypedValue.COMPLEX_UNIT_DIP,\n                            (verticalOffset - 12) * 0.5f,\n                            res.displayMetrics\n                        )\n                    textV.translationY = marginTop\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/BatteryStyle.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all\n\nimport android.annotation.SuppressLint\nimport android.graphics.Typeface\nimport android.util.TypedValue\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.getAndroidVersion\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidR\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\n\n@SuppressLint(\"StaticFieldLeak\")\nobject BatteryStyle : BaseHook() {\n    private val verticalOffsetMark by lazy {\n        mPrefsMap.getInt(\"system_ui_status_bar_battery_style_vertical_offset_mark\", 27)\n    }\n\n    private val mBatteryMeterViewClass = when {\n        getAndroidVersion() >= 31 -> loadClass(\"com.android.systemui.statusbar.views.MiuiBatteryMeterView\")\n        else -> loadClass(\"com.android.systemui.MiuiBatteryMeterView\")\n    }\n\n    private lateinit var batteryView: LinearLayout\n    private lateinit var mBatteryPercentView: TextView\n    private lateinit var mBatteryPercentMarkView: TextView\n\n    override fun init() {\n        if (isAndroidR()) {\n            mBatteryMeterViewClass.methodFinder().first {\n                name == \"updateResources\"\n            }\n        } else {\n            mBatteryMeterViewClass.methodFinder().first {\n                name == \"updateAll\"\n            }\n        }.createHook {\n            after { param ->\n                batteryView = param.thisObject as LinearLayout\n                mBatteryPercentView =\n                    XposedHelpers.getObjectField(param.thisObject, \"mBatteryPercentView\") as TextView\n                mBatteryPercentMarkView =\n                    XposedHelpers.getObjectField(param.thisObject, \"mBatteryPercentMarkView\") as TextView\n\n                // 交换电池图标与电量位置（电量外显下才能正常交换）\n                if (mPrefsMap.getBoolean(\"system_ui_status_bar_battery_style_change_location\")) {\n                    batteryView.removeView(mBatteryPercentView)\n                    batteryView.removeView(mBatteryPercentMarkView)\n                    batteryView.addView(mBatteryPercentMarkView, 0)\n                    batteryView.addView(mBatteryPercentView, 0)\n                }\n                // 自定义部分\n                enableCustom(param)\n            }\n        }\n    }\n\n    private fun enableCustom(param: XC_MethodHook.MethodHookParam) {\n        val res = batteryView.resources\n        val mBatteryTextDigitView =\n            XposedHelpers.getObjectField(param.thisObject, \"mBatteryTextDigitView\") as TextView\n\n        if (!mPrefsMap.getBoolean(\"system_ui_status_bar_battery_style_enable_custom\")) return\n\n        try {\n            val fontSize =\n                mPrefsMap.getInt(\"system_ui_status_bar_battery_style_font_size\", 15) * 0.5f\n            if (fontSize > 7.5) {\n                mBatteryTextDigitView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize)\n                mBatteryPercentView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize)\n            }\n            val fontSizeMark =\n                mPrefsMap.getInt(\"system_ui_status_bar_battery_style_font_mark_size\", 15) * 0.5f\n            if (fontSizeMark > 7.5) {\n                mBatteryPercentMarkView.setTextSize(\n                    TypedValue.COMPLEX_UNIT_DIP,\n                    fontSizeMark\n                )\n            }\n\n            if (mPrefsMap.getBoolean(\"system_ui_status_bar_battery_style_bold\")) {\n                mBatteryTextDigitView.typeface = Typeface.DEFAULT_BOLD\n                mBatteryPercentView.typeface = Typeface.DEFAULT_BOLD\n            }\n\n            var leftMargin: Int =\n                mPrefsMap.getInt(\"system_ui_status_bar_battery_style_left_margin\", 0)\n            var rightMargin: Int =\n                mPrefsMap.getInt(\"system_ui_status_bar_battery_style_right_margin\", 0)\n\n            leftMargin = TypedValue.applyDimension(\n                TypedValue.COMPLEX_UNIT_DIP, leftMargin * 0.5f, res.displayMetrics\n            ).toInt()\n            rightMargin = TypedValue.applyDimension(\n                TypedValue.COMPLEX_UNIT_DIP, rightMargin * 0.5f, res.displayMetrics\n            ).toInt()\n\n            var topMargin = 0\n            val verticalOffset: Int =\n                mPrefsMap.getInt(\"system_ui_status_bar_battery_style_vertical_offset\", 8)\n            if (verticalOffset != 12) {\n                val marginTop =\n                    TypedValue.applyDimension(\n                        TypedValue.COMPLEX_UNIT_DIP,\n                        (verticalOffset - 12) * 0.5f,\n                        res.displayMetrics\n                    )\n                topMargin = marginTop.toInt()\n            }\n\n            var digitRightMargin = 0\n            var markRightMargin = 0\n            if (mPrefsMap.getBoolean(\"system_ui_status_bar_battery_percent_mark\")) {\n                digitRightMargin = rightMargin\n            } else {\n                markRightMargin = rightMargin\n            }\n            if (leftMargin > 0 || topMargin != 8 || digitRightMargin > 0) {\n                mBatteryPercentView.setPaddingRelative(\n                    leftMargin, topMargin, digitRightMargin, 0\n                )\n            }\n\n            if (verticalOffsetMark < 27) {\n                val marginTop =\n                    TypedValue.applyDimension(\n                        TypedValue.COMPLEX_UNIT_DIP,\n                        (verticalOffsetMark - 8) * 0.5f,\n                        res.displayMetrics\n                    )\n                topMargin = marginTop.toInt()\n            }\n            if (verticalOffsetMark < 27 || markRightMargin > 0) {\n                mBatteryPercentMarkView.setPaddingRelative(0, topMargin, markRightMargin, 0)\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/BluetoothIcon.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidU;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BluetoothIcon extends BaseHook {\n\n    @Override\n    public void init() {\n        hookAllMethods(\"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy\", \"updateBluetooth\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                int opt = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_bluetooth\", 0);\n                int opt_b = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_bluetooth_battery\", 0);\n                boolean isBluetoothConnected;\n                if (isAndroidU()) {\n                    isBluetoothConnected = (int) XposedHelpers.getObjectField(XposedHelpers.getObjectField(param.thisObject, \"mBluetooth\"), \"mConnectionState\") == 2;\n                } else {\n                    isBluetoothConnected = (boolean) XposedHelpers.callMethod(XposedHelpers.getObjectField(param.thisObject, \"mBluetooth\"), \"isBluetoothConnected\");\n                }\n                Object mIconController = XposedHelpers.getObjectField(param.thisObject, \"mIconController\");\n                if (opt == 2 || (opt == 3 && !isBluetoothConnected)) {\n                    XposedHelpers.callMethod(mIconController, \"setIconVisibility\", \"bluetooth\", false);\n                } else if (opt == 1) {\n                    XposedHelpers.callMethod(mIconController, \"setIconVisibility\", \"bluetooth\", true);\n                }\n                if (opt_b == 2 || (opt_b == 3 && !isBluetoothConnected)) {\n                    XposedHelpers.callMethod(mIconController, \"setIconVisibility\", \"bluetooth_handsfree_battery\", false);\n                } else if (opt_b == 1) {\n                    XposedHelpers.callMethod(mIconController, \"setIconVisibility\", \"bluetooth_handsfree_battery\", true);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/DataSaverIcon.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class DataSaverIcon extends BaseHook {\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.systemui.statusbar.phone.PhoneStatusBarPolicy\",\n            \"onDataSaverChanged\",\n            boolean.class,\n            new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    int opt = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_data_saver\", 0);\n                    if (opt == 1) {\n                        param.args[0] = true;\n                    } else if (opt == 2) {\n                        param.args[0] = false;\n                    }\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/HideBatteryIcon.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all\n\nimport android.view.View\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidR\nimport com.sevtinge.cemiuiler.utils.devicesdk.isMoreAndroidVersion\nimport com.sevtinge.cemiuiler.utils.getObjectField\nimport com.sevtinge.cemiuiler.utils.getObjectFieldAs\n\nobject HideBatteryIcon : BaseHook() {\n    override fun init() {\n        val mBatteryMeterViewClass = when {\n            isAndroidR() -> loadClass(\"com.android.systemui.MiuiBatteryMeterView\")\n            isMoreAndroidVersion(31) -> loadClass(\"com.android.systemui.statusbar.views.MiuiBatteryMeterView\")\n            else -> null\n        }\n\n        mBatteryMeterViewClass!!.methodFinder().first {\n            name == \"updateResources\"\n        }.createHook {\n            after { param ->\n                // 隐藏电池图标\n                if (mPrefsMap.getBoolean(\"system_ui_status_bar_battery_icon\")) {\n                    (param.thisObject?.getObjectFieldAs<ImageView>(\"mBatteryIconView\"))?.visibility =\n                        View.GONE\n                    if (param.thisObject?.getObjectField(\"mBatteryStyle\") == 1) {\n                        (param.thisObject?.getObjectFieldAs<FrameLayout>(\"mBatteryDigitalView\"))?.visibility =\n                            View.GONE\n                    }\n                }\n                // 隐藏电池百分号\n                if (mPrefsMap.getBoolean(\"system_ui_status_bar_battery_percent\") ||\n                    mPrefsMap.getBoolean(\"system_ui_status_bar_battery_percent_mark\")\n                ) {\n                    (param.thisObject?.getObjectFieldAs<TextView>(\"mBatteryPercentMarkView\"))?.textSize =\n                        0F\n                }\n                // 隐藏电池内的百分比\n                if (mPrefsMap.getBoolean(\"system_ui_status_bar_battery_percent\")) {\n                    (param.thisObject?.getObjectFieldAs<TextView>(\"mBatteryPercentView\"))?.textSize =\n                        0F\n                    (param.thisObject?.getObjectFieldAs<TextView>(\"mBatteryTextDigitView\"))?.textSize =\n                        0F\n                }\n            }\n        }\n\n        mBatteryMeterViewClass.methodFinder().first {\n            name == \"updateChargeAndText\"\n        }.createHook {\n            after { param ->\n                // 隐藏电池充电图标\n                if (mPrefsMap.getBoolean(\"system_ui_status_bar_battery_charging\")) {\n                    (param.thisObject?.getObjectFieldAs<ImageView>(\"mBatteryChargingInView\"))?.visibility =\n                        View.GONE\n                    (param.thisObject?.getObjectFieldAs<ImageView>(\"mBatteryChargingView\"))?.visibility =\n                        View.GONE\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/HideVoWiFiIcon.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject HideVoWiFiIcon : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.MiuiOperatorCustomizedPolicy\\$MiuiOperatorConfig\").methodFinder().first {\n            name == \"getHideVowifi\"\n        }.createHook { returnConstant(true) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/IconsFromSystemManager.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport de.robv.android.xposed.XposedHelpers\n\nclass IconsFromSystemManager : BaseHook() {\n    override fun init() {\n        Helpers.findAndHookMethod(\"com.android.systemui.statusbar.phone.StatusBarIconControllerImpl\",\n            lpparam.classLoader,\n            \"setIcon\", String::class.java,\n            \"com.android.internal.statusbar.StatusBarIcon\",\n            object : MethodHook() {\n                override fun before(param: MethodHookParam) {\n                    val slotName = param.args[0] as String\n                    val stealth = slotName == \"stealth\" && mPrefsMap.getBoolean(\"system_ui_status_bar_hide_icon_stealth\")\n                    val mute = slotName == \"mute\" && mPrefsMap.getBoolean(\"system_ui_status_bar_hide_icon_mute\")\n                    val speakerphone = slotName == \"speakerphone\" && mPrefsMap.getBoolean(\"system_ui_status_bar_hide_icon_speakerphone\")\n                    val call_record = slotName == \"call_record\" && mPrefsMap.getBoolean(\"system_ui_status_bar_hide_icon_call_record\")\n\n                    if (stealth || mute || speakerphone || call_record) {\n                        XposedHelpers.setObjectField(param.args[1], \"visible\", false)\n                    }\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/StatusBarIcon.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.paramCount\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidU\n\nclass StatusBarIcon : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.statusbar.phone.StatusBarIconControllerImpl\").methodFinder().first {\n            name == \"setIconVisibility\" && paramCount == 2\n        }.createHook {\n            before { param ->\n                val iconType = param.args[0] as String\n                when (checkSlot(iconType)) {\n                    1 -> param.args[1] = true\n                    2 -> param.args[1] = false\n                }\n            }\n        }\n\n\n        loadClass(if (isAndroidU())\n            \"com.android.systemui.statusbar.phone.StatusBarIconControllerImpl\"\n        else\n            \"com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl\").methodFinder().first {\n            name == \"setIconVisibility\" && paramCount == 2\n        }.createHook {\n            before { param ->\n                val iconType = param.args[0] as String\n                when (checkSlot(iconType)) {\n                    1 -> param.args[1] = true\n                    2 -> param.args[1] = false\n                }\n            }\n        }\n    }\n\n    companion object {\n        private fun checkSlot(slotName: String): Int {\n            val vpn = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_vpn\", 0)\n            val alarmClock = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_alarm_clock\", 0)\n            val nfc = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_nfc\", 0)\n            val zen = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_zen\", 0)\n            val volume = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_volume\", 0)\n            val wifi = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_wifi\", 0)\n            val wifi_slave = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_wifi_slave\", 0)\n            val airplane = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_airplane\", 0)\n            val location = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_location\", 0)\n            val hotspot = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_hotspot\", 0)\n            val headset = mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_headset\", 0)\n            return when (slotName) {\n                \"vpn\" ->  // vpn\n                    if (isEnable(vpn)) vpn else 0\n\n                \"alarm_clock\" ->  // 闹钟\n                    if (isEnable(alarmClock)) alarmClock else 0\n\n                \"nfc\" ->  // nfc\n                    if (isEnable(nfc)) nfc else 0\n\n                \"zen\" ->  // 勿扰模式\n                    if (isEnable(zen)) zen else 0\n\n                \"volume\" ->  // 声音\n                    if (isEnable(volume)) volume else 0\n\n                \"wifi\" ->  // wifi\n                    if (isEnable(wifi)) wifi else 0\n\n                \"wifi_slave\" ->  // 辅助wifi\n                    if (isEnable(wifi_slave)) wifi_slave else 0\n\n                \"airplane\" ->  // 飞行模式\n                    if (isEnable(airplane)) airplane else 0\n\n                \"location\" ->  // 位置信息\n                    if (isEnable(location)) location else 0\n\n                \"hotspot\" ->  // 热点\n                    if (isEnable(hotspot)) hotspot else 0\n\n                \"headset\" ->  // 耳机\n                    if (isEnable(headset)) headset else 0\n\n                else -> 0\n            }\n        }\n\n        private fun isEnable(i: Int): Boolean {\n            return i in 1..2\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/StatusBarIconPositionAdjust.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class StatusBarIconPositionAdjust extends BaseHook {\n\n    boolean isMoveLeft;\n    boolean isMoveCenter;\n    boolean isMoveRight;\n\n    String[] mSignalIcons;\n    ArrayList<String> mSignalRelatedIcons;\n\n    Class<?> mStatusBarIconList;\n    Class<?> mSystemUIApplication;\n    Class<?> mMiuiDripLeftStatusBarIconControllerImpl;\n\n    boolean isWiFiAtLeftEnable;\n    boolean isMobileNetworkAtLeftEnable;\n    boolean isSwapWiFiAndMobileNetwork;\n\n    boolean isNetworkSpeedAtRightEnable;\n    boolean isAlarmClockAtRightEnable;\n    boolean isNFCAtRightEnable;\n    boolean isVolmeAtRightEnable;\n    boolean isZenAtRightEnable;\n    boolean isHeadsetAtRightEnable;\n\n    @Override\n    public void init() {\n\n        mStatusBarIconList = findClassIfExists(\"com.android.systemui.statusbar.phone.StatusBarIconList\");\n        mSystemUIApplication = findClassIfExists(\"com.android.systemui.SystemUIApplication\");\n        mMiuiDripLeftStatusBarIconControllerImpl = findClassIfExists(\"com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl\");\n\n        ArrayList<String> dripLeftIcons = new ArrayList<>();\n\n        isWiFiAtLeftEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_wifi_at_left\");\n        isMobileNetworkAtLeftEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_mobile_network_at_left\");\n\n        isNetworkSpeedAtRightEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_network_speed_at_right\");\n        isAlarmClockAtRightEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_alarm_clock_at_right\");\n        isNFCAtRightEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_nfc_at_right\");\n        isVolmeAtRightEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_volume_at_right\");\n        isZenAtRightEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_zen_at_right\");\n        isHeadsetAtRightEnable = mPrefsMap.getBoolean(\"system_ui_status_bar_headset_at_right\");\n\n        isSwapWiFiAndMobileNetwork = mPrefsMap.getBoolean(\"system_ui_status_bar_swap_wifi_and_mobile_network\");\n\n        isMoveLeft = isWiFiAtLeftEnable || isMobileNetworkAtLeftEnable;\n        isMoveRight = isNetworkSpeedAtRightEnable || isAlarmClockAtRightEnable || isNFCAtRightEnable || isVolmeAtRightEnable || isZenAtRightEnable || isHeadsetAtRightEnable;\n\n        if (isWiFiAtLeftEnable && isMobileNetworkAtLeftEnable && !isSwapWiFiAndMobileNetwork) {\n            mSignalIcons = new String[]{\"no_sim\", \"mobile\", \"demo_mobile\", \"airplane\", \"hotspot\", \"slave_wifi\", \"wifi\", \"demo_wifi\"};\n        } else {\n            mSignalIcons = new String[]{\"hotspot\", \"slave_wifi\", \"wifi\", \"demo_wifi\", \"no_sim\", \"mobile\", \"demo_mobile\", \"airplane\"};\n            /*if (isWiFiAtLeftEnable) {\n                mSignalIcons = new String[]{\"hotspot\", \"slave_wifi\", \"wifi\", \"demo_wifi\"};\n            }\n\n            if (isMobileNetworkAtLeftEnable) {\n                mSignalIcons = new String[]{\"no_sim\", \"mobile\", \"demo_mobile\", \"airplane\"};\n            }*/\n        }\n\n        mSignalRelatedIcons = new ArrayList<>(Arrays.asList(mSignalIcons));\n\n        if (isMoveRight) {\n\n            findAndHookMethod(mMiuiDripLeftStatusBarIconControllerImpl,\n                \"setIconVisibility\", String.class, boolean.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    String slot = (String) param.args[0];\n\n                    boolean isAlarmClockIcon = \"alarm_clock\".equals(slot) && isAlarmClockAtRightEnable;\n                    boolean isNFCIcon = \"nfc\".equals(slot) && isNFCAtRightEnable;\n                    boolean isVolumeIcon = \"volume\".equals(slot) && isVolmeAtRightEnable;\n                    boolean isZenIcon = \"zen\".equals(slot) && isZenAtRightEnable;\n                    boolean isHeadsetIcon = \"headset\".equals(slot) && isHeadsetAtRightEnable;\n\n                    if (isAlarmClockIcon || isNFCIcon || isVolumeIcon || isZenIcon || isHeadsetIcon) {\n                        param.args[1] = false;\n                    }\n                }\n            });\n\n            findAndHookMethod(mSystemUIApplication, \"onCreate\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    ArrayList<String> rightBlockList;\n                    Context mContext = (Context) XposedHelpers.callMethod(param.thisObject, \"getApplicationContext\");\n                    Class<?> MiuiEndIconManager = findClass(\"com.android.systemui.statusbar.phone.MiuiEndIconManager\", lpparam.classLoader);\n                    Object blockList = getStaticObjectFieldSilently(MiuiEndIconManager, \"RIGHT_BLOCK_LIST\");\n\n                    Resources res = mContext.getResources();\n                    if (blockList != null) {\n                        rightBlockList = (ArrayList<String>) blockList;\n                    } else {\n                        @SuppressLint(\"DiscouragedApi\") int blockResId = res.getIdentifier(\"config_drip_right_block_statusBarIcons\", \"array\", lpparam.packageName);\n                        rightBlockList = new ArrayList<>(Arrays.asList(res.getStringArray(blockResId)));\n                    }\n                    if (isNetworkSpeedAtRightEnable) {\n                        rightBlockList.remove(\"network_speed\");\n                    }\n                    if (isAlarmClockAtRightEnable) {\n                        rightBlockList.remove(\"alarm_clock\");\n                    }\n                    if (isVolmeAtRightEnable) {\n                        rightBlockList.remove(\"volume\");\n                    }\n                    if (isZenAtRightEnable) {\n                        rightBlockList.remove(\"zen\");\n                    }\n                    /*if (mPrefsMap.getBoolean(\"system_statusbar_btbattery_atright\")) {\n                        rightBlockList.remove(\"bluetooth_handsfree_battery\");\n                    }*/\n                    if (isNFCAtRightEnable) {\n                        rightBlockList.remove(\"nfc\");\n                    }\n                    if (isHeadsetAtRightEnable) {\n                        rightBlockList.remove(\"headset\");\n                    }\n                    if (blockList != null) {\n                        XposedHelpers.setStaticObjectField(MiuiEndIconManager, \"RIGHT_BLOCK_LIST\", rightBlockList);\n                    } else {\n                        mResHook.setObjectReplacement(lpparam.packageName, \"array\", \"config_drip_right_block_statusBarIcons\", rightBlockList.toArray(new String[0]));\n                    }\n                }\n            });\n        }\n\n        if (isMoveLeft || isSwapWiFiAndMobileNetwork) {\n            findAndHookConstructor(mStatusBarIconList, String[].class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    boolean isRightController = \"StatusBarIconControllerImpl\".equals(param.thisObject.getClass().getSimpleName());\n                    ArrayList<String> allStatusIcons = new ArrayList<>(Arrays.asList((String[]) param.args[0]));\n                    if (isRightController) {\n                        int startIndex = allStatusIcons.indexOf(\"no_sim\");\n                        int endIndex = allStatusIcons.indexOf(\"demo_wifi\") + 1;\n                        List<String> removedIcons = allStatusIcons.subList(startIndex, endIndex);\n                        removedIcons.clear();\n                        if (!isMoveLeft) {\n                            startIndex = allStatusIcons.indexOf(\"ethernet\");\n                            allStatusIcons.addAll(startIndex + 1, mSignalRelatedIcons);\n                        }\n                        param.args[0] = allStatusIcons.toArray(new String[0]);\n                    } else if (isMoveLeft && !isSwapWiFiAndMobileNetwork) {\n                        dripLeftIcons.addAll(allStatusIcons);\n                        allStatusIcons.addAll(0, mSignalRelatedIcons);\n                        param.args[0] = allStatusIcons.toArray(new String[0]);\n                    }\n                }\n            });\n        }\n\n        if (isMoveLeft) {\n            findAndHookMethod(\"com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy\", \"initMiuiSlot\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    Object dripLeftController = XposedHelpers.callStaticMethod(findClass(\"com.android.systemui.Dependency\", lpparam.classLoader), \"get\", findClass(\"com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl\", lpparam.classLoader));\n                    XposedHelpers.setObjectField(param.thisObject, \"mIconController\", dripLeftController);\n                }\n            });\n\n            findAndHookMethod(\"com.android.systemui.statusbar.phone.MiuiCollapsedStatusBarFragment\", \"initMiuiViewsOnViewCreated\", View.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    Object dripLeftController = XposedHelpers.callStaticMethod(findClass(\"com.android.systemui.Dependency\", lpparam.classLoader), \"get\", findClass(\"com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl\", lpparam.classLoader));\n                    Object mDripIconManager = XposedHelpers.getObjectField(param.thisObject, \"mDripLeftDarkIconManager\");\n                    ArrayList<String> blockList = new ArrayList<>();\n                    int mCurrentStatusBarType = (int) XposedHelpers.getAdditionalInstanceField(dripLeftController, \"mCurrentStatusBarType\");\n                    if (mCurrentStatusBarType != 1) {\n                        blockList.addAll(dripLeftIcons);\n                    }\n                    XposedHelpers.callMethod(mDripIconManager, \"setBlockList\", blockList);\n                    XposedHelpers.callMethod(dripLeftController, \"refreshIconGroup\", mDripIconManager);\n                }\n            });\n\n            findAndHookMethod(\"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView\", \"setStatusBarType\", int.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) throws Throwable {\n                    int mCurrentStatusBarType = XposedHelpers.getIntField(param.thisObject, \"mCurrentStatusBarType\");\n                    Object dripLeftController = XposedHelpers.callStaticMethod(findClass(\"com.android.systemui.Dependency\", lpparam.classLoader), \"get\", findClass(\"com.android.systemui.statusbar.phone.MiuiDripLeftStatusBarIconControllerImpl\", lpparam.classLoader));\n                    XposedHelpers.setAdditionalInstanceField(dripLeftController, \"mCurrentStatusBarType\", mCurrentStatusBarType);\n                }\n            });\n        }\n\n        if (isMoveLeft || isNetworkSpeedAtRightEnable) {\n            hookAllMethods(\"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView\", \"updateCutoutLocation\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    int mCurrentStatusBarType = (int) XposedHelpers.getObjectField(param.thisObject, \"mCurrentStatusBarType\");\n                    if (mCurrentStatusBarType == 1) {\n                        if (isNetworkSpeedAtRightEnable) {\n                            Object mDripNetworkSpeedView = XposedHelpers.getObjectField(param.thisObject, \"mDripNetworkSpeedView\");\n                            XposedHelpers.callMethod(mDripNetworkSpeedView, \"setBlocked\", true);\n                        }\n                    } else {\n                        boolean dualRows = false;\n                        if (isMoveLeft && !dualRows) {\n                            View mDripStatusBarLeftStatusIconArea = (View) XposedHelpers.getObjectField(param.thisObject, \"mDripStatusBarLeftStatusIconArea\");\n                            mDripStatusBarLeftStatusIconArea.setVisibility(View.VISIBLE);\n                        }\n                    }\n                }\n            });\n        }\n\n        if (isNetworkSpeedAtRightEnable) {\n            hookAllMethods(\"com.android.systemui.statusbar.policy.NetworkSpeedController\", \"setDripNetworkSpeedView\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    param.args[0] = null;\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/StatusBarSimIcon.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject StatusBarSimIcon : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.statusbar.phone.StatusBarSignalPolicy\").methodFinder().first {\n            name == \"hasCorrectSubs\" && parameterTypes[0] == MutableList::class.java\n        }.createHook {\n            before {\n                val list = it.args[0] as MutableList<*>\n                /* val size = list.size*/\n                if (mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_mobile_network_signal_card_2\", 0) == 2) {\n                    list.removeAt(1)\n                }\n                if (mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_mobile_network_signal_card_1\", 0) == 2) {\n                    list.removeAt(0)\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/all/WifiNetworkIndicator.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.all\n\nimport android.view.View\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XposedHelpers\n\nobject WifiNetworkIndicator : BaseHook() {\n    var mVisibility = 0\n    private var mStatusBarWifiView: Class<*>? = null\n    override fun init() {\n        mStatusBarWifiView = findClassIfExists(\"com.android.systemui.statusbar.StatusBarWifiView\")\n        val mWifiNetworkIndicator =\n            mPrefsMap.getStringAsInt(\"system_ui_status_bar_icon_wifi_network_indicator\", 0)\n\n        when (mWifiNetworkIndicator) {\n            1 -> mVisibility = View.VISIBLE\n            2 -> mVisibility = View.INVISIBLE\n        }\n\n        val hideWifiActivity: MethodHook = object : MethodHook() {\n            override fun after(param: MethodHookParam) {\n                val mWifiActivityView =\n                    XposedHelpers.getObjectField(param.thisObject, \"mWifiActivityView\")\n                XposedHelpers.callMethod(mWifiActivityView, \"setVisibility\", mVisibility)\n            }\n        }\n        hookAllMethods(mStatusBarWifiView, \"applyWifiState\", hideWifiActivity)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/icon/t/UseNewHD.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.icon.t\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject UseNewHD : BaseHook() {\n    // 仅供 Android 13 设备使用，部分未进版机型依旧不可用\n    override fun init() {\n        runCatching {\n            loadClass(\"com.android.systemui.statusbar.policy.HDController\").methodFinder().first {\n                name == \"isVisible\"\n            }.createHook {\n                returnConstant(true)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/layout/StatusBarLayout.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.layout\n\nimport android.annotation.SuppressLint\nimport android.app.KeyguardManager\nimport android.content.Context\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.view.Gravity\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport androidx.constraintlayout.widget.ConstraintLayout\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.api.dp2px\nimport com.sevtinge.cemiuiler.utils.getObjectFieldAs\nimport com.sevtinge.cemiuiler.utils.isStatic\n\nobject StatusBarLayout : BaseHook() {\n    private val getMode = mPrefsMap.getStringAsInt(\"system_ui_statusbar_layout_mode\", 0)\n    private val isCompatibilityMode = mPrefsMap.getBoolean(\"system_ui_statusbar_layout_compatibility_mode\")\n\n    private var statusBarLeft = 0\n    private var statusBarTop = 0\n    private var statusBarRight = 0\n    private var statusBarBottom = 0\n\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n        val collapsedStatusBarFragmentClass =\n            loadClass(\"com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment\")\n        val phoneStatusBarView =\n            loadClass(\"com.android.systemui.statusbar.phone.PhoneStatusBarView\")\n        var mLeftLayout: LinearLayout? = null\n        var mRightLayout: LinearLayout? = null\n        var mCenterLayout: LinearLayout?\n        var statusBar: ViewGroup? = null\n\n        // 判断屏幕状态更新布局 mode: 1正常布局 2居中布局\n        fun updateLayout(context: Context, mode: Int) {\n            when (mode) {\n                1 -> {\n                    val mConfiguration: Configuration = context.resources.configuration\n                    if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { // 横屏\n                        statusBar?.setPadding(\n                            statusBarLeft,\n                            statusBarTop,\n                            statusBarRight,\n                            statusBarBottom\n                        )\n                    }\n                }\n\n                2 -> {\n                    val mConfiguration: Configuration = context.resources.configuration\n                    if (mConfiguration.orientation == Configuration.ORIENTATION_PORTRAIT) { // 横屏\n                        mLeftLayout?.setPadding(statusBarLeft, 0, 0, 0)\n                        mRightLayout?.setPadding(0, 0, statusBarRight, 0)\n                        statusBar?.setPadding(0, statusBarTop, 0, statusBarBottom)\n                    } else { // 竖屏\n                        mLeftLayout?.setPadding(0, 0, 0, 0)\n                        mRightLayout?.setPadding(0, 0, 0, 0)\n                    }\n                }\n            }\n        }\n\n        // 判断是否开启挖孔兼容模式\n        if (isCompatibilityMode) {\n            loadClass(\"com.android.systemui.ScreenDecorations\").methodFinder().first {\n                name == \"boundsFromDirection\" && parameterCount == 3 && isStatic\n            }.createHook {\n                before {\n                    it.args[1] = 0\n                }\n            }\n        }\n\n        // 修改对应布局\n        when (getMode) {\n            // 默认\n            0 -> {\n                collapsedStatusBarFragmentClass.methodFinder()\n                    .filterByName(\"onViewCreated\")\n                    .filterByParamCount(2)\n                    .first().createHook {\n                        after { param ->\n                            val miuiPhoneStatusBarView =\n                                param.thisObject.getObjectFieldAs<ViewGroup>(\"mStatusBar\")\n                            val context: Context = miuiPhoneStatusBarView.context\n                            val res: Resources = miuiPhoneStatusBarView.resources\n                            val statusBarId: Int =\n                                res.getIdentifier(\"status_bar\", \"id\", \"com.android.systemui\")\n                            statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)\n                            if (statusBar == null) return@after\n\n                            statusBarLeft = statusBar!!.paddingLeft\n                            statusBarTop = statusBar!!.paddingTop\n                            statusBarRight = statusBar!!.paddingRight\n                            statusBarBottom = statusBar!!.paddingBottom\n\n                            if (isCompatibilityMode) {\n                                /*val customLeftMargin =\n                                    mPrefsMap.getStringAsInt(\"status_bar_left_margin\", 0)\n                                if (customLeftMargin != 0) {\n                                    statusBarLeft = customLeftMargin\n                                }\n\n                                val customRightMargin =\n                                    mPrefsMap.getStringAsInt(\"status_bar_right_margin\", 0)\n                                if (customRightMargin != 0) {\n                                    statusBarRight = customRightMargin\n                                }*/\n                                updateLayout(context, 1)\n                            }\n                        }\n                    }\n\n\n                // 兼容模式\n                phoneStatusBarView.methodFinder()\n                    .filterByName(\"updateLayoutForCutout\")\n                    .first().createHook {\n                        after {\n                            if (isCompatibilityMode) {\n                                val context = (it.thisObject as ViewGroup).context\n                                updateLayout(context, 1)\n                            }\n                        }\n                    }\n            }\n            // 时钟居中\n            1 -> {\n                collapsedStatusBarFragmentClass.methodFinder()\n                    .filterByName(\"onViewCreated\")\n                    .filterByParamCount(2)\n                    .first().createHook {\n                        after { param ->\n                            val miuiPhoneStatusBarView =\n                                param.thisObject.getObjectFieldAs<ViewGroup>(\"mStatusBar\")\n                            val context: Context = miuiPhoneStatusBarView.context\n                            val res: Resources = miuiPhoneStatusBarView.resources\n                            val statusBarId: Int =\n                                res.getIdentifier(\"status_bar\", \"id\", \"com.android.systemui\")\n                            val statusBarContentsId: Int = res.getIdentifier(\n                                \"status_bar_contents\", \"id\", \"com.android.systemui\"\n                            )\n                            val systemIconAreaId: Int =\n                                res.getIdentifier(\"system_icon_area\", \"id\", \"com.android.systemui\")\n                            val clockId: Int =\n                                res.getIdentifier(\"clock\", \"id\", \"com.android.systemui\")\n                            val phoneStatusBarLeftContainerId: Int = res.getIdentifier(\n                                \"phone_status_bar_left_container\", \"id\", \"com.android.systemui\"\n                            )\n                            val notificationIconAreaInnerId: Int = res.getIdentifier(\n                                \"notification_icon_area_inner\", \"id\", \"com.android.systemui\"\n                            )\n                            statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)\n                            val statusBarContents: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(statusBarContentsId)\n                            if (statusBar == null) return@after\n                            val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)\n                            val phoneStatusBarLeftContainer: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(\n                                    phoneStatusBarLeftContainerId\n                                )\n                            val notificationIconAreaInner: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(\n                                    notificationIconAreaInnerId\n                                )\n                            val systemIconArea: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(systemIconAreaId)\n\n                            (clock.parent as ViewGroup).removeView(clock)\n                            (phoneStatusBarLeftContainer.parent as ViewGroup).removeView(\n                                phoneStatusBarLeftContainer\n                            )\n                            (notificationIconAreaInner.parent as ViewGroup).removeView(\n                                notificationIconAreaInner\n                            )\n                            (systemIconArea.parent as ViewGroup).removeView(systemIconArea)\n\n                            val mConstraintLayout = ConstraintLayout(context).also {\n                                it.layoutParams = ConstraintLayout.LayoutParams(\n                                    ConstraintLayout.LayoutParams.MATCH_PARENT,\n                                    ConstraintLayout.LayoutParams.MATCH_PARENT\n                                )\n                            }\n\n                            mConstraintLayout.addView(notificationIconAreaInner)\n\n                            val fullscreenNotificationIconAreaLp = LinearLayout.LayoutParams(\n                                ConstraintLayout.LayoutParams.MATCH_PARENT,\n                                ConstraintLayout.LayoutParams.MATCH_PARENT\n                            )\n\n                            notificationIconAreaInner.layoutParams =\n                                fullscreenNotificationIconAreaLp\n\n                            // 增加一个左对齐布局\n                            mLeftLayout = LinearLayout(context)\n                            val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(\n                                0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f\n                            )\n                            mLeftLayout!!.layoutParams = leftLp\n                            mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL\n\n                            // 增加一个居中布局\n                            mCenterLayout = LinearLayout(context)\n                            val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(\n                                LinearLayout.LayoutParams.WRAP_CONTENT,\n                                LinearLayout.LayoutParams.MATCH_PARENT\n                            )\n                            mCenterLayout!!.layoutParams = centerLp\n                            mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL\n                            mRightLayout = LinearLayout(context)\n                            val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(\n                                0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f\n                            )\n                            mRightLayout!!.layoutParams = rightLp\n                            mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL\n                            mLeftLayout!!.addView(phoneStatusBarLeftContainer)\n                            mLeftLayout!!.addView(mConstraintLayout)\n\n                            mCenterLayout!!.addView(clock)\n                            mRightLayout!!.addView(systemIconArea)\n                            statusBarContents.addView(mLeftLayout, 0)\n                            statusBarContents.addView(mCenterLayout)\n                            statusBarContents.addView(mRightLayout)\n\n                            statusBarLeft = statusBar!!.paddingLeft\n                            statusBarTop = statusBar!!.paddingTop\n                            statusBarRight = statusBar!!.paddingRight\n                            statusBarBottom = statusBar!!.paddingBottom\n\n\n                            if (isCompatibilityMode) {\n                                /* val customLeftMargin =\n                                     mPrefsMap.getStringAsInt(\"status_bar_left_margin\", 0)\n                                 if (customLeftMargin != 0) {\n                                     statusBarLeft = customLeftMargin\n                                 }\n\n                                 val customRightMargin =\n                                     mPrefsMap.getStringAsInt(\"status_bar_right_margin\", 0)\n                                 if (customRightMargin != 0) {\n                                     statusBarRight = customRightMargin\n                                 }*/\n                                updateLayout(context, 2)\n                            }\n                        }\n                    }\n\n\n                phoneStatusBarView.methodFinder()\n                    .filterByName(\"updateLayoutForCutout\")\n                    .first().createHook {\n                        after {\n                            if (mPrefsMap.getBoolean(\"layout_compatibility_mode\")) {\n                                val context = (it.thisObject as ViewGroup).context\n                                updateLayout(context, 2)\n                            }\n                        }\n                    }\n            }\n            // 时钟居右\n            2 -> {\n                collapsedStatusBarFragmentClass.methodFinder()\n                    .filterByName(\"onViewCreated\")\n                    .filterByParamCount(2)\n                    .first().createHook {\n                        after { param ->\n                            val miuiPhoneStatusBarView =\n                                param.thisObject.getObjectFieldAs<ViewGroup>(\"mStatusBar\")\n                            val context: Context = miuiPhoneStatusBarView.context\n                            val res: Resources = miuiPhoneStatusBarView.resources\n\n                            // 组件ID\n                            val statusBarId: Int =\n                                res.getIdentifier(\"status_bar\", \"id\", \"com.android.systemui\")\n                            val clockId: Int =\n                                res.getIdentifier(\"clock\", \"id\", \"com.android.systemui\")\n                            val batteryId: Int =\n                                res.getIdentifier(\"battery\", \"id\", \"com.android.systemui\")\n\n                            // 查找组件\n                            statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)\n                            if (statusBar == null) return@after\n                            val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)\n                            val battery: ViewGroup = miuiPhoneStatusBarView.findViewById(batteryId)\n\n                            // 新建布局\n                            val rightLp = LinearLayout.LayoutParams(\n                                LinearLayout.LayoutParams.WRAP_CONTENT,\n                                LinearLayout.LayoutParams.MATCH_PARENT\n                            ).also {\n                                it.marginStart = dp2px(context, 5f)\n                            }\n                            mRightLayout = LinearLayout(context).also {\n                                it.layoutParams = rightLp\n                            }\n\n                            // 添加布局与组件\n                            battery.addView(mRightLayout)\n                            (clock.parent as ViewGroup).removeView(clock)\n                            mRightLayout!!.addView(clock)\n\n                            statusBarLeft = statusBar!!.paddingLeft\n                            statusBarTop = statusBar!!.paddingTop\n                            statusBarRight = statusBar!!.paddingRight\n                            statusBarBottom = statusBar!!.paddingBottom\n\n\n                            if (isCompatibilityMode) {\n                                /*val customLeftMargin =\n                                    mPrefsMap.getStringAsInt(\"status_bar_left_margin\", 0)\n                                if (customLeftMargin != 0) {\n                                    statusBarLeft = customLeftMargin\n                                }\n\n                                val customRightMargin =\n                                    mPrefsMap.getStringAsInt(\"status_bar_right_margin\", 0)\n                                if (customRightMargin != 0) {\n                                    statusBarRight = customRightMargin\n                                }*/\n                                updateLayout(context, 1)\n                            }\n                        }\n                    }\n\n\n                // 兼容模式\n                phoneStatusBarView.methodFinder()\n                    .filterByName(\"updateLayoutForCutout\")\n                    .first().createHook {\n                        after {\n                            if (isCompatibilityMode) {\n                                val context = (it.thisObject as ViewGroup).context\n                                updateLayout(context, 1)\n                            }\n                        }\n                    }\n            }\n            // 时钟居中+图标居左\n            3 -> {\n                collapsedStatusBarFragmentClass.methodFinder()\n                    .filterByName(\"onViewCreated\")\n                    .filterByParamCount(2)\n                    .first().createHook {\n                        after { param ->\n                            val miuiPhoneStatusBarView =\n                                param.thisObject.getObjectFieldAs<ViewGroup>(\"mStatusBar\")\n                            val context: Context = miuiPhoneStatusBarView.context\n                            val res: Resources = miuiPhoneStatusBarView.resources\n                            val statusBarId: Int =\n                                res.getIdentifier(\"status_bar\", \"id\", \"com.android.systemui\")\n                            val statusBarContentsId: Int = res.getIdentifier(\n                                \"status_bar_contents\", \"id\", \"com.android.systemui\"\n                            )\n                            val systemIconAreaId: Int =\n                                res.getIdentifier(\"system_icon_area\", \"id\", \"com.android.systemui\")\n                            val clockId: Int =\n                                res.getIdentifier(\"clock\", \"id\", \"com.android.systemui\")\n                            val phoneStatusBarLeftContainerId: Int = res.getIdentifier(\n                                \"phone_status_bar_left_container\", \"id\", \"com.android.systemui\"\n                            )\n                            val fullscreenNotificationIconAreaId: Int = res.getIdentifier(\n                                \"fullscreen_notification_icon_area\", \"id\", \"com.android.systemui\"\n                            )\n                            val statusIconsId: Int = res.getIdentifier(\n                                \"statusIcons\", \"id\", \"com.android.systemui\"\n                            )\n                            val systemIconsId: Int = res.getIdentifier(\n                                \"system_icons\", \"id\", \"com.android.systemui\"\n                            )\n                            val batteryId: Int = res.getIdentifier(\n                                \"battery\", \"id\", \"com.android.systemui\"\n                            )\n\n                            statusBar = miuiPhoneStatusBarView.findViewById(statusBarId)\n                            val statusBarContents: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(statusBarContentsId)\n                            if (statusBar == null) return@after\n                            val clock: TextView = miuiPhoneStatusBarView.findViewById(clockId)\n                            val phoneStatusBarLeftContainer: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(\n                                    phoneStatusBarLeftContainerId\n                                )\n                            val fullscreenNotificationIconArea: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(\n                                    fullscreenNotificationIconAreaId\n                                )\n                            val systemIconArea: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(systemIconAreaId)\n                            val statusIcons: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(statusIconsId)\n                            val systemIcons: ViewGroup =\n                                miuiPhoneStatusBarView.findViewById(systemIconsId)\n                            val battery: ViewGroup = miuiPhoneStatusBarView.findViewById(batteryId)\n\n                            (clock.parent as ViewGroup).removeView(clock)\n                            (phoneStatusBarLeftContainer.parent as ViewGroup).removeView(\n                                phoneStatusBarLeftContainer\n                            )\n                            (systemIconArea.parent as ViewGroup).removeView(systemIconArea)\n                            (statusIcons.parent as ViewGroup).removeView(statusIcons)\n                            (systemIcons.parent as ViewGroup).removeView(systemIcons)\n                            (battery.parent as ViewGroup).removeView(battery)\n                            (fullscreenNotificationIconArea.parent as ViewGroup).removeView(\n                                fullscreenNotificationIconArea\n                            )\n\n                            val mConstraintLayout = ConstraintLayout(context).also {\n                                it.layoutParams = ConstraintLayout.LayoutParams(\n                                    ConstraintLayout.LayoutParams.MATCH_PARENT,\n                                    ConstraintLayout.LayoutParams.MATCH_PARENT\n                                )\n                            }\n\n                            mConstraintLayout.addView(fullscreenNotificationIconArea)\n                            mConstraintLayout.addView(battery)\n\n\n                            battery.layoutParams = ConstraintLayout.LayoutParams(\n                                ConstraintLayout.LayoutParams.WRAP_CONTENT,\n                                ConstraintLayout.LayoutParams.MATCH_PARENT\n                            ).also {\n                                it.endToEnd = 0\n                            }\n\n\n                            fullscreenNotificationIconArea.layoutParams =\n                                ConstraintLayout.LayoutParams(\n                                    0, ConstraintLayout.LayoutParams.MATCH_PARENT\n                                ).also {\n                                    it.startToEnd = batteryId\n                                    it.endToEnd = 0\n                                }\n                            fullscreenNotificationIconArea.layoutDirection =\n                                View.LAYOUT_DIRECTION_RTL\n\n\n                            // 增加一个左对齐布局\n                            mLeftLayout = LinearLayout(context)\n                            val leftLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(\n                                0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f\n                            )\n                            mLeftLayout!!.layoutParams = leftLp\n                            mLeftLayout!!.gravity = Gravity.START or Gravity.CENTER_VERTICAL\n\n                            // 增加一个居中布局\n                            mCenterLayout = LinearLayout(context)\n                            val centerLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(\n                                LinearLayout.LayoutParams.WRAP_CONTENT,\n                                LinearLayout.LayoutParams.MATCH_PARENT\n                            )\n                            mCenterLayout!!.layoutParams = centerLp\n                            mCenterLayout!!.gravity = Gravity.CENTER or Gravity.CENTER_VERTICAL\n\n                            // 增加一个右布局\n                            mRightLayout = LinearLayout(context)\n                            val rightLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams(\n                                0, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f\n                            )\n                            mRightLayout!!.layoutParams = rightLp\n                            mRightLayout!!.gravity = Gravity.END or Gravity.CENTER_VERTICAL\n\n\n                            mLeftLayout!!.addView(phoneStatusBarLeftContainer)\n                            mLeftLayout!!.addView(statusIcons)\n                            statusIcons.layoutDirection = View.LAYOUT_DIRECTION_RTL\n\n                            mCenterLayout!!.addView(clock)\n\n                            mRightLayout!!.addView(mConstraintLayout)\n                            fullscreenNotificationIconArea.layoutDirection =\n                                View.LAYOUT_DIRECTION_RTL\n\n\n                            statusBarContents.addView(mLeftLayout, 0)\n                            statusBarContents.addView(mCenterLayout)\n                            statusBarContents.addView(mRightLayout)\n\n\n\n                            statusBarLeft = statusBar!!.paddingLeft\n                            statusBarTop = statusBar!!.paddingTop\n                            statusBarRight = statusBar!!.paddingRight\n                            statusBarBottom = statusBar!!.paddingBottom\n\n\n                            if (isCompatibilityMode) {\n                                /*val customLeftMargin =\n                                    mPrefsMap.getStringAsInt(\"status_bar_left_margin\", 0)\n                                if (customLeftMargin != 0) {\n                                    statusBarLeft = customLeftMargin\n                                }\n\n                                val customRightMargin =\n                                    mPrefsMap.getStringAsInt(\"status_bar_right_margin\", 0)\n                                if (customRightMargin != 0) {\n                                    statusBarRight = customRightMargin\n                                }*/\n                                updateLayout(context, 2)\n                            }\n                        }\n                    }\n                // 兼容模式\n                phoneStatusBarView.methodFinder()\n                    .filterByName(\"updateLayoutForCutout\")\n                    .first().createHook {\n                        after {\n                            if (isCompatibilityMode) {\n                                val context = (it.thisObject as ViewGroup).context\n                                updateLayout(context, 2)\n                            }\n                        }\n                    }\n\n                // 解决重叠\n                loadClass(\"com.android.systemui.statusbar.phone.MiuiCollapsedStatusBarFragment\").methodFinder()\n                    .filterByName(\"showClock\")\n                    .filterByParamTypes(Boolean::class.java)\n                    .first().createHook {\n                        after {\n                            val miuiPhoneStatusBarView =\n                                it.thisObject.getObjectFieldAs<ViewGroup>(\"mStatusBar\")\n                            val res = miuiPhoneStatusBarView.resources\n                            val statusBarId =\n                                res.getIdentifier(\"status_bar\", \"id\", \"com.android.systemui\")\n                            val statusBar1 =\n                                miuiPhoneStatusBarView.findViewById<ViewGroup>(statusBarId)\n                            // 非锁屏下整个状态栏布局\n                            val keyguardMgr =\n                                statusBar1.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager\n                            if (keyguardMgr.isKeyguardLocked) {\n                                statusBar1!!.visibility = View.GONE\n                            } else {\n                                statusBar1!!.visibility = View.VISIBLE\n                            }\n                        }\n                    }\n\n\n                // 修改图标的顺序\n                /*findConstructor(\"com.android.systemui.statusbar.phone.StatusBarIconList\") {\n                    parameterCount == 1\n                }.hookBefore {\n\n                }*/\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/model/MobileTypeSingleHook.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.model\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.graphics.Typeface\nimport android.util.TypedValue\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.setObjectField\nimport de.robv.android.xposed.XposedHelpers\n\nobject MobileTypeSingleHook : BaseHook() {\n    // 初始化开关\n    private val getLocation by lazy {\n        // 显示在信号左侧\n        mPrefsMap.getBoolean(\"system_ui_statusbar_mobile_type_left\")\n    }\n    private val isOnlyShowNetwork by lazy {\n        // 仅显示上网卡\n        mPrefsMap.getBoolean(\"system_ui_statusbar_mobile_type_only_show_network\")\n    }\n    private val bold by lazy {\n        // 加粗\n        mPrefsMap.getBoolean(\"system_ui_statusbar_mobile_type_bold\")\n    }\n    private val fontSize by lazy {\n        // 字体大小\n        mPrefsMap.getInt(\"system_ui_statusbar_mobile_type_font_size\", 27)\n    }\n    private val leftMargin by lazy {\n        // 左侧间距\n        mPrefsMap.getInt(\"system_ui_statusbar_mobile_type_left_margin\", 7)\n    }\n    private val rightMargin by lazy {\n        // 右侧间距\n        mPrefsMap.getInt(\"system_ui_statusbar_mobile_type_right_margin\", 0)\n    }\n    private val verticalOffset by lazy {\n        // 上下偏移量\n        mPrefsMap.getInt(\"system_ui_statusbar_mobile_type_vertical_offset\", 8)\n    }\n\n    @SuppressLint(\"DiscouragedApi\")\n    override fun init() {\n         val statusBarMobileClass by lazy {\n             loadClass(\"com.android.systemui.statusbar.StatusBarMobileView\")\n         }\n\n        // 兼容图标异常空位的问题，一些机器不需要这两个 hook\n        val showSingleMobileType: MethodHook = object : MethodHook(PRIORITY_HIGHEST) {\n            override fun before(param: MethodHookParam) {\n                val mobileIconState = param.args[0]\n                XposedHelpers.setObjectField(mobileIconState, \"showMobileDataTypeSingle\", true)\n                XposedHelpers.setObjectField(mobileIconState, \"fiveGDrawableId\", 0)\n            }\n        }\n        hookAllMethods(\"com.android.systemui.statusbar.StatusBarMobileView\", \"applyMobileState\", showSingleMobileType)\n\n        val afterUpdate: MethodHook = object : MethodHook() {\n            override fun after(param: MethodHookParam) {\n                val mMobileLeftContainer =\n                    XposedHelpers.getObjectField(param.thisObject, \"mMobileLeftContainer\")\n                XposedHelpers.callMethod(mMobileLeftContainer, \"setVisibility\", 8)\n            }\n        }\n        hookAllMethods(\"com.android.systemui.statusbar.StatusBarMobileView\", \"applyMobileState\", afterUpdate)\n\n        // 使网络类型单独显示\n        statusBarMobileClass.methodFinder().first {\n            name == \"applyMobileState\"\n        }.createHook {\n            before {\n                val mobileIconState = it.args[0]\n                mobileIconState.setObjectField(\"showMobileDataTypeSingle\", true)\n            }\n        }\n        try {\n            statusBarMobileClass.methodFinder().first {\n                name == \"init\"\n            }.createHook {\n                after {\n                    val mContext =\n                        XposedHelpers.getObjectField(it.thisObject, \"mContext\") as Context\n                    val res = mContext.resources\n                    val mobileLeftContainer =\n                        XposedHelpers.getObjectField(it.thisObject, \"mMobileLeftContainer\") as ViewGroup\n                    val mobileGroup =\n                        XposedHelpers.getObjectField(it.thisObject, \"mMobileGroup\") as LinearLayout\n                    val mobileTypeSingle =\n                        XposedHelpers.getObjectField(it.thisObject, \"mMobileTypeSingle\") as TextView\n                    /*val mobileIconState = it.args[0]\n                    val context: Context = statusBarMobileView.context\n                    val res: Resources = context.resources*/\n\n                    // 获取组件\n                    /*val mobileContainerLeftId: Int =\n                        res.getIdentifier(\"mobile_container_left\", \"id\", \"com.android.systemui\")\n                    val mobileContainerLeft =\n                        statusBarMobileView.findViewById<ViewGroup>(mobileContainerLeftId)\n                    val statusBarMobileView = it.thisObject as ViewGroup\n                    val mobileGroupId: Int =\n                        res.getIdentifier(\"mobile_group\", \"id\", \"com.android.systemui\")\n                    val mobileGroup = statusBarMobileView.findViewById<ViewGroup>(mobileGroupId)\n\n                    val mobileTypeSingleId: Int =\n                        res.getIdentifier(\"mobile_type_single\", \"id\", \"com.android.systemui\")\n                    val mobileTypeSingle =\n                        statusBarMobileView.findViewById<TextView>(mobileTypeSingleId)*/\n\n\n                    // 移动网络类型图标显示位置\n                    if (!getLocation) {\n                        mobileGroup.removeView(mobileTypeSingle)\n                        mobileGroup.addView(mobileTypeSingle)\n                        mobileGroup.removeView(mobileLeftContainer)\n                        mobileGroup.addView(mobileLeftContainer)\n                    }\n\n                    // 自定义样式\n                    if (fontSize != 27) {\n                        mobileTypeSingle.textSize = fontSize * 0.5f\n                    }\n                    if (bold) {\n                        mobileTypeSingle.typeface = Typeface.DEFAULT_BOLD\n                    }\n\n                    val marginLeft =\n                        TypedValue.applyDimension(\n                            TypedValue.COMPLEX_UNIT_DIP,\n                            leftMargin * 0.5f,\n                            res.displayMetrics\n                        ).toInt()\n\n                    val marginRight =\n                        TypedValue.applyDimension(\n                            TypedValue.COMPLEX_UNIT_DIP,\n                            rightMargin * 0.5f,\n                            res.displayMetrics\n                        ).toInt()\n\n                    var topMargin = 0\n                    if (verticalOffset != 8) {\n                        val marginTop =\n                            TypedValue.applyDimension(\n                                TypedValue.COMPLEX_UNIT_DIP,\n                                (verticalOffset - 8) * 0.5f,\n                                res.displayMetrics\n                            )\n                        topMargin = marginTop.toInt()\n                    }\n\n                    mobileTypeSingle.setPaddingRelative(marginLeft, topMargin, marginRight, 0)\n\n                    // it.thisObject.callMethod(\"updateState\", mobileIconState)\n                }\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n\n        // 显示非上网卡的大图标\n        /*if (!isOnlyShowNetwork) {\n            statusBarMobileClass.methodFinder().first {\n                name == \"updateState\"\n            }.createHook {\n                after {\n                    val mobileIconState = it.args[0]\n                    val statusBarMobileView = it.thisObject as ViewGroup\n                    val context: Context = statusBarMobileView.context\n                    val res: Resources = context.resources\n\n                    val mobileTypeSingleId: Int =\n                        res.getIdentifier(\"mobile_type_single\", \"id\", \"com.android.systemui\")\n                    val mobileTypeSingle =\n                        statusBarMobileView.findViewById<TextView>(mobileTypeSingleId)\n\n                    if (!mobileIconState.getObjectFieldAs<Boolean>(\"dataConnected\") &&\n                        !mobileIconState.getObjectFieldAs<Boolean>(\"wifiAvailable\")) {\n                        mobileTypeSingle.visibility = View.VISIBLE\n                    }\n                }\n            }\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/model/MobileTypeTextCustom.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.model\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nobject MobileTypeTextCustom : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.statusbar.connectivity.MobileSignalController\").methodFinder().first {\n            name == \"getMobileTypeName\" && parameterTypes[0] == Int::class.java\n        }.createHook {\n            after {\n                it.result = mPrefsMap.getString(\"system_ui_status_bar_mobile_type_custom\", \"ERR\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/network/NetworkSpeed.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network\n\nimport android.content.Context\nimport android.net.ConnectivityManager\nimport android.net.NetworkCapabilities\nimport android.net.TrafficStats\nimport android.util.Pair\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.R\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport com.sevtinge.cemiuiler.utils.devicesdk.getAndroidVersion\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XposedHelpers\nimport java.net.NetworkInterface\nimport kotlin.math.pow\nimport kotlin.math.roundToLong\n\nobject NetworkSpeed : BaseHook() {\n    private var measureTime: Long = 0\n    private var newTxBytesFixed: Long = 0\n    private var newRxBytesFixed: Long = 0\n    private var txBytesTotal: Long = 0\n    private var rxBytesTotal: Long = 0\n    private var txSpeed: Long = 0\n    private var rxSpeed: Long = 0\n    private var txArrow = \"\"\n    private var rxArrow = \"\"\n\n    //  隐藏慢速\n    private val hideLow by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_hide\")\n    }\n    // 网速均低于设定值隐藏\n    private val allHideLow by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_hide_all\")\n    }\n    //  慢速水平\n    private val lowLevel by lazy {\n        mPrefsMap.getInt(\"system_ui_statusbar_network_speed_hide_slow\", 1) * 1024\n    }\n    // 值和单位双排显示\n    private val fakeDualRow by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_fakedualrow\")\n    }\n    // 上下行网速双排显示\n    private val doubleUpDown by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_show_up_down\")\n    }\n    // 交换图标与网速位置\n    private val swapPlaces by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_swap_places\")\n    }\n    // 网速图标\n    private val icons by lazy {\n        mPrefsMap.getString(\"system_ui_statusbar_network_speed_icon\", \"2\").toInt()\n    }\n\n    private fun getTrafficBytes(): Pair<Long, Long> {\n        var tx = -1L\n        var rx = -1L\n        try {\n            val list = NetworkInterface.getNetworkInterfaces()\n            while (list.hasMoreElements()) {\n                val iFace = list.nextElement()\n                if (iFace.isUp && !iFace.isVirtual && !iFace.isLoopback && !iFace.isPointToPoint && \"\" != iFace.name) {\n                    tx +=\n                        XposedHelpers.callStaticMethod(TrafficStats::class.java, \"getTxBytes\", iFace.name) as Long\n                    rx +=\n                        XposedHelpers.callStaticMethod(TrafficStats::class.java, \"getRxBytes\", iFace.name) as Long\n                }\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n            tx = TrafficStats.getTotalTxBytes()\n            rx = TrafficStats.getTotalRxBytes()\n        }\n        return Pair(tx, rx)\n    }\n\n    //  网速计算与隐藏相关\n    private fun humanReadableByteCount(ctx: Context, bytes: Long): String {\n        return try {\n            val modRes = Helpers.getModuleRes(ctx)\n            val hideSecUnit = mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_sec_unit\")\n            var unitSuffix = modRes.getString(R.string.system_ui_statusbar_network_speed_Bs)\n            if (hideSecUnit) unitSuffix = \"\"\n            var f = bytes / 1024.0f\n            var expIndex = 0\n            if (f > 999.0f) {\n                expIndex = 1\n                f /= 1024.0f\n            }\n            val pre = modRes.getString(R.string.system_ui_statusbar_network_speed_speedunits)[expIndex]\n            if (mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_fakedualrow\")) {\n                (if (f < 100.0f) String.format(\"%.1f\", f) else String.format(\"%.0f\", f)) + \"\\n\" + String.format(\"%s$unitSuffix\", pre)\n            } else {\n                (if (f < 100.0f) String.format(\"%.1f\", f) else String.format(\"%.0f\", f)) + String.format(\"%s$unitSuffix\", pre)\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n            \"\"\n        }\n    }\n\n    override fun init() {\n        // 双排网速相关\n        val networkClass = when {\n            getAndroidVersion() == 30 -> \"com.android.systemui.statusbar.NetworkSpeedController\"\n            else -> \"com.android.systemui.statusbar.policy.NetworkSpeedController\"\n        }\n\n        val nscCls by lazy {\n            findClassIfExists(networkClass, lpparam.classLoader)\n        }\n\n        if (nscCls == null) {\n            XposedLogUtils.logE(TAG, \"DetailedNetSpeedHook: No NetworkSpeed view or controller\")\n        } else {\n            nscCls.methodFinder().first {\n                name == \"getTotalByte\"\n            }.createHook {\n                after {\n                    val bytes = getTrafficBytes()\n                    txBytesTotal = bytes.first\n                    rxBytesTotal = bytes.second\n                    measureTime = System.nanoTime()\n                }\n            }\n\n            nscCls.methodFinder().first {\n                name == \"updateNetworkSpeed\"\n            }.createHook {\n                before {\n                    var isConnected = false\n                    val mContext =\n                        XposedHelpers.getObjectField(it.thisObject, \"mContext\") as Context\n                    val mConnectivityManager =\n                        mContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager\n                    val nw = mConnectivityManager.activeNetwork\n                    if (nw != null) {\n                        val capabilities = mConnectivityManager.getNetworkCapabilities(nw)\n                        if (capabilities != null && (!(!\n                            capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) &&\n                                !capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)))\n                        ) {\n                            isConnected = true\n                        }\n                    }\n                    if (isConnected) {\n                        val nanoTime = System.nanoTime()\n                        var newTime = nanoTime - measureTime\n                        measureTime = nanoTime\n                        if (newTime == 0L) newTime = (4 * 10.0.pow(9.0)).roundToLong()\n                        val bytes = getTrafficBytes()\n                        val newTxBytes = bytes.first\n                        val newRxBytes = bytes.second\n                        newTxBytesFixed = newTxBytes - txBytesTotal\n                        newRxBytesFixed = newRxBytes - rxBytesTotal\n                        if (newTxBytesFixed < 0 || txBytesTotal == 0L) newTxBytesFixed = 0\n                        if (newRxBytesFixed < 0 || rxBytesTotal == 0L) newRxBytesFixed = 0\n                        txSpeed = (newTxBytesFixed / (newTime / 10.0.pow(9.0))).roundToLong()\n                        rxSpeed = (newRxBytesFixed / (newTime / 10.0.pow(9.0))).roundToLong()\n                        txBytesTotal = newTxBytes\n                        rxBytesTotal = newRxBytes\n                    } else {\n                        txSpeed = 0\n                        rxSpeed = 0\n                    }\n                }\n            }\n\n            try {\n                nscCls.methodFinder().filterByName(\"formatSpeed\").filterByParamCount(2).first()\n            } catch (t: Throwable) {\n                nscCls.methodFinder().filterByName(\"updateText\").filterByParamCount(1).first()\n            }.createHook {\n                before {\n                    when (icons) {\n                        2 -> {\n                            txArrow = if (txSpeed < lowLevel) \"△\" else \"▲\"\n                            rxArrow = if (rxSpeed < lowLevel) \"▽\" else \"▼\"\n                        }\n\n                        3 -> {\n                            txArrow = if (txSpeed < lowLevel) \" ▵\" else \" ▴\"\n                            rxArrow = if (rxSpeed < lowLevel) \" ▿\" else \" ▾\"\n                        }\n\n                        4 -> {\n                            txArrow = if (txSpeed < lowLevel) \" ☖\" else \" ☗\"\n                            rxArrow = if (rxSpeed < lowLevel) \" ⛉\" else \" ⛊\"\n                        }\n\n                        5 -> {\n                            txArrow = if (txSpeed < lowLevel) \"↑\" else \"↑\"\n                            rxArrow = if (rxSpeed < lowLevel) \"↓\" else \"↓\"\n                        }\n\n                        6 -> {\n                            txArrow = if (txSpeed < lowLevel) \"⇧\" else \"⇧\"\n                            rxArrow = if (rxSpeed < lowLevel) \"⇩\" else \"⇩\"\n                        }\n                    }\n\n                    // 计算上行网速\n                    val tx =\n                        if (hideLow && !allHideLow && txSpeed < lowLevel)\n                            \"\"\n                        else {\n                            if (swapPlaces)\n                                \"$txArrow${humanReadableByteCount(it.args[0] as Context, txSpeed)}\"\n                            else\n                                \"${humanReadableByteCount(it.args[0] as Context, txSpeed)}$txArrow\"\n                        }\n                    // 计算下行网速\n                    val rx =\n                        if (hideLow && !allHideLow && rxSpeed < lowLevel)\n                            \"\"\n                        else {\n                            if (swapPlaces)\n                                \"$rxArrow${humanReadableByteCount(it.args[0] as Context, rxSpeed)}\"\n                            else\n                                \"${humanReadableByteCount(it.args[0] as Context, rxSpeed)}$rxArrow\"\n                        }\n                    // 计算总网速\n                    val ax =\n                        humanReadableByteCount(\n                            it.args[0] as Context,\n                            newTxBytesFixed + newRxBytesFixed\n                        )\n                    // 存储是否隐藏慢速的条件的结果\n                    val isLowSpeed = hideLow && (txSpeed + rxSpeed) < lowLevel\n                    val isAllLowSpeed =\n                        hideLow && allHideLow && txSpeed < lowLevel && rxSpeed < lowLevel\n\n                    when {\n                        // 如果显示上下行网速并且不开值和单位双排显示，返回上下行网速的字符串\n                        doubleUpDown && !fakeDualRow -> {\n                            if (isLowSpeed && !isAllLowSpeed) {\n                                it.result = \"\"\n                            } else if (isAllLowSpeed) {\n                                it.result = \"\"\n                            } else {\n                                it.result = \"$tx\\n$rx\"\n                            }\n                        }\n                        // 如果开启值和单位双排显示，返回总网速的字符串\n                        fakeDualRow -> {\n                            if (isLowSpeed) {\n                                it.result = \"\"\n                            } else {\n                                it.result = ax\n                            }\n                        }\n                        // 其他情况，对隐藏慢速判定，返回空字符串，其余不返回\n                        else -> {\n                            if (isLowSpeed) {\n                                it.result = \"\"\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/network/NetworkSpeedSec.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\n// 隐藏网速单位\nobject NetworkSpeedSec : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.statusbar.views.NetworkSpeedView\").methodFinder().first {\n            name == \"setNetworkSpeed\" && parameterCount == 1\n        }.createHook {\n            before {\n                if (it.args[0] != null) {\n                    val mText = (it.args[0] as String)\n                        .replace(\"/\", \"\")\n                        .replace(\"s\", \"\")\n                        .replace(\"\\'\", \"\")\n                        .replace(\"วิ\", \"\")\n                    it.args[0] = mText\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/network/NetworkSpeedSpacing.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network\n\nimport android.os.Build\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\n\nobject NetworkSpeedSpacing : BaseHook() {\n    override fun init() {\n        // 网速更新间隔\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {  // Android12+ 可用\n            Helpers.findAndHookMethod(\n                \"com.android.systemui.statusbar.policy.NetworkSpeedController\", lpparam.classLoader,\n                \"postUpdateNetworkSpeedDelay\",\n                Long::class.javaPrimitiveType,\n                object : MethodHook() {\n                    override fun before(param: MethodHookParam) {\n                        val originInterval = param.args[0] as Long\n                        if (originInterval == 4000L) {\n                            val newInterval =\n                                mPrefsMap.getInt(\"system_ui_statusbar_network_speed_update_spacing\", 4) * 1000L\n                            param.args[0] = newInterval\n                        }\n                    }\n                })\n        }\n\n        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R) {  // Android11 可用\n            Helpers.findAndHookMethod(\n                \"com.android.systemui.statusbar.NetworkSpeedController\", lpparam.classLoader,\n                \"postUpdateNetworkSpeedDelay\",\n                Long::class.javaPrimitiveType,\n                object : MethodHook() {\n                    override fun before(param: MethodHookParam) {\n                        val originInterval = param.args[0] as Long\n                        if (originInterval != 0L) {\n                            val intervalTime =\n                                mPrefsMap.getInt(\"system_ui_statusbar_network_speed_update_spacing\", 4) * 1000L\n                            param.args[0] = intervalTime\n                        }\n                    }\n                })\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/network/NetworkSpeedStyle.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network\n\nimport android.graphics.Typeface\nimport android.util.TypedValue\nimport android.view.View\nimport android.widget.TextView\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.devicesdk.isAndroidR\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XposedHelpers\n\nobject NetworkSpeedStyle : BaseHook() {\n    private val doubleLine by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_detailed\") &&\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_show_up_down\")\n    }\n    private val dualRow by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_fakedualrow\")\n    }\n    private val fontSize by lazy {\n        mPrefsMap.getInt(\"system_ui_statusbar_network_speed_font_size\", 13)\n    }\n    private val fontSizeEnable by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_font_size_enable\")\n    }\n    private val bold by lazy {\n        mPrefsMap.getBoolean(\"system_ui_statusbar_network_speed_bold\")\n    }\n\n    override fun init() {\n        if (isAndroidR()) {\n            // Android 11 or MIUI12.5 Need to hook Statusbar in Screen Lock interface, to set front size\n            // Thanks for CustoMIUIzerMod\n            loadClass(\"com.android.systemui.statusbar.phone.MiuiKeyguardStatusBarView\").methodFinder().first {\n                name == \"onDensityOrFontScaleChanged\"\n            }.createHook {\n               after { params ->\n                   val meter = XposedHelpers.getObjectField(params.thisObject, \"mNetworkSpeedView\") as TextView\n\n                   // 网速字体大小调整\n                   if (fontSizeEnable) {\n                       try {\n                           if (doubleLine || dualRow) {\n                               meter.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize * 0.5f)\n                           } else {\n                               meter.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize.toFloat())\n                           }\n                       } catch (e: Exception) {\n                           XposedLogUtils.logE(TAG, e)\n                       }\n                   }\n               }\n            }\n        }\n\n        hookAllConstructors(\"com.android.systemui.statusbar.views.NetworkSpeedView\",\n            object : MethodHook() {\n                override fun after(param: MethodHookParam) {\n                    // 值和单位双排显示 + 上下行网速双排显示\n                    val meter = param.thisObject as TextView\n\n                    if (dualRow) {\n                        mResHook.setObjectReplacement(lpparam.packageName, \"string\", \"network_speed_suffix\", \"%1\\$s\\n%2\\$s\")\n                    }\n\n                    if (meter.tag == null || \"slot_text_icon\" != meter.tag) {\n                        // 网速字体大小调整\n                        if (fontSizeEnable) {\n                            try {\n                                if (doubleLine || dualRow) {\n                                    meter.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize * 0.5f)\n                                } else {\n                                    meter.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize.toFloat())\n                                }\n                            } catch (e: Exception) {\n                                XposedLogUtils.logE(TAG, e)\n                            }\n                        }\n\n                        // 网速加粗\n                        if (bold) {\n                            meter.typeface = Typeface.DEFAULT_BOLD\n                        }\n                        val res = meter.resources\n\n                        // 左侧间距\n                        var leftMargin =\n                            mPrefsMap.getInt(\"system_ui_statusbar_network_speed_left_margin\", 0)\n                        leftMargin = TypedValue.applyDimension(\n                            TypedValue.COMPLEX_UNIT_DIP,\n                            leftMargin * 0.5f,\n                            res.displayMetrics\n                        ).toInt()\n\n                        // 右侧间距\n                        var rightMargin =\n                            mPrefsMap.getInt(\"system_ui_statusbar_network_speed_right_margin\", 0)\n                        rightMargin = TypedValue.applyDimension(\n                            TypedValue.COMPLEX_UNIT_DIP,\n                            rightMargin * 0.5f,\n                            res.displayMetrics\n                        ).toInt()\n\n                        // 上下偏移量\n                        var topMargin = 0\n                        val verticalOffset =\n                            mPrefsMap.getInt(\"system_ui_statusbar_network_speed_vertical_offset\", 8)\n                        if (verticalOffset != 8) {\n                            val marginTop = TypedValue.applyDimension(\n                                TypedValue.COMPLEX_UNIT_DIP,\n                                (verticalOffset - 8) * 0.5f,\n                                res.displayMetrics\n                            )\n                            topMargin = marginTop.toInt()\n                        }\n                        meter.setPaddingRelative(leftMargin, topMargin, rightMargin, 0)\n\n                        // 水平对齐\n                        when (mPrefsMap.getStringAsInt(\"system_ui_statusbar_network_speed_align\", 1)) {\n                            2 -> meter.textAlignment = View.TEXT_ALIGNMENT_TEXT_START\n                            3 -> meter.textAlignment = View.TEXT_ALIGNMENT_CENTER\n                            4 -> meter.textAlignment = View.TEXT_ALIGNMENT_TEXT_END\n                        }\n                        try {\n                            if (doubleLine || dualRow) {\n                                var spacing = 0.9f\n                                meter.isSingleLine = false\n                                meter.maxLines = 2\n                                if (fontSize > 8.5f) {\n                                    spacing = 0.9f\n                                }\n                                meter.setLineSpacing(0f, spacing)\n                            }\n                        } catch (e: Exception) {\n                            XposedLogUtils.logE(TAG, e)\n                        }\n                    }\n                }\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/network/StatusBarNoNetSpeedSep.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network\n\nimport android.view.View\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XposedHelpers\n\n\nobject StatusBarNoNetSpeedSep : BaseHook() {\n    override fun init() {\n        loadClass(\"com.android.systemui.statusbar.views.NetworkSpeedSplitter\", lpparam.classLoader).methodFinder()\n            .first {\n                name == \"updateVisibility\"\n            }.createHook {\n            before {\n                XposedHelpers.setObjectField(it.thisObject, \"mNetworkSpeedVisibility\", View.GONE)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/systemui/statusbar/network/s/NetworkSpeedWidth.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.systemui.statusbar.network.s\n\nimport android.widget.TextView\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.Helpers\nimport de.robv.android.xposed.XposedHelpers\n\nobject NetworkSpeedWidth : BaseHook() {\n    override fun init() {\n        // 固定宽度以防相邻元素左右防抖\n        if (mPrefsMap.getInt(\"system_ui_statusbar_network_speed_fixedcontent_width\", 10) > 10) {\n            Helpers.hookAllMethods(\n                \"com.android.systemui.statusbar.views.NetworkSpeedView\",\n                lpparam.classLoader,\n                \"applyNetworkSpeedState\",\n                object : MethodHook() {\n                    override fun before(param: MethodHookParam) {\n                        val meter = param.thisObject as TextView\n                        if (meter.tag == null || \"slot_text_icon\" != meter.tag) {\n                            XposedHelpers.getAdditionalInstanceField(param.thisObject, \"inited\")\n                        }\n                    }\n                }\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/thememanager/DisableThemeAd.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.thememanager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport miui.drm.DrmManager;\n\npublic class DisableThemeAd extends BaseHook {\n\n    Class<?> mAdInfoCls;\n    Class<?> mAdInfoResponseCls;\n\n    @Override\n    public void init() {\n\n        mAdInfoCls = findClassIfExists(\"com.android.thememanager.basemodule.ad.model.AdInfo\");\n        mAdInfoResponseCls = findClassIfExists(\"com.android.thememanager.basemodule.ad.model.AdInfoResponse\");\n\n        findAndHookMethod(mAdInfoResponseCls, \"isAdValid\", mAdInfoCls, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(false);\n            }\n        });\n\n        findAndHookMethod(\"com.android.thememanager.recommend.view.listview.viewholder.PureAdBannerViewHolder\", \"isAdValid\", mAdInfoCls, new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(false);\n            }\n        });\n    }\n\n    public void initZygote() {\n\n        hookAllMethods(DrmManager.class, \"isSupportAd\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.setResult(false);\n            }\n        });\n\n        hookAllMethods(DrmManager.class, \"setSupportAd\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                param.args[1] = false;\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/thememanager/DisableThemeAdNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.thememanager\n\nimport android.view.View\nimport android.widget.FrameLayout\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.Log\nimport com.github.kyuubiran.ezxhelper.finders.ConstructorFinder.`-Static`.constructorFinder\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport miui.drm.DrmManager\n\nclass DisableThemeAdNew : BaseHook() {\n    override fun init() {\n        try {\n            DrmManager::class.java.methodFinder().filterByName(\"isSupportAd\").toList().createHooks {\n                returnConstant(false)\n            }\n        } catch (t: Throwable) {\n            Log.ex(t)\n        }\n        try {\n            DrmManager::class.java.methodFinder().filterByName(\"setSupportAd\").toList().createHooks {\n                returnConstant(false)\n            }\n        } catch (t: Throwable) {\n            Log.ex(t)\n        }\n        try {\n            loadClass(\"com.android.thememanager.basemodule.ad.model.AdInfoResponse\").methodFinder().filterByName(\"isAdValid\").filterByParamCount(1).first()\n                .createHook {\n                    returnConstant(false)\n                }\n        } catch (t: Throwable) {\n            Log.ex(t)\n        }\n\n        removeAds(loadClass(\"com.android.thememanager.recommend.view.listview.viewholder.SelfFontItemAdViewHolder\"))\n        removeAds(loadClass(\"com.android.thememanager.recommend.view.listview.viewholder.SelfRingtoneItemAdViewHolder\"))\n    }\n\n    private fun removeAds(clazz: Class<*>) {\n        try {\n            clazz.constructorFinder().filterByParamCount(2).first().createHook {\n                after {\n                    if (it.args[0] != null) {\n                        val view = it.args[0] as View\n                        val params = FrameLayout.LayoutParams(0, 0)\n                        view.layoutParams = params\n                        view.visibility = View.GONE\n                    }\n                }\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/thememanager/EnableFoldTheme.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.thememanager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class EnableFoldTheme extends BaseHook {\n\n    @Override\n    public void init() {\n        findAndHookMethod(\"com.android.thememanager.ThemeApplication\", \"onCreate\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                XposedHelpers.setStaticObjectField(findClassIfExists(\"android.os.Build\"), \"DEVICE\", \"zizhan\");\n            }\n        });\n\n        findAndHookMethod(\"com.android.thememanager.basemodule.utils.r\", \"r\", XC_MethodReplacement.returnConstant(true));\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/thememanager/EnablePadTheme.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.thememanager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class EnablePadTheme extends BaseHook {\n\n    @Override\n    public void init() {\n\n        /*findAndHookMethod(\"com.android.thememanager.basemodule.utils.r\", \"C\", XC_MethodReplacement.returnConstant(true));\n        findAndHookMethod(\"com.android.thememanager.basemodule.utils.r\", \"D\", XC_MethodReplacement.returnConstant(true));*/\n\n\n        findAndHookMethod(\"com.android.thememanager.ThemeApplication\", \"onCreate\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                XposedHelpers.setStaticBooleanField(findClassIfExists(\"miui.os.Build\"), \"IS_TABLET\", true);\n            }\n        });\n\n        /*findAndHookMethod(\"com.android.thememanager.basemodule.utils.r\", \"r\", XC_MethodReplacement.returnConstant(false));\n        findAndHookMethod(\"com.android.thememanager.basemodule.utils.r\", \"e\", XC_MethodReplacement.returnConstant(\"dagu\"));*/\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/thememanager/ThemeCrackNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.thememanager\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.Log\nimport com.github.kyuubiran.ezxhelper.ObjectHelper.Companion.objectHelper\nimport com.github.kyuubiran.ezxhelper.finders.FieldFinder.`-Static`.fieldFinder\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseXposedInit.mPrefsMap\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.closeDexKit\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.DexKit.initDexKit\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.setObjectField\nimport de.robv.android.xposed.callbacks.XC_LoadPackage\nimport miui.drm.DrmManager\nimport java.io.File\n\nclass ThemeCrackNew {\n    val TAG = \"ThemeCrackNew\"\n    fun init(lpparam: XC_LoadPackage.LoadPackageParam) {\n        if (mPrefsMap.getBoolean(\"various_enable_super_function\") && mPrefsMap.getBoolean(\"various_theme_crack\")) return\n        initDexKit(lpparam)\n        try {\n            loadClass(\"com.android.thememanager.detail.theme.model.OnlineResourceDetail\").methodFinder().filterByName(\"toResource\").toList().createHooks {\n                after {\n                    it.thisObject.setObjectField(\"bought\", true)\n                }\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n        try {\n            loadClass(\"com.android.thememanager.basemodule.views.DiscountPriceView\").methodFinder().filterByParamCount(2)\n                .filterByParamTypes(Int::class.java, Int::class.java).filterByReturnType(Void.TYPE).toList().createHooks {\n                    before {\n                        it.args[1] = 0\n                    }\n                }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n        try {\n            loadClass(\"com.android.thememanager.recommend.view.listview.viewholder.LargeIconDetailRecommendViewHolder\").methodFinder().filterByParamCount(1)\n                .filterByParamTypes(Int::class.java).filterByReturnType(Void.TYPE).toList().createHooks {\n                    before {\n                        it.args[0] = 0\n                    }\n                }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n        try {\n            loadClass(\"com.miui.maml.widget.edit.MamlutilKt\").methodFinder().filterByName(\"themeManagerSupportPaidWidget\").first().createHook {\n                returnConstant(false)\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }\n\n        try {\n            dexKitBridge.findMethod {\n                matcher {\n                    addUsingStringsEquals(\"theme\", \"ThemeManagerTag\", \"/system\", \"check rights isLegal:\")\n                }\n            }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n                after {\n                    it.result = DrmManager.DrmResult.DRM_SUCCESS\n                }\n            }\n\n            dexKitBridge.findMethod {\n                matcher {\n                    addUsingStringsEquals(\n                        \"apply failed\",\n                        \"/data/system/theme/large_icons/\",\n                        \"default_large_icon_product_id\",\n                        \"largeicons\",\n                        \"relativePackageList is empty\"\n                    )\n                }\n            }.firstOrNull()?.getMethodInstance(lpparam.classLoader)?.createHook {\n                before {\n                    val resource = it.thisObject.javaClass.fieldFinder().filterByType(loadClass(\"com.android.thememanager.basemodule.resource.model.Resource\", lpparam.classLoader)).first()\n                    val productId = it.thisObject.objectHelper().getObjectOrNull(resource.name)!!.objectHelper().invokeMethodBestMatch(\"getProductId\").toString()\n                    val strPath = \"/storage/emulated/0/Android/data/com.android.thememanager/files/MIUI/theme/.data/rights/theme/${productId}-largeicons.mra\"\n                    val file = File(strPath)\n                    val fileParent = file.parentFile!!\n                    if (!fileParent.exists()) fileParent.mkdirs()\n                    file.createNewFile()\n                }\n            }\n            closeDexKit()\n        } catch (t: Throwable) {\n            Log.ex(t)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/thememanager/VersionCodeModify.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.thememanager;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\npublic class VersionCodeModify extends BaseHook {\n\n    Class<?> mThemeApplication;\n\n    @Override\n    public void init() {\n\n        mThemeApplication = findClassIfExists(\"com.android.thememanager.ThemeApplication\");\n\n        findAndHookMethod(mThemeApplication, \"onCreate\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n\n                findAndHookMethod(\"android.os.SystemProperties\", \"get\", String.class, String.class, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        if (\"ro.miui.ui.version.code\".equals(param.args[0])) {\n                            param.setResult(\"14\");\n                        }\n                    }\n                });\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/tsmclient/AutoNfc.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.tsmclient\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.res.XModuleResources\nimport android.nfc.NfcAdapter\nimport android.widget.Toast\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.FieldFinder.`-Static`.fieldFinder\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.R\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.module.base.BaseXposedInit.mModulePath\nimport com.sevtinge.cemiuiler.utils.callMethod\nimport de.robv.android.xposed.callbacks.XC_InitPackageResources\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.launch\nimport org.lsposed.hiddenapibypass.HiddenApiBypass\n\nobject AutoNfc : BaseHook() {\n    @SuppressLint(\"SuspiciousIndentation\")\n    override fun init() {\n        loadClass(\"com.miui.tsmclient.ui.quick.DoubleClickActivity\").methodFinder().first {\n            name == \"onCreate\"\n        }.createHook {\n            after { param ->\n                if (!EzXHelper.isHostPackageNameInited)\n                    EzXHelper.initAppContext()\n                NfcAdapter.getDefaultAdapter(EzXHelper.appContext).let { nfcAdapter ->\n                    if (nfcAdapter.isEnabled) return@after\n                    HiddenApiBypass.invoke(NfcAdapter::class.java, nfcAdapter, \"enable\")\n                    MainScope().launch {\n                        waitNFCEnable(EzXHelper.appContext, nfcAdapter)\n                        param.thisObject.javaClass.fieldFinder().filter {\n                            type == Boolean::class.java\n                        }.last().setBoolean(param.thisObject, false)\n                        val ctaHelperClazz = findClass(\"com.miui.tsmclient.entity.CTAHelper\")\n                        param.thisObject.javaClass.fieldFinder().first {\n                            type == ctaHelperClazz\n                        }.get(param.thisObject)!!.callMethod(\"check\")\n                    }\n                }\n            }\n        }\n        loadClass(\"com.miui.tsmclient.ui.quick.DoubleClickActivity\").methodFinder().first {\n            name == \"onDestroy\"\n        }.createHook {\n            before {\n                NfcAdapter.getDefaultAdapter(EzXHelper.appContext).let { nfcAdapter ->\n                    HiddenApiBypass.invoke(NfcAdapter::class.java, nfcAdapter, \"disable\")\n                }\n            }\n        }\n    }\n\n    fun initResource(resparam: XC_InitPackageResources.InitPackageResourcesParam) {\n        val moduleRes = XModuleResources.createInstance(mModulePath, resparam.res)\n        resparam.res.setReplacement(\n            \"com.miui.tsmclient\",\n            \"string\",\n            \"nfc_off_hint\",\n            moduleRes.fwd(R.string.tsmclient_nfc_turning_on)\n        )\n        resparam.res.setReplacement(\n            \"com.miui.tsmclient\",\n            \"string\",\n            \"immediately_open\",\n            moduleRes.fwd(R.string.tsmclient_nfc_turn_on_manually)\n        )\n    }\n\n    private suspend fun waitNFCEnable(context: Context, nfcAdapter: NfcAdapter) {\n        repeat(15) {\n            if (!nfcAdapter.isEnabled) delay(300) else return@repeat\n            if (it == 14)\n                Toast.makeText(context, R.string.tsmclient_nfc_turn_on_failed, Toast.LENGTH_SHORT).show()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/updater/DeviceModify.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.updater\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.hookBeforeMethod\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject DeviceModify : BaseHook() {\n    private val deviceName: String = mPrefsMap.getString(\"updater_device\", \"\")\n    override fun init() {\n        try {\n            \"android.os.SystemProperties\".hookBeforeMethod(\n                \"get\", String::class.java, String::class.java\n            ) {\n                if (it.args[0] == \"ro.product.mod_device\") it.result = deviceName\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logE(TAG, \"[DeviceModify(Updater)]: android.os.SystemProperties hook failed\", e)\n        }\n        try {\n            \"miuix.core.util.SystemProperties\".hookBeforeMethod(\n                \"get\", String::class.java, String::class.java\n            ) {\n                if (it.args[0] == \"ro.product.mod_device\") it.result = deviceName\n            }\n        } catch (e: Throwable) {\n            XposedLogUtils.logE(TAG, \"[DeviceModify(Updater)]: DeviceModify (Updater) miuix.core.util.SystemProperties hook failed\", e)\n        }\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"android.os.SystemProperties\", \"get\", \"get e\")\n            }\n        }.forEach { methodData ->\n            methodData.getMethodInstance(lpparam.classLoader).hookBeforeMethod {\n                if (it.args[0] == \"ro.product.mod_device\") it.result = deviceName\n            }\n            XposedLogUtils.logI(\"(Updater) dexkit method is $methodData\")\n        }\n\n        /*try {\n            val systemProperties = mUpdaterResultMethodsMap[\"SystemProperties\"]!!\n            assert(systemProperties.size == 1)\n            val systemPropertiesDescriptor = systemProperties.first()\n            val systemPropertiesMethod: Method =\n                systemPropertiesDescriptor.getMethodInstance(lpparam.classLoader)\n            systemPropertiesMethod.hookBeforeMethod {\n                if (it.args[0] == \"ro.product.mod_device\") it.result = deviceName\n            }\n            XposedLogUtils.logI(\"(Updater) dexkit method is $systemPropertiesMethod\")\n        } catch (e: Throwable) {\n            XposedBridge.log(\"[Cemiuiler][E][DeviceModify(Updater)]: DeviceModify (Updater) dexkit hook failed by $e\")\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/updater/VabUpdate.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.updater\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\n\nclass VabUpdate : BaseHook() {\n    override fun init() {\n        loadClass(\"miui.util.FeatureParser\").methodFinder().first {\n            name == \"hasFeature\" && parameterCount == 2\n        }.createHook {\n            before {\n                if (it.args[0] == \"support_ota_validate\") {\n                    it.result = false\n                }\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/updater/VersionCodeModify.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.updater;\n\nimport android.os.Build;\nimport android.text.TextUtils;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class VersionCodeModify extends BaseHook {\n\n    Class<?> mApplication;\n\n    @Override\n    public void init() {\n\n        mApplication = findClassIfExists(\"com.android.updater.Application\");\n\n        findAndHookMethod(mApplication, \"onCreate\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                String mVersionCode = mPrefsMap.getString(\"various_updater_miui_version\", \"V14.0.22.11.26.DEV\");\n                if (!TextUtils.isEmpty(mVersionCode)) {\n                    XposedHelpers.setStaticObjectField(Build.VERSION.class, \"INCREMENTAL\", mVersionCode);\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/updater/VersionCodeNew.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.updater\n\nimport android.os.Build\nimport android.text.TextUtils\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport de.robv.android.xposed.XposedHelpers\n\nobject VersionCodeNew : BaseHook() {\n    private val mBigMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"ro.miui.ui.version.name\")\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.first()\n    }\n    private val mOSMethod by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"ro.mi.os.version.incremental\", \"version:\")\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.first()\n    }\n    private val mOSCode by lazy {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\"ro.mi.os.version.name\", \"OS\")\n            }\n        }.map { it.getMethodInstance(EzXHelper.classLoader) }.first()\n    }\n\n    private val mOldVersionCode =\n        mPrefsMap.getString(\"various_updater_big_version\", \"V816\")\n\n    private val mVersionCode =\n        mPrefsMap.getString(\"various_updater_miui_version\", \"V14.0.22.11.26.DEV\")\n\n\n    override fun init() {\n        // 原始修改版本名\n        val mApplication = findClassIfExists(\"com.android.updater.Application\")\n\n        findAndHookMethod(mApplication, \"onCreate\", object : MethodHook() {\n            override fun before(param: MethodHookParam) {\n                if (!TextUtils.isEmpty(mVersionCode)) {\n                    XposedHelpers.setStaticObjectField(\n                        Build.VERSION::class.java,\n                        \"INCREMENTAL\",\n                        \"$mOldVersionCode.${mVersionCode.substringAfter(\".\")}\"\n                    )\n                }\n            }\n        })\n\n        // 大版本名字修改\n        mBigMethod.createHook {\n            before {\n                if (!TextUtils.isEmpty(mOldVersionCode)) {\n                    it.result = mOldVersionCode\n                }\n            }\n        }\n\n        // OS 版本名修改\n        mOSMethod.createHook {\n            before {\n                if (!TextUtils.isEmpty(mVersionCode)) {\n                    it.result = mVersionCode\n                }\n            }\n        }\n\n        // OS 版本修改\n        mOSCode.createHook {\n            before {\n                if (!TextUtils.isEmpty(mVersionCode)) {\n                    it.result =\n                        \"${mVersionCode.split(\".\")[0]}.${mVersionCode.split(\".\")[1]}.${mVersionCode.split(\".\")[2]}\"\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/CollapseMiuiTitle.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.various;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedHelpers;\nimport miui.app.ActionBar;\n\npublic class CollapseMiuiTitle extends BaseHook {\n\n    @Override\n    public void init() {\n        Class<?> abvCls = findClassIfExists(\"com.miui.internal.widget.AbsActionBarView\");\n\n        int opt = mPrefsMap.getStringAsInt(\"various_collapse_miui_title\", 0);\n\n        if (abvCls != null)\n            hookAllConstructors(abvCls, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    XposedHelpers.setIntField(param.thisObject, \"mExpandState\", ActionBar.STATE_EXPAND);\n                    XposedHelpers.setIntField(param.thisObject, \"mInnerExpandState\", ActionBar.STATE_COLLAPSE);\n                    if (opt == 2) XposedHelpers.setBooleanField(param.thisObject, \"mResizable\", false);\n                }\n            });\n\n        abvCls = findClassIfExists(\"miuix.appcompat.internal.app.widget.ActionBarView\");\n        if (abvCls != null)\n            hookAllConstructors(abvCls, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) throws Throwable {\n                    try {\n                        setExpandState(param.thisObject, opt == 1 || opt == 3);\n                        setResizable(param.thisObject, opt == 3 || opt == 4);\n                    } catch (Throwable ignore) {\n                    }\n                }\n            });\n    }\n\n    private void setExpandState(Object obj, boolean state) {\n        if (state) {\n            XposedHelpers.callMethod(obj, \"setExpandState\", ActionBar.STATE_COLLAPSE);\n        } else {\n            XposedHelpers.callMethod(obj, \"setExpandState\", ActionBar.STATE_EXPAND);\n        }\n    }\n\n    private void setResizable(Object obj, boolean state) {\n        if (state) {\n            XposedHelpers.callMethod(obj, \"setResizable\", false);\n        } else {\n            XposedHelpers.callMethod(obj, \"setResizable\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/DialogBlur.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.various;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DialogBlur extends BaseHook {\n\n    Class<?> mDialogCls = findClassIfExists(\"miuix.appcompat.app.AlertController\");\n\n    @Override\n    public void init() {\n        hookAllMethods(mDialogCls, \"installContent\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n\n                View mParentPanel = (View) XposedHelpers.getObjectField(param.thisObject, \"mParentPanel\");\n\n                if (mParentPanel != null) {\n                    /*new BlurUtils(mParentPanel);*/\n                    new BlurUtils(mParentPanel, \"default\");\n                }\n            }\n        });\n\n        hookAllMethods(mDialogCls, \"dismiss\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                super.after(param);\n                View mParentPanel = (View) XposedHelpers.getObjectField(param.thisObject, \"mParentPanel\");\n                mParentPanel.setVisibility(View.INVISIBLE);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/DialogCustom.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.various;\n\nimport android.content.Context;\nimport android.content.res.Configuration;\nimport android.os.Build;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.Window;\nimport android.view.WindowManager;\nimport android.widget.FrameLayout;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Method;\nimport java.util.LinkedList;\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DialogCustom extends BaseHook {\n\n    Context mContext;\n    View mParentPanel = null;\n\n    Class<?> mAlertControllerCls;\n    Class<?> mDialogParentPanelCls;\n\n    int mDialogGravity;\n    int mDialogHorizontalMargin;\n    int mDialogBottomMargin;\n\n    @Override\n    public void init() {\n\n        if (lpparam.packageName.equals(\"com.miui.home\")) {\n            mAlertControllerCls = findClassIfExists(\"miui.home.lib.dialog.AlertController\");\n        } else {\n            mAlertControllerCls = findClassIfExists(\"miuix.appcompat.app.AlertController\");\n        }\n        mDialogParentPanelCls = findClassIfExists(\"miuix.internal.widget.DialogParentPanel\");\n\n        List<Method> mAllMethodList = new LinkedList<>();\n\n        if (mPrefsMap.getBoolean(\"various_dialog_window_blur\")) {\n            hookAllConstructors(mAlertControllerCls, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    Window mWindow = (Window) XposedHelpers.getObjectField(param.thisObject, \"mWindow\");\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                        mWindow.getAttributes().setBlurBehindRadius(mPrefsMap.getInt(\"various_dialog_window_blur_radius\", 60)); // android.R.styleable.Window_windowBlurBehindRadius\n                    }\n                    mWindow.addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);\n                }\n            });\n        }\n\n        boolean oldMethodFound = false;\n        if (mAlertControllerCls != null) {\n\n            for (Method method : mAlertControllerCls.getDeclaredMethods()) {\n                if (\"setupDialogPanel\".equals(method.getName())) {\n                    oldMethodFound = true;\n                    XposedLogUtils.logI(TAG, method.getName());\n                }\n                mAllMethodList.add(method);\n            }\n\n            mDialogGravity = XposedInit.mPrefsMap.getStringAsInt(\"various_dialog_gravity\", 0);\n            mDialogHorizontalMargin = XposedInit.mPrefsMap.getInt(\"various_dialog_margin_horizontal\", 0);\n            mDialogBottomMargin = XposedInit.mPrefsMap.getInt(\"various_dialog_margin_bottom\", 0);\n\n        }\n\n        if (oldMethodFound) {\n            XposedLogUtils.logI(TAG, \"oldMethod found.\");\n\n            findAndHookMethod(mAlertControllerCls, \"setupDialogPanel\", Configuration.class, new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    mParentPanel = (View) XposedHelpers.getObjectField(param.thisObject, \"mParentPanel\");\n                    mContext = mParentPanel.getContext();\n                    FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mParentPanel.getLayoutParams();\n                    if (mDialogGravity != 0) {\n                        layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;\n                        layoutParams.gravity = mDialogGravity == 1 ? Gravity.CENTER : Gravity.BOTTOM | Gravity.CENTER;\n                        layoutParams.setMarginStart(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                        layoutParams.setMarginEnd(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                        layoutParams.bottomMargin = mDialogGravity == 1 ? 0 : DisplayUtils.dip2px(mContext, mDialogBottomMargin);\n                    }\n                    mParentPanel.setLayoutParams(layoutParams);\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                        new BlurUtils(mParentPanel, \"various_dialog_bg_blur\");\n                    }\n                }\n            });\n\n        } else {\n            XposedLogUtils.logI(TAG, \"oldMethod not found.\");\n            hookAllMethods(mAlertControllerCls, \"updateDialogPanel\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    mParentPanel = (View) XposedHelpers.getObjectField(param.thisObject, \"mParentPanel\");\n                    mContext = mParentPanel.getContext();\n                    FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mParentPanel.getLayoutParams();\n                    if (mDialogGravity != 0) {\n                        layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;\n                        layoutParams.gravity = mDialogGravity == 1 ? Gravity.CENTER : Gravity.BOTTOM | Gravity.CENTER;\n                        layoutParams.setMarginStart(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                        layoutParams.setMarginEnd(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                        layoutParams.bottomMargin = mDialogGravity == 1 ? 0 : DisplayUtils.dip2px(mContext, mDialogBottomMargin);\n                    }\n                    mParentPanel.setLayoutParams(layoutParams);\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                        new BlurUtils(mParentPanel, \"various_dialog_bg_blur\");\n                    }\n                }\n            });\n        }\n\n        try {\n            hookAllMethods(mAlertControllerCls, \"updateParentPanelMarginByWindowInsets\", new MethodHook() {\n                @Override\n                protected void after(MethodHookParam param) {\n                    mParentPanel = (View) XposedHelpers.getObjectField(param.thisObject, \"mParentPanel\");\n\n                    mContext = mParentPanel.getContext();\n                    FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mParentPanel.getLayoutParams();\n                    if (mDialogGravity != 0) {\n                        layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;\n\n                        layoutParams.gravity = mDialogGravity == 1 ? Gravity.CENTER : Gravity.BOTTOM | Gravity.CENTER;\n\n                        layoutParams.setMarginStart(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                        layoutParams.setMarginEnd(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                        layoutParams.bottomMargin = mDialogGravity == 1 ? 0 : DisplayUtils.dip2px(mContext, mDialogBottomMargin);\n                    }\n                    mParentPanel.setLayoutParams(layoutParams);\n\n                }\n            });\n        } catch (Exception e) {\n           XposedLogUtils.logE(TAG, e);\n        }\n\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/DialogGravity.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.various;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogI;\n\nimport android.content.Context;\nimport android.content.res.Configuration;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.FrameLayout;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Method;\nimport java.util.Arrays;\nimport java.util.LinkedList;\nimport java.util.List;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class DialogGravity extends BaseHook {\n\n    public static Context mContext;\n    public static View mParentPanel = null;\n\n    Class<?> mDialogCls = XposedHelpers.findClassIfExists(\"miuix.appcompat.app.AlertController\", lpparam.classLoader);\n    Class<?> mDialogParentPanelCls = XposedHelpers.findClassIfExists(\"miuix.internal.widget.DialogParentPanel\", lpparam.classLoader);\n\n    List<Method> methodList = new LinkedList<>();\n\n    @Override\n    public void init() {\n\n        if (mDialogCls != null) {\n            boolean oldMethodFound = false;\n            for (Method method : mDialogCls.getDeclaredMethods()) {\n                if (\"setupDialogPanel\".equals(method.getName())) oldMethodFound = true;\n                methodList.add(method);\n                LogI(TAG, method.getName());\n            }\n\n            int mDialogGravity = XposedInit.mPrefsMap.getStringAsInt(\"various_dialog_gravity\", 0);\n\n            int mDialogHorizontalMargin = XposedInit.mPrefsMap.getInt(\"various_dialog_horizontal_margin\", 0);\n            int mDialogBottomMargin = XposedInit.mPrefsMap.getInt(\"various_dialog_bottom_margin\", 0);\n\n            if (oldMethodFound) {\n\n                findAndHookMethod(mDialogCls, \"setupDialogPanel\", Configuration.class, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) throws Throwable {\n                        mParentPanel = (View) XposedHelpers.getObjectField(param.thisObject, \"mParentPanel\");\n\n                        mContext = mParentPanel.getContext();\n\n                        FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mParentPanel.getLayoutParams();\n\n                        if (mDialogGravity != 0) {\n\n                            layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;\n\n                            layoutParams.gravity = mDialogGravity == 1 ? Gravity.CENTER : Gravity.BOTTOM | Gravity.CENTER;\n\n                            layoutParams.setMarginStart(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                            layoutParams.setMarginEnd(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                            layoutParams.bottomMargin = mDialogGravity == 1 ? 0 : DisplayUtils.dip2px(mContext, mDialogBottomMargin);\n                        }\n\n                        mParentPanel.setLayoutParams(layoutParams);\n\n                        /*new BlurUtils(mParentPanel);*/\n                        new BlurUtils(mParentPanel, \"default\");\n\n                    }\n                });\n\n            }\n\n            for (Method method : methodList) {\n                if (Arrays.equals(method.getParameterTypes(), new Class[]{Configuration.class}) && method.getReturnType() == Void.TYPE && method.getModifiers() == 2 && method.getParameterCount() == 1) {\n                    XposedLogUtils.logI(TAG, \"2222\" + method.getName());\n                    XposedHelpers.findAndHookMethod(mDialogCls, method.getName(), new MethodHook() {\n                        @Override\n                        protected void after(MethodHookParam param) throws Throwable {\n                            Field field = XposedHelpers.findFirstFieldByExactType(mDialogCls, mDialogParentPanelCls);\n                            mParentPanel = (View) field.get(param.thisObject);\n\n                            mContext = mParentPanel.getContext();\n\n                            FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) mParentPanel.getLayoutParams();\n\n                            if (mDialogGravity != 0) {\n                                layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;\n\n                                layoutParams.gravity = mDialogGravity == 1 ? Gravity.CENTER : Gravity.BOTTOM | Gravity.CENTER;\n\n                                layoutParams.setMarginStart(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                                layoutParams.setMarginEnd(mDialogHorizontalMargin == 0 ? 0 : DisplayUtils.dip2px(mContext, mDialogHorizontalMargin));\n                                layoutParams.bottomMargin = mDialogGravity == 1 ? 0 : DisplayUtils.dip2px(mContext, mDialogBottomMargin);\n                            }\n\n                            mParentPanel.setLayoutParams(layoutParams);\n\n                            /*new BlurUtils(mParentPanel);*/\n                            new BlurUtils(mParentPanel, \"default\");\n                        }\n                    });\n                }\n            }\n        }\n\n        hookAllMethods(mDialogCls, \"dismiss\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                super.after(param);\n                View mParentPanel = (View) XposedHelpers.getObjectField(param.thisObject, \"mParentPanel\");\n                mParentPanel.setVisibility(View.INVISIBLE);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/MiuiAppNoOverScroll.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.various;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class MiuiAppNoOverScroll extends BaseHook {\n\n\n    @Override\n    public void init() {\n\n        Class<?> mSpringBackCls = findClassIfExists(\"miuix.springback.view.SpringBackLayout\");\n        Class<?> mRemixRvCls = findClassIfExists(\"androidx.recyclerview.widget.RemixRecyclerView\");\n\n        try {\n            MethodHook hookParam = new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    XposedHelpers.setBooleanField(param.thisObject, \"mSpringBackEnable\", false);\n                    param.args[0] = false;\n                }\n            };\n\n            if (mSpringBackCls != null) {\n\n                hookAllConstructors(mSpringBackCls, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        XposedHelpers.setBooleanField(param.thisObject, \"mSpringBackEnable\", false);\n                    }\n                });\n\n                findAndHookMethodSilently(mSpringBackCls, \"setSpringBackEnable\", boolean.class, hookParam);\n            }\n\n\n            if (mRemixRvCls != null) {\n                hookAllConstructors(mRemixRvCls, new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        ((View) param.thisObject).setOverScrollMode(View.OVER_SCROLL_NEVER);\n                        XposedHelpers.setBooleanField(param.thisObject, \"mSpringBackEnable\", false);\n                    }\n                });\n                findAndHookMethodSilently(mRemixRvCls, \"setSpringEnabled\", boolean.class, hookParam);\n            }\n        } catch (Exception e) {\n            XposedLogUtils.logE(TAG,\"TAG\" + lpparam.packageName, e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/NoAccessDeviceLogsRequest.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.various\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedHelpers\n\n\nobject NoAccessDeviceLogsRequest : BaseHook() {\n    private lateinit var mActivityManagerInternal: Any\n    private lateinit var mLogcatManagerService: Any\n    override fun init() {\n        val logAccessClient = loadClass(\n            \"com.android.server.logcat.LogcatManagerService\\$LogAccessClient\",\n            lpparam.classLoader\n        )\n\n        XposedHelpers.findAndHookMethod(\n            \"com.android.server.logcat.LogcatManagerService\", lpparam.classLoader,\n            \"onStart\",\n            object : XC_MethodHook() {\n                override fun afterHookedMethod(param: MethodHookParam) {\n                    try {\n                        mLogcatManagerService = param.thisObject\n                        mActivityManagerInternal = XposedHelpers.getObjectField(\n                            mLogcatManagerService, \"mActivityManagerInternal\"\n                        )\n                    } catch (t: Throwable) {\n                        XposedLogUtils.logE(TAG, \"NoAccessDeviceLogsRequest -> onStart\", t)\n                    }\n                }\n            }\n        )\n\n        XposedHelpers.findAndHookMethod(\n            \"com.android.server.logcat.LogcatManagerService\", lpparam.classLoader,\n            \"processNewLogAccessRequest\",\n            logAccessClient,\n            object : XC_MethodHook() {\n                override fun beforeHookedMethod(param: MethodHookParam) {\n                    try {\n                        val client = param.args[0]\n                        if (client == null || mActivityManagerInternal == null) return\n                        val uid = XposedHelpers.getIntField(client, \"mUid\")\n                        val packageName =\n                            XposedHelpers.getObjectField(client, \"mPackageName\") as String\n                        XposedHelpers.callMethod(\n                            mLogcatManagerService,\n                            \"onAccessApprovedForClient\",\n                            client\n                        )\n                        // debug 用，取消禁用详细日志输出可进行调试\n                        XposedLogUtils.logI(\"NoAccessDeviceLogsRequest bypass for package=$packageName uid=$uid\")\n                        param.result = null\n                    } catch (t: Throwable) {\n                        // 输出异常日志\n                        XposedLogUtils.logE(\"NoAccessDeviceLogsRequest -> processNewLogAccessRequest\", t)\n                    }\n                }\n            })\n        // 米客原来的取消方法，未知情况封堵失败\n        /*try {\n            loadClass(\"com.android.server.logcat.LogcatManagerService\").methodFinder().filter {\n                name == \"onLogAccessRequested\"\n            }.toList().createHooks {\n                before { param ->\n                    XposedHelpers.callMethod(param.thisObject, \"declineRequest\", param.args[0])\n                    param.result = null\n                }\n            }\n        } catch (t: Throwable) {\n            XposedLogUtils.logE(TAG, t)\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/NotificationBlur.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.various;\n\nimport android.graphics.drawable.Drawable;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.BlurUtils;\n\nimport java.lang.reflect.Field;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class NotificationBlur extends BaseHook {\n\n    Class<?> mCls = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.notification.row.NotificationBackgroundView\", lpparam.classLoader);\n    Class<?> mCls2 = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.notification.policy.AppMiniWindowRowTouchHelper\", lpparam.classLoader);\n    Class<?> mCls3 = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.phone.MiuiNotificationPanelViewController\", lpparam.classLoader);\n    Class<?> mCls4 = XposedHelpers.findClassIfExists(\"com.android.keyguard.magazine.LockScreenMagazineController\", lpparam.classLoader);\n    Class<?> mCls5 = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.phone.MiuiNotificationPanelViewController$mBlurRatioChangedListener$1\", lpparam.classLoader);\n    Class<?> mCls6 = XposedHelpers.findClassIfExists(\"com.android.systemui.shared.plugins.PluginInstanceManager$PluginHandler\", lpparam.classLoader);\n    Class<?> mCls7 = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.notification.row.MiuiExpandableNotificationRow\", lpparam.classLoader);\n    Class<?> mCls8 = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout\", lpparam.classLoader);\n\n    @Override\n    public void init() {\n\n        hookAllMethods(mCls, \"setCustomBackground\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                super.after(param);\n                Field field = mCls.getDeclaredField(\"mDrawableAlpha\");\n                field.setAccessible(true);\n                field.set(param.thisObject, 200);\n                XposedHelpers.callMethod(param.thisObject, \"setDrawableAlpha\", 200);\n            }\n        });\n\n        hookAllMethods(mCls, \"draw\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                super.after(param);\n                Drawable background = ((View) param.thisObject).getBackground();\n\n                if (background != null && background.getClass().getName().equals(\"BackgroundBlurDrawable\")) {\n                    background.setBounds(((Drawable) param.args[1]).getBounds());\n                }\n            }\n        });\n\n        hookAllMethods(mCls2, \"onMiniWindowTrackingStart\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                super.before(param);\n\n                Field field = param.thisObject.getClass().getDeclaredField(\"mPickedMiniWindowChild\");\n                field.setAccessible(true);\n                field.get(param.thisObject);\n\n                Field field2 = param.thisObject.getClass().getDeclaredField(\"mBackgroundNormal\");\n                field2.setAccessible(true);\n                field2.get(field);\n\n\n                if (field != null && field2 != null) {\n                    View view = (View) (Object) field2;\n                    if (view.getBackground().getClass().getName().equals(\"BackgroundBlurDrawable\")) {\n                        Drawable background = view.getBackground();\n                        XposedHelpers.callMethod(background, \"setVisible\", false, false);\n                        XposedHelpers.callMethod(field2, \"setDrawableAlpha\", 200 + 30);\n                    }\n                }\n\n            }\n        });\n\n        hookAllMethods(mCls3, \"onStateChanged\", new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                super.after(param);\n\n                int childCount;\n                int i = 0;\n                Object obj = param.args[0];\n                int intValue = (Integer) obj;\n                Object obj2 = param.thisObject;\n\n                Object d;\n                Field field = param.thisObject.getClass().getDeclaredField(\"mNotificationStackScroller\");\n                field.setAccessible(true);\n                field.get(obj2);\n                d = field;\n\n\n                ViewGroup viewGroup = (ViewGroup) d;\n                if (intValue != 1) {\n                    int childCount2 = viewGroup.getChildCount();\n                    if (childCount2 >= 0) {\n                        int i2 = 0;\n                        while (true) {\n                            i2++;\n                            View childAt = viewGroup.getChildAt(i2);\n                            if (childAt != null) {\n                                try {\n                                    Object callMethod = XposedHelpers.callMethod(childAt, \"isHeadsUpState\");\n                                    if (callMethod != null) {\n                                        boolean booleanValue = (Boolean) callMethod;\n                                        Object callMethod2 = XposedHelpers.callMethod(childAt, \"isPinned\");\n                                        if (callMethod2 != null) {\n                                            boolean booleanValue2 = (Boolean) callMethod2;\n                                            if (!booleanValue || !booleanValue2) {\n                                                /*new BlurUtils(childAt);*/\n                                                new BlurUtils(childAt, \"default\");\n                                            }\n                                        } else {\n                                            throw new NullPointerException(\"null cannot be cast to non-null type kotlin.Boolean\");\n                                        }\n                                    } else {\n                                        throw new NullPointerException(\"null cannot be cast to non-null type kotlin.Boolean\");\n                                    }\n                                } catch (Throwable ignored) {\n                                }\n                            }\n                            if (i2 == childCount2) {\n                                return;\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n\n        hookAllMethods(mCls4, \"setViewsAlpha\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                super.before(param);\n\n                boolean b;\n                Class<?> aClass = XposedHelpers.findClassIfExists(\"com.android.keyguard.utils.MiuiKeyguardUtils\", lpparam.classLoader);\n                if (aClass == null) {\n                    b = true;\n                }\n                Object callStaticMethod = XposedHelpers.callStaticMethod(aClass, \"isDefaultLockScreenTheme\");\n\n                b = (Boolean) callStaticMethod;\n\n                if (b) {\n\n                    int i = 0;\n\n                    float floatValue = (Float) param.args[0] * 255;\n\n                    Object d;\n                    Field field = param.thisObject.getClass().getDeclaredField(\"mNotificationStackScrollLayout\");\n                    field.setAccessible(true);\n                    field.get(param.thisObject);\n                    d = field;\n\n                    ViewGroup viewGroup = (ViewGroup) d;\n                    int childCount = viewGroup.getChildCount();\n                    if (childCount >= 0) {\n                        while (true) {\n                            i++;\n                            View childAt = viewGroup.getChildAt(i);\n                            if (childAt != null) {\n                                if (floatValue >= 0 && floatValue <= 255) {\n                                    if (childAt.getClass().getName().equals(\"ZenModeView\")) {\n                                        Object callMethod = XposedHelpers.callMethod(childAt, \"getContentView\");\n                                        if (callMethod != null) {\n                                            ViewGroup viewGroup2 = (ViewGroup) callMethod;\n                                            Drawable background = viewGroup.getBackground();\n                                            if (background != null && background.getClass().getName().equals(\"BackgroundBlurDrawable\")) {\n                                                XposedHelpers.callMethod(viewGroup.getBackground(), \"setAlpha\", i);\n                                                return;\n                                            }\n                                            return;\n                                        }\n                                        return;\n                                    }\n                                }\n                            }\n                            if (i == childCount) {\n                                return;\n                            }\n                        }\n                    }\n\n\n                }\n            }\n        });\n\n\n\n\n        /*Helpers.hookAllMethods(mCls,\"setHighSamplingFrequency\",new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View view = (View) param.thisObject;\n                new BlurUtils(view);\n            }\n        });\n\n        Helpers.hookAllMethods(mCls2,\"setCustomBackground\",new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                super.after(param);\n                XposedHelpers.callMethod(param.thisObject, \"setDrawableAlpha\", new Object[]{160});\n            }\n        });\n\n        Helpers.hookAllMethods(mCls2,\"draw\",new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                super.after(param);\n\n                Object obj = param.thisObject;\n                Drawable background = ((View) obj).getBackground();\n                if (background != null) {\n                    Object obj2 = param.args[1];\n                    background.setBounds(((Drawable) obj2).getBounds());\n                }\n            }\n        });\n\n\n\n        Helpers.hookAllMethods(mCls3,\"startEnterAndLaunchMiniWindow\",new MethodHook() {\n\n            @Override\n            protected void before(MethodHookParam param) throws Throwable {\n                super.before(param);\n\n                Field declaredField = mCls3.getDeclaredField(\"mPickedMiniWindowChild\");\n                declaredField.setAccessible(true);\n                Object obj = declaredField.get(param.thisObject);\n                if (obj != null) {\n                    Object callMethod = XposedHelpers.callMethod(obj, \"getAnimatedBackground\", new Object[0]);\n                    View view = (View) callMethod;\n                    view.setBackground(null);\n                }\n            }\n        });\n\n\n        Class<?> mCls5 = XposedHelpers.findClassIfExists(\"com.android.systemui.statusbar.notification.row.MiuiExpandableNotificationRow\", lpparam.classLoader);\n\n\n        Helpers.hookAllMethods(mCls,\"updateBackgroundBg\",new MethodHook() {\n            @Override\n            protected void after(MethodHookParam param) throws Throwable {\n                View view = (View) XposedHelpers.getObjectField(param.thisObject,\"mBackgroundNormal\");\n                new BlurUtils(view);\n            }\n        });*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/UnlockIme.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.various\n\nimport android.view.inputmethod.InputMethodManager\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClassOrNull\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.Log\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.PropertyUtils\nimport com.sevtinge.cemiuiler.utils.api.sameAs\nimport com.sevtinge.cemiuiler.utils.callStaticMethod\nimport com.sevtinge.cemiuiler.utils.getObjectFieldAs\nimport com.sevtinge.cemiuiler.utils.getStaticObjectField\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogE\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogI\nimport com.sevtinge.cemiuiler.utils.setStaticObjectField\nimport de.robv.android.xposed.callbacks.XC_LoadPackage\n\nobject UnlockIme : BaseHook() {\n    private val miuiImeList: List<String> = listOf(\n        \"com.iflytek.inputmethod.miui\",\n        \"com.sohu.inputmethod.sogou.xiaomi\",\n        \"com.baidu.input_mi\",\n        \"com.miui.catcherpatch\"\n    )\n\n    private var navBarColor: Int? = null\n\n    override fun init() {\n        // 检查是否支持全面屏优化\n        if (PropertyUtils[\"ro.miui.support_miui_ime_bottom\", \"0\"] != \"1\") return\n        EzXHelper.initHandleLoadPackage(lpparam)\n        EzXHelper.setLogTag(TAG)\n        LogI(TAG, \"MiuiIme is supported\")\n        startHook(lpparam)\n    }\n\n    private fun startHook(lpparam: XC_LoadPackage.LoadPackageParam) {\n        // 检查是否为小米定制输入法\n        val isNonCustomize = !miuiImeList.contains(lpparam.packageName)\n        if (isNonCustomize) {\n            val sInputMethodServiceInjector =\n                loadClassOrNull(\"android.inputmethodservice.InputMethodServiceInjector\")\n                    ?: loadClassOrNull(\"android.inputmethodservice.InputMethodServiceStubImpl\")\n\n            sInputMethodServiceInjector?.also {\n                hookSIsImeSupport(it)\n                hookIsXiaoAiEnable(it)\n                setPhraseBgColor(it)\n            } ?: LogE(TAG, \"Failed:Class not found: InputMethodServiceInjector\", null)\n        }\n\n        hookDeleteNotSupportIme(\n            \"android.inputmethodservice.InputMethodServiceInjector\\$MiuiSwitchInputMethodListener\",\n            lpparam.classLoader\n        )\n\n        // 获取常用语的ClassLoader\n        loadClass(\"android.inputmethodservice.InputMethodModuleManager\").methodFinder().filter {\n            name == \"loadDex\" && parameterTypes.sameAs(ClassLoader::class.java, String::class.java)\n        }.toList().createHooks {\n            after { param ->\n                hookDeleteNotSupportIme(\n                    \"com.miui.inputmethod.InputMethodBottomManager\\$MiuiSwitchInputMethodListener\",\n                    param.args[0] as ClassLoader\n                )\n                loadClassOrNull(\n                    \"com.miui.inputmethod.InputMethodBottomManager\",\n                    param.args[0] as ClassLoader\n                )?.also {\n                    if (isNonCustomize) {\n                        hookSIsImeSupport(it)\n                        hookIsXiaoAiEnable(it)\n                    }\n\n                    // 针对A11的修复切换输入法列表\n                    it.getMethod(\"getSupportIme\").createHook {\n                        replace { _ ->\n                            it.getStaticObjectField(\"sBottomViewHelper\")\n                                ?.getObjectFieldAs<InputMethodManager>(\"mImm\")?.enabledInputMethodList\n                        }\n                    }\n                } ?: Log.e(\"Failed:Class not found: com.miui.inputmethod.InputMethodBottomManager\")\n            }\n        }\n\n        LogI(TAG, \"Hook MIUI IME Done!\")\n    }\n\n    /**\n     * 跳过包名检查，直接开启输入法优化\n     *\n     * @param clazz 声明或继承字段的类\n     */\n    private fun hookSIsImeSupport(clazz: Class<*>) {\n        runCatching {\n            clazz.setStaticObjectField(\"sIsImeSupport\", 1)\n            LogI(TAG, \"Success:Hook field sIsImeSupport\")\n        }.onFailure {\n            LogD(TAG, \"Failed:Hook field sIsImeSupport \", it)\n        }\n    }\n\n    /**\n     * 小爱语音输入按钮失效修复\n     *\n     * @param clazz 声明或继承方法的类\n     */\n    private fun hookIsXiaoAiEnable(clazz: Class<*>) {\n        runCatching {\n            clazz.getMethod(\"isXiaoAiEnable\").createHook {\n                returnConstant(false)\n            }\n        }.onFailure {\n            LogD(TAG, \"Failed:Hook method isXiaoAiEnable\", it)\n        }\n    }\n\n    /**\n     * 在适当的时机修改抬高区域背景颜色\n     *\n     * @param clazz 声明或继承字段的类\n     */\n    private fun setPhraseBgColor(clazz: Class<*>) {\n        runCatching {\n            // 导航栏颜色被设置后, 将颜色存储起来并传递给常用语\n            loadClass(\"com.android.internal.policy.PhoneWindow\").methodFinder().first {\n                name == \"setNavigationBarColor\" && parameterTypes.sameAs(Int::class.java)\n            }.createHook {\n                after { param ->\n                    if(param.args[0] == 0) return@after\n                    navBarColor = param.args[0] as Int\n                    customizeBottomViewColor(clazz)\n                }\n            }\n\n            // 当常用语被创建后, 将背景颜色设置为存储的导航栏颜色\n            clazz.methodFinder().first { name == \"addMiuiBottomView\" }.createHook {\n                after {\n                    customizeBottomViewColor(clazz)\n                }\n            }\n        }.onFailure {\n            LogD(TAG, \"Failed to set the color of the MiuiBottomView\", it)\n        }\n    }\n\n    /**\n     * 将导航栏颜色赋值给输入法优化的底图\n     *\n     * @param clazz 声明或继承字段的类\n     */\n    private fun customizeBottomViewColor(clazz: Class<*>) {\n        navBarColor?.let {\n            val color = -0x1 - it\n            clazz.callStaticMethod(\n                \"customizeBottomViewColor\",\n                true, navBarColor, color or -0x1000000, color or 0x66000000\n            )\n        }\n    }\n\n    /**\n     * 针对A10的修复切换输入法列表\n     *\n     * @param className 声明或继承方法的类的名称\n     */\n    private fun hookDeleteNotSupportIme(className: String, classLoader: ClassLoader) {\n        runCatching {\n            loadClass(className, classLoader).methodFinder().first { name == \"deleteNotSupportIme\" }\n                .createHook { returnConstant(null) }\n        }.onFailure {\n            LogD(TAG, \"Failed:Hook method deleteNotSupportIme\", it)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/various/UnlockSuperClipboard.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.various\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.github.kyuubiran.ezxhelper.EzXHelper.safeClassLoader\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook\nimport com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHooks\nimport com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\n\nobject UnlockSuperClipboard : BaseHook() {\n    // by StarVoyager\n    override fun init() {\n        when (EzXHelper.hostPackageName) {\n            \"com.miui.gallery\" -> {\n                if (mPrefsMap.getBoolean(\"various_super_clipboard_gallery\")) {\n                    methodSuperClipboard(\"com.miui.gallery.util.MiscUtil\")\n                }\n            }\n\n            \"com.android.fileexplorer\" -> {\n                if (mPrefsMap.getBoolean(\"various_super_clipboard_fileexplorer\")) {\n                    methodSuperClipboard(\"com.android.fileexplorer.model.Util\")\n                }\n            }\n\n            \"com.miui.screenshot\" -> {\n                if (mPrefsMap.getBoolean(\"various_super_clipboard_screenshot\")) {\n                    dexKitSuperClipboard()\n                }\n            }\n\n            \"com.android.browser\" -> {\n                if (mPrefsMap.getBoolean(\"various_super_clipboard_browser\")) {\n                    dexKitSuperClipboard()\n                }\n            }\n\n            \"com.android.mms\" -> {\n                if (mPrefsMap.getBoolean(\"various_super_clipboard_mms\")) {\n                    dexKitSuperClipboard()\n                }\n            }\n\n            \"com.miui.notes\" -> {\n                if (mPrefsMap.getBoolean(\"various_super_clipboard_notes\")) {\n                    methodSuperClipboard(\"com.miui.common.tool.Utils\")\n                }\n            }\n\n            \"com.miui.creation\" -> {\n                if (mPrefsMap.getBoolean(\"various_super_clipboard_creation\")) {\n                    methodSuperClipboard(\"com.miui.creation.common.tools.ClipUtils\")\n                }\n            }\n        }\n    }\n\n    private fun methodSuperClipboard(clsName: String) {\n        loadClass(clsName).methodFinder()\n            .filterByName(\"isSupportSuperClipboard\")\n            .first().createHook {\n                returnConstant(true)\n            }\n    }\n\n    private fun dexKitSuperClipboard() {\n        val ro by lazy {\n            dexKitBridge.findMethod {\n                matcher {\n                    addUsingStringsEquals(\"ro.miui.support_super_clipboard\")\n                    returnType = \"boolean\"\n                }\n            }.firstOrNull()?.getMethodInstance(safeClassLoader)\n        }\n\n        val sys by lazy {\n            dexKitBridge.findMethod {\n                matcher {\n                    addUsingStringsEquals(\"persist.sys.support_super_clipboard\")\n                    returnType = \"boolean\"\n                }\n            }.firstOrNull()?.getMethodInstance(safeClassLoader)\n        }\n\n        setOf(ro, sys).filterNotNull().createHooks {\n            returnConstant(true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/voiceassist/UseThirdPartyBrowser.kt",
    "content": "package com.sevtinge.cemiuiler.module.hook.voiceassist\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport com.sevtinge.cemiuiler.utils.DexKit.addUsingStringsEquals\nimport com.sevtinge.cemiuiler.utils.DexKit.dexKitBridge\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XposedBridge\nimport java.lang.reflect.Method\n\nobject UseThirdPartyBrowser : BaseHook() {\n    private var browserActivityWithIntent: Method? = null\n    override fun init() {\n        dexKitBridge.findMethod {\n            matcher {\n                addUsingStringsEquals(\n                    \"IntentUtils\", \"permission click No Application can handle your intent\"\n                )\n            }\n        }.forEach {\n            browserActivityWithIntent = it.getMethodInstance(lpparam.classLoader)\n        }\n\n        // XposedBridge.log(\"Hook到小爱同学进程！\");\n        /*try {\n            val result: List<DexMethodDescriptor> =\n                java.util.Objects.requireNonNull<List<DexMethodDescriptor>>(\n                    VoiceAssistDexKit.mVoiceAssistResultMethodsMap[\"BrowserActivityWithIntent\"]\n                )\n            for (descriptor in result) {\n                browserActivityWithIntent = descriptor.getMethodInstance(lpparam.classLoader)\n            }\n        } catch (e: Throwable) {\n            e.printStackTrace()\n        }*/\n        XposedLogUtils.logI(\"com.miui.voiceassist browserActivityWithIntent method is $browserActivityWithIntent\")\n        // Class<?> clazz = XposedHelpers.findClass(\"e.D.L.pa.Wa\", lpparam.classLoader);\n        XposedBridge.hookMethod(browserActivityWithIntent, object : XC_MethodHook() {\n            @Throws(Throwable::class)\n            override fun beforeHookedMethod(param: MethodHookParam) {\n                super.beforeHookedMethod(param)\n                // XposedBridge.log(\"0)Hook到Activity启动，开始判断\");\n                val intent = param.args[0] as android.content.Intent\n                XposedLogUtils.logI(intent.toString())\n                try {\n                    if (intent.getPackage() == \"com.android.browser\") {\n                        XposedLogUtils.logI(\"com.miui.voiceassist get URL \" + intent.dataString)\n                        val uri = android.net.Uri.parse(intent.dataString)\n                        val newIntent = android.content.Intent()\n                        newIntent.setAction(\"android.intent.action.VIEW\")\n                        newIntent.setData(uri)\n                        param.args[0] = newIntent\n                    }\n                } catch (e: Exception) {\n                   XposedLogUtils.logE(TAG, e)\n                }\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/module/hook/weather/SetDeviceLevel.java",
    "content": "package com.sevtinge.cemiuiler.module.hook.weather;\n\nimport static com.sevtinge.cemiuiler.utils.Helpers.getPackageVersionCode;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XC_MethodReplacement;\n\npublic class SetDeviceLevel extends BaseHook {\n    Class<?> mUtil;\n\n    @Override\n    public void init() {\n        if (getPackageVersionCode(lpparam) < 15000000) mUtil = findClassIfExists(\"miuix.animation.utils.DeviceUtils\") ; else mUtil = findClassIfExists(\"d7.a\");\n        returnIntConstant(mUtil);\n    }\n\n    public static Bundle checkBundle(Context context, Bundle bundle) {\n        if (context == null) {\n            XposedLogUtils.logI(\"SetWeatherDeviceLevel\", \"Context is null!\");\n            return null;\n        }\n        if (bundle == null) bundle = new Bundle();\n        int order = Integer.parseInt(PrefsUtils.getSharedStringPrefs(context, \"weather_device_level\", \"0\"));\n        bundle.putInt(\"current_sory_type\", order - 1);\n        bundle.putInt(\"current_sort_type\", order - 1);\n        return bundle;\n    }\n\n    private void returnIntConstant(Class<?> cls) {\n        int order = mPrefsMap.getStringAsInt(\"weather_device_level\", 0);\n        if (getPackageVersionCode(lpparam) < 15000000) hookAllMethods(cls, \"transDeviceLevel\", XC_MethodReplacement.returnConstant(order)); else findAndHookMethod(cls, \"j\", XC_MethodReplacement.returnConstant(order));\n    }\n}\n\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/prefs/PreferenceHeader.java",
    "content": "package com.sevtinge.cemiuiler.prefs;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.sevtinge.cemiuiler.R;\n\nimport moralnorm.preference.Preference;\n\npublic class PreferenceHeader extends Preference {\n\n    public PreferenceHeader(@NonNull Context context) {\n        super(context);\n        init();\n    }\n\n    public PreferenceHeader(@NonNull Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n        init();\n    }\n\n    private void init() {\n        setLayoutResource(R.layout.preference_header);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/provider/SharedPrefsProvider.java",
    "content": "package com.sevtinge.cemiuiler.provider;\n\nimport android.content.ContentProvider;\nimport android.content.ContentValues;\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.content.UriMatcher;\nimport android.content.res.AssetFileDescriptor;\nimport android.database.Cursor;\nimport android.database.MatrixCursor;\nimport android.net.Uri;\nimport android.os.ParcelFileDescriptor;\nimport android.util.Log;\n\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.util.LinkedHashSet;\nimport java.util.List;\nimport java.util.Set;\n\npublic class SharedPrefsProvider extends ContentProvider {\n\n    public static final String AUTHORITY = \"com.sevtinge.cemiuiler.provider.sharedprefs\";\n    private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);\n\n    SharedPreferences prefs;\n\n    static {\n        uriMatcher.addURI(AUTHORITY, \"string/*/\", 0);\n        uriMatcher.addURI(AUTHORITY, \"string/*/*\", 1);\n        uriMatcher.addURI(AUTHORITY, \"integer/*/*\", 2);\n        uriMatcher.addURI(AUTHORITY, \"boolean/*/*\", 3);\n        uriMatcher.addURI(AUTHORITY, \"stringset/*\", 4);\n        uriMatcher.addURI(AUTHORITY, \"test/*\", 5);\n        uriMatcher.addURI(AUTHORITY, \"shortcut_icon/*\", 6);\n    }\n\n    @Override\n    public boolean onCreate() {\n        try {\n            prefs = PrefsUtils.getSharedPrefs(getContext(), true);\n            return true;\n        } catch (Throwable throwable) {\n            return false;\n        }\n    }\n\n    @Override\n    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {\n        List<String> parts = uri.getPathSegments();\n        // Log.e(\"parts\", String.valueOf(parts));\n        MatrixCursor cursor = new MatrixCursor(new String[]{\"data\"});\n\n        switch (uriMatcher.match(uri)) {\n            case 0 -> {\n                cursor.newRow().add(\"data\", prefs.getString(parts.get(1), \"\"));\n                return cursor;\n            }\n            case 1 -> {\n                cursor.newRow().add(\"data\", prefs.getString(parts.get(1), parts.get(2)));\n                return cursor;\n            }\n            case 2 -> {\n                cursor.newRow().add(\"data\", prefs.getInt(parts.get(1), Integer.parseInt(parts.get(2))));\n                return cursor;\n            }\n            case 3 -> {\n                cursor.newRow().add(\"data\", prefs.getBoolean(parts.get(1), Integer.parseInt(parts.get(2)) == 1) ? 1 : 0);\n                return cursor;\n            }\n            case 4 -> {\n                Set<String> strings = prefs.getStringSet(parts.get(1), new LinkedHashSet<>());\n                for (String str : strings) cursor.newRow().add(\"data\", str);\n                return cursor;\n            }\n        }\n        return null;\n    }\n\n    @Override\n    public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {\n        if (getContext() == null) return null;\n\n        List<String> parts = uri.getPathSegments();\n        if (uriMatcher.match(uri) == 5) {\n            String filename = null;\n            if (\"0\".equals(parts.get(1))) filename = \"test0.png\";\n            else if (\"1\".equals(parts.get(1))) filename = \"test1.mp3\";\n            else if (\"2\".equals(parts.get(1))) filename = \"test2.mp4\";\n            else if (\"3\".equals(parts.get(1)) || \"5\".equals(parts.get(1))) filename = \"test3.txt\";\n            else if (\"4\".equals(parts.get(1))) filename = \"test4.zip\";\n\n            AssetFileDescriptor afd = null;\n            if (filename != null) try {\n                afd = getContext().getAssets().openFd(filename);\n            } catch (Throwable t) {\n                Log.i(\"afd\", String.valueOf(t));\n            }\n            return afd;\n        } else if (uriMatcher.match(uri) == 6) {\n            Context context = Helpers.getProtectedContext(getContext());\n            File file = new File(context.getFilesDir() + \"/shortcuts/\" + parts.get(1) + \"_shortcut.png\");\n            if (!file.exists()) return null;\n            return new AssetFileDescriptor(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY), 0, AssetFileDescriptor.UNKNOWN_LENGTH);\n        }\n\n        return null;\n    }\n\n    @Override\n    public String getType(Uri uri) {\n        return null;\n    }\n\n    @Override\n    public Uri insert(Uri uri, ContentValues values) {\n        return null;\n    }\n\n    @Override\n    public int delete(Uri uri, String selection, String[] selectionArgs) {\n        return 0;\n    }\n\n    @Override\n    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {\n        return 0;\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/CustomHookActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.widget.Button;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.customhook.CustomHookConfigActivity;\n\nimport moralnorm.appcompat.app.AppCompatActivity;\n\npublic class CustomHookActivity extends AppCompatActivity {\n\n    Button mAddConfig;\n\n    @Override\n    public void onCreate(Bundle bundle) {\n        super.onCreate(bundle);\n        setContentView(R.layout.activity_custom_hook);\n        initView();\n    }\n\n    private void initView() {\n        mAddConfig = findViewById(R.id.add_config);\n\n        mAddConfig.setOnClickListener(v -> startActivity(new Intent(this, CustomHookConfigActivity.class)));\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/HideAppActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui;\n\nimport moralnorm.appcompat.app.AppCompatActivity;\n\npublic class HideAppActivity extends AppCompatActivity {\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/MainActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui;\n\nimport android.annotation.SuppressLint;\nimport android.app.backup.BackupManager;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.os.FileObserver;\nimport android.text.Editable;\nimport android.text.TextWatcher;\nimport android.util.Log;\nimport android.view.ActionMode;\nimport android.view.Menu;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.TextView;\n\nimport androidx.annotation.Nullable;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.data.adapter.ModSearchAdapter;\nimport com.sevtinge.cemiuiler.provider.SharedPrefsProvider;\nimport com.sevtinge.cemiuiler.ui.base.SettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.AboutFragment;\nimport com.sevtinge.cemiuiler.ui.fragment.MainFragment;\nimport com.sevtinge.cemiuiler.utils.CtaUtils;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\nimport com.sevtinge.cemiuiler.utils.SearchHelper;\nimport com.sevtinge.cemiuiler.utils.SettingLauncherHelper;\nimport com.sevtinge.cemiuiler.utils.ShellUtils;\nimport com.sevtinge.cemiuiler.view.RestartAlertDialog;\n\nimport java.util.Set;\n\nimport moralnorm.view.SearchActionMode;\n\npublic class MainActivity extends SettingsActivity {\n\n    View mFrameContent;\n    View mSearchView;\n    SearchActionMode mSearchActionMode;\n    TextView mSearchInputView;\n    RecyclerView mSearchResultView;\n    TextWatcher mSearchResultListener;\n    ModSearchAdapter mSearchAdapter;\n    String lastFilter;\n    String mPermission = \"Cemiuiler_Permission\";\n    private final MainFragment mMainFrag = new MainFragment();\n    private final int REQUEST_CODE = 2038;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        if (savedInstanceState == null) requestCta();\n        new Thread(new Runnable() {\n            public void run() {\n                SearchHelper.getAllMods(MainActivity.this, savedInstanceState != null);\n            }\n        }).start();\n        initView();\n        initData();\n        setImmersionMenuEnabled(true);\n        setFragment(mMainFrag);\n        ShellUtils.execCommand(\"chmod 0777 \" + getPackageCodePath()\n                + \" ; chmod 0777 \" + PrefsUtils.mPrefsFile\n                + \" ; chown root:root \" + PrefsUtils.mPrefsFile,\n            true, false);\n        // ShellUtils.execCommand(\"chmod 0777 \" + PrefsUtils.mPrefsFile, true, false);\n        // ShellUtils.execCommand(\"chown root:root \" + PrefsUtils.mPrefsFile, true, false);\n    }\n\n    @Override\n    protected void onNewIntent(Intent intent) {\n        super.onNewIntent(intent);\n        requestCta();\n    }\n\n    private void requestCta() {\n        if (!CtaUtils.isCtaEnabled(this)) {\n            CtaUtils.showCtaDialog(this, REQUEST_CODE);\n        }\n    }\n\n    private void initView() {\n        mFrameContent = findViewById(R.id.frame_content);\n        mSearchView = findViewById(R.id.search_view);\n        mSearchInputView = findViewById(android.R.id.input);\n        mSearchResultView = findViewById(R.id.search_result_view);\n\n        mSearchAdapter = new ModSearchAdapter();\n        mSearchInputView.setHint(getResources().getString(R.string.search));\n        mSearchResultView.setLayoutManager(new LinearLayoutManager(this));\n        mSearchResultView.setAdapter(mSearchAdapter);\n        mSearchView.setOnClickListener(v -> startSearchMode());\n\n        mSearchAdapter.setOnItemClickListener((view, ad) -> {\n            SettingLauncherHelper.onStartSettingsForArguments(this,\n                SubSettings.class,\n                ad.fragment,\n                null,\n                ad.catTitleResId);\n        });\n\n        mSearchResultListener = new TextWatcher() {\n            @Override\n            public void beforeTextChanged(CharSequence s, int start, int count, int after) {\n\n            }\n\n            @Override\n            public void onTextChanged(CharSequence s, int start, int before, int count) {\n                findMod(s.toString());\n            }\n\n            @Override\n            public void afterTextChanged(Editable s) {\n                findMod(s.toString());\n            }\n        };\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.menu_main, menu);\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        int itemId = item.getItemId();\n        if (itemId == R.id.restart) {\n            RestartAlertDialog dialog = new RestartAlertDialog(this);\n            dialog.setTitle(item.getTitle());\n            dialog.show();\n        } else if (itemId == R.id.settings) {\n            Intent intent = new Intent(this, ModuleSettingsActivity.class);\n            startActivity(intent);\n        } else if (itemId == R.id.about) {\n            SettingLauncherHelper.onStartSettings(this, SubSettings.class, AboutFragment.class, item.getTitle().toString());\n        }\n        return super.onOptionsItemSelected(item);\n    }\n\n    private void initData() {\n\n        SharedPreferences.OnSharedPreferenceChangeListener mPreferenceChangeListener = (sharedPreferences, s) -> {\n            Log.i(\"prefs\", \"Changed: \" + s);\n            requestBackup();\n            Object val = sharedPreferences.getAll().get(s);\n            String path = \"\";\n            if (val instanceof String)\n                path = \"string/\";\n            else if (val instanceof Set<?>)\n                path = \"stringset/\";\n            else if (val instanceof Integer)\n                path = \"integer/\";\n            else if (val instanceof Boolean)\n                path = \"boolean/\";\n            getContentResolver().notifyChange(Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/\" + path + s), null);\n            if (!\"\".equals(path))\n                getContentResolver().notifyChange(Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/pref/\" + path + s), null);\n        };\n\n        PrefsUtils.mSharedPreferences.registerOnSharedPreferenceChangeListener(mPreferenceChangeListener);\n        Helpers.fixPermissionsAsync(getApplicationContext());\n\n        try {\n            FileObserver mFileObserver = new FileObserver(PrefsUtils.getSharedPrefsPath(), FileObserver.CLOSE_WRITE) {\n                @Override\n                public void onEvent(int event, String path) {\n                    Helpers.fixPermissionsAsync(getApplicationContext());\n                }\n            };\n            mFileObserver.startWatching();\n        } catch (Throwable t) {\n            Log.e(\"prefs\", \"Failed to start FileObserver!\");\n        }\n    }\n\n    void findMod(String filter) {\n        lastFilter = filter;\n        mSearchResultView.setVisibility(\"\".equals(filter) ? View.GONE : View.VISIBLE);\n        ModSearchAdapter adapter = (ModSearchAdapter) mSearchResultView.getAdapter();\n        if (adapter == null) return;\n        adapter.getFilter().filter(filter);\n    }\n\n    private void startSearchMode() {\n        mFrameContent.setVisibility(View.GONE);\n        SearchActionMode startActionMode = (SearchActionMode) startActionMode(new SearchActionMode.Callback() {\n            @Override\n            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {\n                SearchActionMode searchActionMode = (SearchActionMode) actionMode;\n                searchActionMode.setAnchorView(mSearchView);\n                searchActionMode.setAnimateView(findViewById(android.R.id.list_container));\n                searchActionMode.getSearchInput().addTextChangedListener(mSearchResultListener);\n                return true;\n            }\n\n            @Override\n            public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {\n                return true;\n            }\n\n            @Override\n            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {\n                return true;\n            }\n\n            @Override\n            public void onDestroyActionMode(ActionMode actionMode) {\n                SearchActionMode searchActionMode = (SearchActionMode) actionMode;\n                searchActionMode.getSearchInput().removeTextChangedListener(mSearchResultListener);\n                exitSearchMode();\n                updateData();\n            }\n        });\n\n        if (startActionMode == null) {\n            throw new NullPointerException(\"null cannot be cast to non-null type moralnorm.appcompat.internal.view.SearchActionMode\");\n        }\n        mSearchActionMode = startActionMode;\n    }\n\n    private void exitSearchMode() {\n        if (mSearchActionMode != null) {\n            mSearchActionMode = null;\n        }\n        mFrameContent.setVisibility(View.VISIBLE);\n    }\n\n    public void requestBackup() {\n        new BackupManager(getApplicationContext()).dataChanged();\n    }\n\n    private void updateData() {\n        mFrameContent.setVisibility(View.VISIBLE);\n    }\n\n    @Override\n    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {\n        if (requestCode == REQUEST_CODE) {\n            if (resultCode == RESULT_CANCELED) {\n                finish();\n            } else if (resultCode == RESULT_FIRST_USER) {\n                CtaUtils.setCtaEnabled(this);\n            }\n        }\n        super.onActivityResult(requestCode, resultCode, data);\n    }\n\n    /**\n     * @noinspection deprecation\n     */\n    private boolean PermissionRecord(boolean iNeedGet) {\n        @SuppressLint({\"WorldWriteableFiles\", \"WorldReadableFiles\"})\n        SharedPreferences sharedPreferences =\n            getSharedPreferences(mPermission, MODE_WORLD_WRITEABLE | MODE_WORLD_READABLE);\n        if (!iNeedGet) {\n            boolean mPermissionRecord = sharedPreferences.getBoolean(\"mPermissionRecord\", false);\n        /*\n        需要每次更新软件重新弹出界面可以使用下面的方法\n        String PackageCodePath = sharedPreferences.getString(\"mPackageCodePath\", \"null\");\n        String Now_PackageCodePath = getPackageCodePath();\n        if (!hasExecutedCommand || !PackageCodePath.equals(Now_PackageCodePath)) {\n        */\n            if (!mPermissionRecord) {\n                // 标记得到允许\n                SharedPreferences.Editor editor = sharedPreferences.edit();\n                editor.putBoolean(\"mPermissionRecord\", true);\n                /*editor.putString(\"packageCodePath\", Now_PackageCodePath);*/\n                editor.apply();\n            }\n        }\n        return sharedPreferences.getBoolean(\"mPermissionRecord\", false);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/ModuleSettingsActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui;\n\nimport android.Manifest;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.os.Bundle;\nimport android.widget.Toast;\n\nimport androidx.annotation.Nullable;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.SettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.ModuleSettingsFragment;\nimport com.sevtinge.cemiuiler.utils.BackupUtils;\nimport com.sevtinge.cemiuiler.utils.Helpers;\n\nimport moralnorm.appcompat.app.AlertDialog;\n\npublic class ModuleSettingsActivity extends SettingsActivity {\n\n    ModuleSettingsFragment mModuleSettingsFragment = new ModuleSettingsFragment();\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setFragment(mModuleSettingsFragment);\n    }\n\n    @Override\n    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {\n        if (grantResults.length == 0) {\n            super.onRequestPermissionsResult(requestCode, permissions, grantResults);\n            return;\n        }\n\n        switch (requestCode) {\n            case Helpers.REQUEST_PERMISSIONS_BACKUP -> {\n                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n                    mModuleSettingsFragment.backupSettings(this);\n                } else if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {\n                    Toast.makeText(this, R.string.backup_ask, Toast.LENGTH_SHORT).show();\n                } else {\n                    Toast.makeText(this, R.string.backup_permission, Toast.LENGTH_LONG).show();\n                }\n            }\n            case Helpers.REQUEST_PERMISSIONS_RESTORE -> {\n                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n                    mModuleSettingsFragment.restoreSettings(this);\n                } else if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {\n                    Toast.makeText(this, R.string.rest_ask, Toast.LENGTH_SHORT).show();\n                } else {\n                    Toast.makeText(this, R.string.rest_permission, Toast.LENGTH_LONG).show();\n                }\n            }\n            default -> super.onRequestPermissionsResult(requestCode, permissions, grantResults);\n        }\n    }\n\n    @Override\n    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {\n        super.onActivityResult(requestCode, resultCode, data);\n        if (data == null) return;\n        try {\n            AlertDialog.Builder alert = new AlertDialog.Builder(this);\n            switch (requestCode) {\n                case BackupUtils.CREATE_DOCUMENT_CODE -> {\n                    BackupUtils.handleCreateDocument(this, data.getData());\n                    alert.setTitle(R.string.backup_success);\n                }\n                case BackupUtils.OPEN_DOCUMENT_CODE -> {\n                    BackupUtils.handleReadDocument(this, data.getData());\n                    alert.setTitle(R.string.rest_success);\n                }\n                default -> { return; }\n            }\n            alert.setPositiveButton(android.R.string.ok, (dialog, which) -> {\n            });\n            alert.show();\n        } catch (Exception e) {\n            AlertDialog.Builder alert = new AlertDialog.Builder(this);\n            switch (requestCode) {\n                case BackupUtils.CREATE_DOCUMENT_CODE -> alert.setTitle(R.string.backup_failed);\n                case BackupUtils.OPEN_DOCUMENT_CODE -> alert.setTitle(R.string.rest_failed);\n            }\n            alert.setMessage(e.toString());\n            alert.setPositiveButton(android.R.string.ok, (dialog, which) -> {\n            });\n            alert.show();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/SubPickerActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui;\n\nimport android.content.Intent;\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.callback.IAppSelectCallback;\nimport com.sevtinge.cemiuiler.ui.base.SettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.sub.AppPicker;\n\npublic class SubPickerActivity extends SettingsActivity {\n    AppPicker mAppSelectFragment = new AppPicker();\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mAppSelectFragment.setAppSelectCallback(new IAppSelectCallback() {\n            @Override\n            public void sendMsgToActivity(byte[] appIcon, String appName, String appPackageName, String appVersion, String appActivityName) {\n                Intent intent = new Intent();\n                intent.putExtra(\"appIcon\", appIcon);\n                intent.putExtra(\"appName\", appName);\n                intent.putExtra(\"appPackageName\", appPackageName);\n                intent.putExtra(\"appVersion\", appVersion);\n                intent.putExtra(\"appActivityName\", appActivityName);\n                setResult(1, intent);\n            }\n            @Override\n            public String getMsgFromActivity(String s) {\n                return null;\n            }\n        });\n        setFragment(mAppSelectFragment);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/SubSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui;\n\nimport com.sevtinge.cemiuiler.ui.base.SettingsActivity;\n\npublic class SubSettings extends SettingsActivity {}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/base/BaseSettingsActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui.base;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.text.TextUtils;\nimport android.view.View;\nimport android.widget.ImageView;\n\nimport androidx.fragment.app.Fragment;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.MainActivity;\nimport com.sevtinge.cemiuiler.utils.Helpers;\nimport com.sevtinge.cemiuiler.utils.ShellUtils;\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport moralnorm.appcompat.app.ActionBar;\nimport moralnorm.appcompat.app.AlertDialog;\nimport moralnorm.appcompat.app.AppCompatActivity;\n\npublic class BaseSettingsActivity extends AppCompatActivity {\n\n    private String initialFragmentName;\n    public BaseSettingsProxy mProxy;\n\n    public ActionBar mActionBar;\n    public static List<BaseSettingsActivity> mActivityList = new ArrayList<>();\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        Intent intent = getIntent();\n        mProxy = new SettingsProxy(this);\n        initialFragmentName = mProxy.getInitialFragmentName(intent);\n        if (TextUtils.isEmpty(initialFragmentName)) {\n            initialFragmentName = intent.getStringExtra(\":android:show_fragment\");\n        }\n        super.onCreate(savedInstanceState);\n        createUiFromIntent(savedInstanceState, intent);\n    }\n\n    protected void createUiFromIntent(Bundle savedInstanceState, Intent intent) {\n        mProxy.setupContentView();\n        initActionBar();\n        mActivityList.add(this);\n        Fragment targetFragment = mProxy.getTargetFragment(this, initialFragmentName, savedInstanceState);\n        if (targetFragment != null) {\n            targetFragment.setArguments(mProxy.getArguments(intent));\n            setFragment(targetFragment);\n        }\n        if (!(this instanceof MainActivity)) {\n            findViewById(R.id.search_view).setVisibility(View.GONE);\n        }\n        showXposedActiveDialog();\n    }\n\n    private void initActionBar() {\n        setDisplayHomeAsUpEnabled();\n    }\n\n    private void setDisplayHomeAsUpEnabled() {\n        if (this instanceof MainActivity) {\n            getAppCompatActionBar().setDisplayHomeAsUpEnabled(false);\n        }\n    }\n\n    public void setActionBarEndView(View view) {\n        getAppCompatActionBar().setEndView(view);\n    }\n\n    public void setRestartView(View.OnClickListener l) {\n        if (l != null) {\n            ImageView mRestartView = new ImageView(this);\n            mRestartView.setImageResource(R.drawable.ic_reboot_small);\n            mRestartView.setOnClickListener(l);\n            setActionBarEndView(mRestartView);\n        }\n    }\n\n    public void showRestartSystemDialog() {\n        showRestartDialog(true, \"\", \"\");\n    }\n\n    public void showRestartDialog(String appLabel, String packageName) {\n        showRestartDialog(false, appLabel, packageName);\n    }\n\n    public void showRestartDialog(boolean isRestartSystem, String appLabel, String packageName) {\n        String isSystem = getResources().getString(R.string.restart_app_desc, appLabel);\n        String isOther = getResources().getString(R.string.restart_app_desc, \" \" + appLabel + \" \");\n\n        new AlertDialog.Builder(this)\n            .setCancelable(false)\n            .setTitle(getResources().getString(R.string.soft_reboot) + \" \" + appLabel)\n            .setMessage(isRestartSystem ? isSystem : isOther)\n            .setHapticFeedbackEnabled(true)\n            .setPositiveButton(android.R.string.ok, (dialog, which) -> doRestart(packageName, isRestartSystem))\n            .setNegativeButton(android.R.string.cancel, null)\n            .show();\n    }\n\n    public void showXposedActiveDialog() {\n        if (!Helpers.isModuleActive) {\n            new AlertDialog.Builder(this)\n                .setCancelable(false)\n                .setTitle(R.string.tip)\n                .setMessage(R.string.hook_failed)\n                .setHapticFeedbackEnabled(true)\n                .setPositiveButton(android.R.string.ok, null)\n                .show();\n        }\n    }\n\n    public void setFragment(Fragment fragment) {\n        getSupportFragmentManager()\n            .beginTransaction()\n            .replace(R.id.frame_content, fragment)\n            .commit();\n    }\n\n    public void doRestart(String packageName, boolean isRestartSystem) {\n        boolean result = false;\n        boolean pid = true;\n        if (isRestartSystem) {\n            result = ShellUtils.getResultBoolean(\"reboot\", true);\n        } else {\n            if (packageName != null) {\n                ShellUtils.CommandResult commandResult = ShellUtils.execCommand(\"{ [[ $(pgrep -f '\" + packageName +\n                    \"' | grep -v $$) != \\\"\\\" ]] && { pkill -l 9 -f \\\"\" + packageName +\n                    \"\\\"; }; } || { echo \\\"kill error\\\"; }\", true, true);\n                if (commandResult.result == 0) {\n                    if (\"kill error\".equals(commandResult.successMsg)) {\n                        pid = false;\n                    } else result = true;\n                } else\n                    AndroidLogUtils.LogE(\"doRestart: \", \"result: \" + commandResult.result +\n                        \" errorMsg: \" + commandResult.errorMsg, null);\n            } else {\n                AndroidLogUtils.LogE(\"doRestart: \", \"packageName is null\", null);\n            }\n            // result = ShellUtils.getResultBoolean(\"pkill -l 9 -f \" + packageName, true);\n        }\n        if (!result) {\n            new AlertDialog.Builder(this)\n                .setCancelable(false)\n                .setTitle(R.string.tip)\n                .setMessage(isRestartSystem ? R.string.reboot_failed :\n                    pid ? R.string.kill_failed : R.string.pid_failed)\n                .setHapticFeedbackEnabled(true)\n                .setPositiveButton(android.R.string.ok, null)\n                .show();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/base/BaseSettingsProxy.java",
    "content": "package com.sevtinge.cemiuiler.ui.base;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\n\nimport androidx.fragment.app.Fragment;\n\nimport moralnorm.appcompat.app.AppCompatActivity;\nimport moralnorm.preference.Preference;\n\npublic abstract class BaseSettingsProxy {\n\n    AppCompatActivity mActivity;\n\n    public abstract void setupContentView();\n\n    public abstract void handleIntent(Intent intent);\n\n    public abstract void initView(Bundle bundle);\n\n    public abstract boolean onBackPressed();\n\n    public abstract void onCreateOptionsMenu(Menu menu);\n\n    public abstract void onDestroyView();\n\n    public abstract void onOptionsItemSelected(MenuItem menuItem);\n\n    public abstract void onPause();\n\n    public abstract void onPrepareOptionsMenu(Menu menu);\n\n    public abstract void onResume();\n\n    public abstract String getInitialFragmentName(Intent intent);\n\n    public abstract Fragment getTargetFragment(Context context, String initialFragmentName, Bundle savedInstanceState);\n\n    public abstract Bundle getArguments(Intent intent);\n\n    public abstract void onStartSettingsForArguments(Class<?> cls, Preference preference, boolean isEnableBundle);\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/base/SettingsActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui.base;\n\nimport androidx.annotation.NonNull;\n\nimport com.sevtinge.cemiuiler.ui.SubSettings;\nimport com.sevtinge.cemiuiler.ui.fragment.framework.OtherSettings;\nimport com.sevtinge.cemiuiler.ui.fragment.home.HomeDockSettings;\nimport com.sevtinge.cemiuiler.ui.fragment.home.HomeFolderSettings;\nimport com.sevtinge.cemiuiler.ui.fragment.home.HomeGestureSettings;\nimport com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings;\nimport com.sevtinge.cemiuiler.ui.fragment.various.AlertDialogSettings;\n\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.PreferenceFragmentCompat;\nimport moralnorm.preference.compat.PreferenceFragment;\n\npublic class SettingsActivity extends BaseSettingsActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {\n\n    public void onStartSettingsForArguments(Preference preference, boolean isBundleEnable) {\n        mProxy.onStartSettingsForArguments(SubSettings.class, preference, isBundleEnable);\n    }\n\n    @Override\n    public boolean onPreferenceStartFragment(@NonNull PreferenceFragmentCompat preferenceFragmentCompat, @NonNull Preference preference) {\n        boolean isBundleEnable = preferenceFragmentCompat instanceof OtherSettings ||\n            preferenceFragmentCompat instanceof HomeDockSettings ||\n            preferenceFragmentCompat instanceof HomeFolderSettings ||\n            preferenceFragmentCompat instanceof AlertDialogSettings ||\n            preferenceFragmentCompat instanceof HomeGestureSettings ||\n            preferenceFragmentCompat instanceof MultiActionSettings;\n        onStartSettingsForArguments(preference, isBundleEnable);\n        return true;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/base/SettingsProxy.java",
    "content": "package com.sevtinge.cemiuiler.ui.base;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.Menu;\nimport android.view.MenuItem;\n\nimport androidx.fragment.app.Fragment;\nimport androidx.fragment.app.FragmentManager;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.utils.SettingLauncherHelper;\n\nimport moralnorm.appcompat.app.AppCompatActivity;\nimport moralnorm.preference.Preference;\n\npublic class SettingsProxy extends BaseSettingsProxy {\n\n    public FragmentManager mFragmentManager;\n\n    public SettingsProxy(AppCompatActivity activity) {\n        mActivity = activity;\n    }\n\n    private void replaceFragment(Fragment fragment, String tag) {\n        mFragmentManager.beginTransaction().replace(R.id.frame_content, fragment, tag).commit();\n    }\n\n    @Override\n    public void setupContentView() {\n        mActivity.setContentView(R.layout.settings_main);\n    }\n\n    @Override\n    public void handleIntent(Intent intent) {\n\n    }\n\n    @Override\n    public void initView(Bundle bundle) {\n        mFragmentManager = mActivity.getSupportFragmentManager();\n    }\n\n    @Override\n    public boolean onBackPressed() {\n        return false;\n    }\n\n    @Override\n    public void onCreateOptionsMenu(Menu menu) {\n\n    }\n\n    @Override\n    public void onDestroyView() {\n\n    }\n\n    @Override\n    public void onOptionsItemSelected(MenuItem menuItem) {\n\n    }\n\n    @Override\n    public void onPause() {\n\n    }\n\n    @Override\n    public void onPrepareOptionsMenu(Menu menu) {\n\n    }\n\n    @Override\n    public void onResume() {\n\n    }\n\n    @Override\n    public String getInitialFragmentName(Intent intent) {\n        return intent.getStringExtra(\":settings:show_fragment\");\n    }\n\n    @Override\n    public Fragment getTargetFragment(Context context, String initialFragmentName, Bundle savedInstanceState) {\n        try {\n            return Fragment.instantiate(context, initialFragmentName, savedInstanceState);\n        } catch (Exception e) {\n            Log.e(\"Settings\", \"Unable to get target fragment\", e);\n            return null;\n        }\n    }\n\n    @Override\n    public Bundle getArguments(Intent intent) {\n        Bundle args = intent.getBundleExtra(\":settings:show_fragment_args\");\n        String showFragmentTitle = intent.getStringExtra(\":settings:show_fragment_title\");\n        int showFragmentTitleResId = intent.getIntExtra(\":settings:show_fragment_title_resid\", 0);\n        args.putString(\":fragment:show_title\", showFragmentTitle);\n        args.putInt(\":fragment:show_title_resid\", showFragmentTitleResId);\n        return args;\n    }\n\n    @Override\n    public void onStartSettingsForArguments(Class<?> cls, Preference preference, boolean isEnableBundle) {\n        Bundle args = null;\n        if (isEnableBundle) {\n            args = new Bundle();\n            args.putString(\"key\", preference.getKey());\n        }\n        String mFragmentName = preference.getFragment();\n        String mTitle = preference.getTitle().toString();\n        SettingLauncherHelper.onStartSettingsForArguments(mActivity, cls, mFragmentName, args, mTitle);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/customhook/CustomHookConfigActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui.customhook;\n\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.SettingsActivity;\n\npublic class CustomHookConfigActivity extends SettingsActivity {\n\n    @Override\n    public void onCreate(Bundle bundle) {\n        super.onCreate(bundle);\n        setContentView(R.layout.activity_custom_hook_config);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/AboutFragment.kt",
    "content": "package com.sevtinge.cemiuiler.ui.fragment\n\nimport android.content.Intent\nimport android.net.Uri\nimport com.sevtinge.cemiuiler.BuildConfig\nimport com.sevtinge.cemiuiler.R\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment\nimport com.sevtinge.hyperceiler.expansionpacks.utils.ClickCountsUtils;\nimport moralnorm.preference.Preference\nimport moralnorm.preference.SwitchPreference\nimport java.util.Calendar\nimport kotlin.math.abs\n\nclass AboutFragment : SettingsPreferenceFragment() {\n\n    private var lIIlIll = 100 ushr 7\n    private val lIIlIlI = 100 ushr 6\n\n    override fun getContentResId(): Int {\n        return R.xml.prefs_about\n    }\n\n    override fun initPrefs() {\n        val lIIlllI = ClickCountsUtils.getClickCounts()\n        val lIIllII = findPreference<Preference>(\"prefs_key_various_enable_super_function\")\n        val mQQGroup = findPreference<Preference>(\"prefs_key_about_join_qq_group\")\n\n        lIIllII?.title = BuildConfig.VERSION_NAME + \" | \" + BuildConfig.BUILD_TYPE\n\n        lIIllII?.onPreferenceClickListener = Preference.OnPreferenceClickListener { lIIllll->\n            if (BuildConfig.BUILD_TYPE.contains(\"debug\")) lIIllII?.title = BuildConfig.VERSION_NAME + \" | \" + BuildConfig.BUILD_TYPE + \" | $lIIlllI\"\n            lIIllll as SwitchPreference\n            lIIllll.isChecked = !(lIIllll.isChecked)\n            lIIlIll++\n            if (BuildConfig.BUILD_TYPE.contains(\"debug\")) lIIllII?.title = BuildConfig.VERSION_NAME + \" | \" + BuildConfig.BUILD_TYPE + \" | $lIIlIll/$lIIlllI\"\n            if (lIIllll.isChecked) {\n                if (lIIlIll >= lIIlIlI) {\n                    lIIllll.isChecked = !(lIIllll.isChecked)\n                    if (BuildConfig.BUILD_TYPE.contains(\"debug\")) lIIllII?.title = BuildConfig.VERSION_NAME + \" | \" + BuildConfig.BUILD_TYPE + \" | HF OFF\"\n                    lIIlIll = 100 ushr 8\n                }\n            } else if (lIIlIll >= lIIlllI) {\n                lIIllll.isChecked = !(lIIllll.isChecked)\n                if (BuildConfig.BUILD_TYPE.contains(\"debug\")) lIIllII?.title = BuildConfig.VERSION_NAME + \" | \" + BuildConfig.BUILD_TYPE + \" | HF ON\"\n                lIIlIll = 100 ushr 8\n            }\n            false\n        }\n\n        mQQGroup?.onPreferenceClickListener = Preference.OnPreferenceClickListener {\n            \"MF68KGcOGYEfMvkV_htdyT6D6C13We_r\".joinQQGroup() //&authKey=du488g%2FRPdQ%2FaUq0IKuDLvK24mEmbpRidqHGE6qqv3wpa1lbUa6Vi7JJ4YxWe7s5&noverify=0&group_code=247909573\n            true\n        }\n    }\n\n    /**\n     * 调用 joinQQGroup() 即可发起手Q客户端申请加群\n     * @param this@joinQQGroup 由官网生成的key\n     * @return 返回true表示呼起手Q成功，返回false表示呼起失败\n     */\n    private fun String.joinQQGroup(): Boolean {\n        val intent = Intent()\n        intent.data =\n            Uri.parse(\"mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D${this}\") // https://jq.qq.com/?_wv=1027&k=EsyE1RhL\n        // 此Flag可根据具体产品需要自定义，如设置，则在加群界面按返回，返回手Q主界面，不设置，按返回会返回到呼起产品界面    //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n        return try {\n            startActivity(intent)\n            true\n        } catch (e: Exception) {\n            // 未安装手Q或安装的版本不支持\n            false\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/AiAsstFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class AiAsstFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.aiasst;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.aiasst),\n            \"com.xiaomi.aiasst.vision\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/AodFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class AodFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.aod;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.aod),\n            \"com.miui.aod\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/BarrageFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class BarrageFragment  extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.barrage;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.barrage),\n            \"com.xiaomi.barrage\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/BrowserFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class BrowserFragment extends SettingsPreferenceFragment {\n\n    @Override\n    public int getContentResId() {\n        return R.xml.browser;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.browser),\n            \"com.android.browser\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/CameraFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class CameraFragment extends SettingsPreferenceFragment {\n\n    @Override\n    public int getContentResId() {\n        return R.xml.camera;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.camera),\n            \"com.android.camera\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ClockFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class ClockFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.clock;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.clock),\n            \"com.android.deskclock\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ContentExtensionFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class ContentExtensionFragment extends SettingsPreferenceFragment {\n    SwitchPreference mUnlockTaplus;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.content_extension;\n    }\n\n    @Override\n    public void initPrefs() {\n        mUnlockTaplus= findPreference(\"prefs_key_content_extension_unlock_taplus\");\n\n        mUnlockTaplus.setVisible(!isAndroidR());\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.content_extension),\n            \"com.miui.contentextension\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/CreationFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class CreationFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.creation;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.creation),\n            \"com.miui.creation\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/DownloadsFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class DownloadsFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.downloads;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.downloads),\n            \"com.android.providers.downloads.ui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/FileExplorerFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class FileExplorerFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.fileexplorer;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.fileexplorer),\n            \"com.android.fileexplorer\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/GalleryFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class GalleryFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.gallery;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.gallery),\n            \"com.miui.gallery\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/GuardProviderFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class GuardProviderFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.guard_provider;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.guard_provider),\n            \"com.miui.guardprovider\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/HomeFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/InCallUiFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class InCallUiFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.incallui;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.incallui),\n            \"com.android.incallui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/JoyoseFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class JoyoseFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.joyose;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.joyose),\n            \"com.xiaomi.joyose\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/LbeFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class LbeFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.lbe_security;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.lbe),\n            \"com.lbe.security.miui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MainFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport java.util.Random;\n\nimport moralnorm.preference.Preference;\n\npublic class MainFragment extends SettingsPreferenceFragment {\n\n    Preference mPowerSetting;\n    Preference mMTB;\n    Preference mSecurityCenter;\n    Preference mSecurityCenterPad;\n    Preference mTip;\n    Random r = new Random();\n\n    int[] tips = new int[]{\n        R.string.tip_0,\n        R.string.tip_1,\n        R.string.tip_2,\n        R.string.tip_3,\n        R.string.tip_4,\n        R.string.tip_5,\n        R.string.tip_6,\n        R.string.tip_7,\n        R.string.tip_8,\n        R.string.tip_9,\n        R.string.tip_10,\n        R.string.tip_11,\n        R.string.tip_12,\n        R.string.tip_13,\n        R.string.tip_14,\n        R.string.tip_15,\n        R.string.tip_16,\n        R.string.tip_17,\n        R.string.tip_18,\n        R.string.tip_19,\n        R.string.tip_20,\n    };\n\n    @Override\n    public int getContentResId() {\n        return R.xml.prefs_main;\n    }\n\n    @Override\n    public void initPrefs() {\n        int randomTip = r.nextInt(tips.length);\n        // log(\"tip id is\" + randomTip);\n\n        mPowerSetting = findPreference(\"prefs_key_powerkeeper\");\n        mMTB = findPreference(\"prefs_key_mtb\");\n        mSecurityCenter = findPreference(\"prefs_key_security_center\");\n        mSecurityCenterPad = findPreference(\"prefs_key_security_center_pad\");\n        mTip = findPreference(\"prefs_key_tip\");\n\n        mPowerSetting.setVisible(!isAndroidR());\n        mMTB.setVisible(!isAndroidR());\n\n        mSecurityCenter.setVisible(!isPad());\n        mSecurityCenterPad.setVisible(isPad());\n\n        mTip.setSummary(tips[randomTip]);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MarketFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MarketFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.market;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.market),\n            \"com.xiaomi.market\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MediaEditorFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MediaEditorFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.mediaeditor;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.mediaeditor),\n            \"com.miui.mediaeditor\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MiLinkFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MiLinkFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.milink;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.milink),\n            \"com.milink.service\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MiSettingsFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MiSettingsFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.mi_settings;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.mi_settings),\n            \"com.xiaomi.misettings\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MiShareFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class MiShareFragment extends SettingsPreferenceFragment {\n\n    SwitchPreference mMiShareNotAuto;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.mishare;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.mishare),\n            \"com.miui.mishare.connectivity\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mMiShareNotAuto = findPreference(\"prefs_key_disable_mishare_auto_off\");\n        /*int appVersionCode = getPackageVersionCode(lpparam);\n\n        if (appVersionCode <= 21400) {\n            mMiShareNotAuto.setSummary(R.string.app_version_not_supported);\n            mMiShareNotAuto.setEnabled(false);\n        }*/\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MiWallpaperFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MiWallpaperFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.miwallpaper;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartSystemDialog();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MirrorFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MirrorFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.mirror;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.mirror),\n            \"com.xiaomi.mirror\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MiuiPackageInstallerFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MiuiPackageInstallerFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.package_installer;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.package_installer),\n            \"com.miui.packageinstaller\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MmsFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MmsFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.mms;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.mms),\n            \"com.android.mms\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ModuleSettingsFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.app.Activity;\nimport android.content.ComponentName;\nimport android.content.pm.PackageManager;\nimport android.widget.Toast;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.HideAppActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.BackupUtils;\nimport com.sevtinge.cemiuiler.utils.DialogHelper;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.appcompat.app.AppCompatActivity;\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.MultiSelectListPreference;\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SwitchPreference;\n\npublic class ModuleSettingsFragment extends SettingsPreferenceFragment\n    implements Preference.OnPreferenceChangeListener {\n\n    MultiSelectListPreference mReboot;\n    DropDownPreference mIconModePreference;\n    DropDownPreference mIconModeValue;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.prefs_settings;\n    }\n\n    @Override\n    public void initPrefs() {\n        int mIconMode = Integer.parseInt(PrefsUtils.getSharedStringPrefs(getContext(), \"prefs_key_settings_icon\", \"0\"));\n        mIconModePreference = findPreference(\"prefs_key_settings_icon\");\n        mIconModeValue = findPreference(\"prefs_key_settings_icon_mode\");\n        SwitchPreference mHideAppIcon = findPreference(\"prefs_key_settings_hide_app_icon\");\n\n        setIconMode(mIconMode);\n        mIconModePreference.setOnPreferenceChangeListener(this);\n\n        mHideAppIcon.setOnPreferenceChangeListener((preference, o) -> {\n\n            PackageManager pm = getActivity().getPackageManager();\n            int mComponentEnabledState;\n\n            if ((Boolean) o) {\n                mComponentEnabledState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;\n            } else {\n                mComponentEnabledState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;\n            }\n\n            pm.setComponentEnabledSetting(new ComponentName(getActivity(), HideAppActivity.class), mComponentEnabledState, PackageManager.DONT_KILL_APP);\n\n            return true;\n        });\n\n        mReboot = findPreference(\"prefs_key_settings_reboot\");\n        mReboot.setVisible(false);\n        /*String[] mRestartAllScopes = getResources().getStringArray(R.array.xposed_scope);\n        List<String> mItemList = Arrays.asList(mRestartAllScopes);\n        String[] mItems = new String[0];\n        if (mItemList.contains(\"android\")) {\n            List<String> mItemList2 = new ArrayList<>(mItemList);\n            mItemList2.remove(\"android\");\n            mItems = mItemList2.toArray(new String[mItemList2.size()]);\n        }\n\n        mReboot = findPreference(\"prefs_key_settings_reboot\");\n        mReboot.setEntries(mItems);\n        mReboot.setEntryValues(mItems);\n        mReboot.setOnPreferenceChangeListener((preference, o) -> {\n            List<String> mShellPackageName = new ArrayList<>();\n            CharSequence[] extras = mReboot.getEntries();\n            Set<String> options = (Set<String>) o;\n            for (String op : options) {\n                int index = mReboot.findIndexOfValue(op);\n                mShellPackageName.add(\"killall \" + extras[index]);\n                Toast.makeText(getActivity(), \"killall \" + extras[index], Toast.LENGTH_SHORT).show();\n            }\n            ShellUtils.execCommand(mShellPackageName, true);\n            return false;\n        });*/\n\n        findPreference(\"prefs_key_back\").setOnPreferenceClickListener(preference -> {\n            final AppCompatActivity activity = (AppCompatActivity) getActivity();\n            backupSettings(activity);\n            return true;\n        });\n\n        findPreference(\"prefs_key_rest\").setOnPreferenceClickListener(preference -> {\n            restoreSettings(getActivity());\n            return true;\n        });\n\n        findPreference(\"prefs_key_reset\").setOnPreferenceClickListener(preference -> {\n            DialogHelper.showDialog(getActivity(), R.string.reset_title, R.string.reset_desc, (dialog, which) -> {\n                PrefsUtils.mSharedPreferences.edit().clear().apply();\n                Toast.makeText(getActivity(), R.string.reset_okay, Toast.LENGTH_LONG).show();\n            });\n            return true;\n        });\n    }\n\n    @Override\n    public boolean onPreferenceChange(Preference preference, Object o) {\n        if (preference == mIconModePreference) {\n            setIconMode(Integer.parseInt((String) o));\n        }\n        return true;\n    }\n\n    private void setIconMode(int mode) {\n        mIconModeValue.setVisible(mode != 0);\n    }\n\n    public void backupSettings(Activity activity) {\n        BackupUtils.backup(activity);\n    }\n\n    public void restoreSettings(Activity activity) {\n        BackupUtils.restore(activity);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MtbFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MtbFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.mtb;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.mtb),\n            \"com.xiaomi.mtb\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/MusicFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MusicFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.music;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.music),\n            \"com.miui.player\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/NetworkBoostFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class NetworkBoostFragment extends SettingsPreferenceFragment {\n        @Override\n        public int getContentResId() {\n            return R.xml.networkboost;\n        }\n\n        @Override\n        public View.OnClickListener addRestartListener() {\n            return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n                getResources().getString(R.string.networkboost),\n                \"com.xiaomi.networkboost\"\n            );\n        }\n    }\n\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/NfcFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class NfcFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.nfc;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.nfc),\n            \"com.android.nfc\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/PersonalAssistantFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.ColorPickerPreference;\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SeekBarPreferenceEx;\nimport moralnorm.preference.SwitchPreference;\n\npublic class PersonalAssistantFragment extends SettingsPreferenceFragment\n    implements Preference.OnPreferenceChangeListener {\n\n    SwitchPreference mWidgetCrack;\n    SwitchPreference mBlurBackground;\n    SeekBarPreferenceEx mBlurRadius;\n    ColorPickerPreference mBlurColor;\n    DropDownPreference mBlurBackgroundStyle;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.personal_assistant;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.personal_assistant),\n            \"com.miui.personalassistant\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        int mBlurMode = Integer.parseInt(PrefsUtils.getSharedStringPrefs(getContext(), \"prefs_key_personal_assistant_value\", \"1\"));\n        mWidgetCrack = findPreference(\"prefs_key_personal_assistant_widget_crack\");\n        mBlurBackground = findPreference(\"prefs_key_pa_enable\");\n        mBlurBackgroundStyle = findPreference(\"prefs_key_personal_assistant_value\");\n        mBlurRadius = findPreference(\"prefs_key_personal_assistant_blurradius\");\n        mBlurColor = findPreference(\"prefs_key_personal_assistant_color\");\n\n        mBlurBackground.setVisible(!isAndroidR()); // 负一屏背景设置\n\n        if (!getSharedPreferences().getBoolean(\"prefs_key_various_enable_super_function\", false)) {\n            mWidgetCrack.setVisible(false);\n        }\n\n        setBlurMode(mBlurMode);\n        mBlurBackgroundStyle.setOnPreferenceChangeListener(this);\n    }\n\n    @Override\n    public boolean onPreferenceChange(Preference preference, Object o) {\n        if (preference == mBlurBackgroundStyle) {\n            setBlurMode(Integer.parseInt((String) o));\n        }\n        return true;\n    }\n\n    private void setBlurMode(int mode) {\n        mBlurRadius.setVisible(mode == 2);\n        mBlurColor.setVisible(mode == 2);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/PhoneFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class PhoneFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.phone;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.phone),\n            \"com.android.phone\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/PowerKeeperFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class PowerKeeperFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.powerkeeper;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.powerkeeper),\n            \"com.miui.powerkeeper\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ScannerFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class ScannerFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.scanner;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.scanner),\n            \"com.xiaomi.scanner\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ScreenRecorderFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class ScreenRecorderFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.screenrecorder;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.screenrecorder),\n            \"com.miui.screenrecorder\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ScreenShotFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class ScreenShotFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.screenshot;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.screenshot),\n            \"com.miui.screenshot\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SecurityCenterFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport android.Manifest;\nimport android.provider.Settings;\nimport android.view.View;\n\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.PermissionChecker;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SwitchPreference;\n\npublic class SecurityCenterFragment extends SettingsPreferenceFragment {\n    String mSecurity;\n    SwitchPreference mAiClipboard;\n    SwitchPreference mBlurLocation;\n    Preference mNewboxBackgroundCustom;\n    SwitchPreference mOpenByDefaultSetting;\n    SwitchPreference mSecurityBackground;\n    SwitchPreference mSecurityColor;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.security_center;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        mSecurity = getResources().getString(!isPad() ? R.string.security_center : R.string.security_center_pad);\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            mSecurity,\n            \"com.miui.securitycenter\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        int permission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_SECURE_SETTINGS);\n\n        mBlurLocation = findPreference(\"prefs_key_security_center_blur_location\");\n        mAiClipboard = findPreference(\"prefs_key_security_center_ai_clipboard\");\n        mOpenByDefaultSetting = findPreference(\"prefs_key_security_center_app_default_setting\");\n        mSecurityColor = findPreference(\"prefs_key_security_center_sidebar_line_color\");\n        mSecurityBackground = findPreference(\"prefs_key_se_enable\");\n\n        mNewboxBackgroundCustom = findPreference(\"prefs_key_security_center_newbox_bg_custom\");\n\n        if (permission != PermissionChecker.PERMISSION_GRANTED) {\n            mBlurLocation.setSummary(R.string.security_center_no_permission);\n            mAiClipboard.setSummary(R.string.security_center_no_permission);\n            mBlurLocation.setEnabled(false);\n            mAiClipboard.setEnabled(false);\n        } else {\n            boolean mBlurLocationEnable = Settings.Secure.getInt(getContext().getContentResolver(), \"mi_lab_blur_location_enable\", 0) == 1;\n            boolean mAiClipboardEnable = Settings.Secure.getInt(getContext().getContentResolver(), \"mi_lab_ai_clipboard_enable\", 0) == 1;\n\n            mBlurLocation.setChecked(mBlurLocationEnable);\n            mAiClipboard.setChecked(mAiClipboardEnable);\n        }\n\n        mSecurityColor.setVisible(!isAndroidR()); // 侧滑栏提示线自定义\n        mSecurityBackground.setVisible(!isAndroidR()); // 侧滑栏背景自定义\n        mOpenByDefaultSetting.setVisible(!isAndroidR()); // 应用打开链接管理\n\n        boolean mBlurLocationEnable = Settings.Secure.getInt(getContext().getContentResolver(), \"mi_lab_blur_location_enable\", 0) == 1;\n        boolean mAiClipboardEnable = Settings.Secure.getInt(getContext().getContentResolver(), \"mi_lab_ai_clipboard_enable\", 0) == 1;\n\n        mBlurLocation.setChecked(mBlurLocationEnable);\n        mAiClipboard.setChecked(mAiClipboardEnable);\n\n        mBlurLocation.setOnPreferenceChangeListener((preference, o) -> {\n            Settings.Secure.putInt(getContext().getContentResolver(), \"mi_lab_blur_location_enable\", (Boolean) o ? 1 : 0);\n            return true;\n        });\n\n        mAiClipboard.setOnPreferenceChangeListener((preference, o) -> {\n            Settings.Secure.putInt(getContext().getContentResolver(), \"mi_lab_ai_clipboard_enable\", (Boolean) o ? 1 : 0);\n            return true;\n        });\n\n    }\n\n    @Override\n    public boolean onPreferenceTreeClick(Preference preference) {\n        if (preference == mNewboxBackgroundCustom) {\n            /*openMultiAction(preference, null, PickerHomeActivity.Actions.Blur);*/\n        }\n        return super.onPreferenceTreeClick(preference);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SystemFrameworkFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport miui.telephony.TelephonyManager;\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SwitchPreference;\n\npublic class SystemFrameworkFragment extends SettingsPreferenceFragment {\n    SwitchPreference mDisableCreak;\n    SwitchPreference mDisableIntegrity;\n    Preference mNetwork;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.framework;\n    }\n\n    @Override\n    public void initPrefs() {\n        boolean mCreak = PrefsUtils.getSharedBoolPrefs(getContext(), \"prefs_key_system_framework_core_patch_auth_creak\", false);\n        mDisableCreak = findPreference(\"prefs_key_system_framework_core_patch_auth_creak\");\n        mDisableIntegrity = findPreference(\"prefs_key_system_framework_core_patch_disable_integrity\");\n        mNetwork = findPreference(\"prefs_key_system_framework_network\");\n\n        mDisableIntegrity.setVisible(isMoreAndroidVersion(33) && !mCreak);\n        mNetwork.setVisible(TelephonyManager.getDefault().isFiveGCapable());\n\n        mDisableCreak.setOnPreferenceChangeListener((preference, o) -> {\n            if ((boolean) o) {\n                mDisableIntegrity.setChecked(false);\n                mDisableIntegrity.setVisible(false);\n            } else {\n                mDisableIntegrity.setVisible(isMoreAndroidVersion(33));\n            }\n            return true;\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SystemSettingsFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion;\n\nimport android.provider.Settings;\nimport android.view.View;\nimport android.widget.SeekBar;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils;\n\nimport moralnorm.preference.PreferenceCategory;\nimport moralnorm.preference.SeekBarPreferenceEx;\nimport moralnorm.preference.SwitchPreference;\n\npublic class SystemSettingsFragment extends SettingsPreferenceFragment {\n    PreferenceCategory mNewNfc; // 新版 NFC 界面\n    PreferenceCategory mAreaScreenshot; // 区域截屏\n    SwitchPreference mHighMode; // 极致模式\n    SwitchPreference mNoveltyHaptic; // 新版触感调节页面\n    SwitchPreference mPad; // 解锁平板分区\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_settings;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity) getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_settings),\n            \"com.android.settings\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mHighMode = findPreference(\"prefs_key_system_settings_develop_speed_mode\");\n        mAreaScreenshot = findPreference(\"prefs_key_system_settings_accessibility\");\n        mNewNfc = findPreference(\"prefs_key_system_settings_connection_sharing\");\n        mNoveltyHaptic = findPreference(\"prefs_key_system_settings_novelty_haptic\");\n        mPad = findPreference(\"prefs_key_system_settings_enable_pad_area\");\n\n        mHighMode.setVisible(!isAndroidR());\n        mAreaScreenshot.setVisible(isAndroidR());\n        mNewNfc.setVisible(isMoreMiuiVersion(14f) && isMoreAndroidVersion(33));\n        mNoveltyHaptic.setVisible(isMoreMiuiVersion(14f) && isMoreAndroidVersion(31));\n        mPad.setVisible(isPad());\n        animationScale();\n    }\n\n    public void animationScale() {\n        SeekBarPreferenceEx seekBarPreferenceWn = findPreference(\"prefs_key_system_settings_window_animation_scale\");\n        setOnSeekBarChangeListener(seekBarPreferenceWn, \"window_animation_scale\");\n\n        SeekBarPreferenceEx seekBarPreferenceTr = findPreference(\"prefs_key_system_settings_transition_animation_scale\");\n        setOnSeekBarChangeListener(seekBarPreferenceTr, \"transition_animation_scale\");\n\n        SeekBarPreferenceEx seekBarPreferenceAn = findPreference(\"prefs_key_system_settings_animator_duration_scale\");\n        setOnSeekBarChangeListener(seekBarPreferenceAn, \"animator_duration_scale\");\n    }\n\n    public void setOnSeekBarChangeListener(SeekBarPreferenceEx mySeekBarPreference, String name) {\n        mySeekBarPreference.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {\n            @Override\n            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {\n                setAnimator(progress, name);\n            }\n\n            @Override\n            public void onStartTrackingTouch(SeekBar seekBar) {\n            }\n\n            @Override\n            public void onStopTrackingTouch(SeekBar seekBar) {\n            }\n        });\n    }\n\n    public void setAnimator(int i, String name) {\n        float mFloat = ((float) i) / 100;\n        try {\n            Settings.Global.putFloat(getContext().getContentResolver(), name, mFloat);\n        } catch (Throwable e) {\n            AndroidLogUtils.LogE(\"setAnimator\", \"set: \" + name + \" float: \" + mFloat, e);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/SystemUIFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class SystemUIFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/ThemeManagerFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.PreferenceCategory;\nimport moralnorm.preference.SwitchPreference;\n\npublic class ThemeManagerFragment extends SettingsPreferenceFragment {\n\n    PreferenceCategory mVersionCodeModifyPreferenceCat;\n    SwitchPreference mVersionCodeModifyPreference;\n    SwitchPreference mThemeManagerCrack;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.theme_manager;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.theme_manager),\n            \"com.android.thememanager\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mVersionCodeModifyPreferenceCat = findPreference(\"prefs_key_theme_manager_version_code_modify_cat\");\n        mVersionCodeModifyPreference = findPreference(\"prefs_key_theme_manager_version_code_modify\");\n\n        if (!isMoreMiuiVersion(13f)) {\n            mVersionCodeModifyPreferenceCat.setVisible(true);\n        } else {\n            mVersionCodeModifyPreferenceCat.setVisible(false);\n            mVersionCodeModifyPreference.setChecked(false);\n            mVersionCodeModifyPreference.setEnabled(false);\n        }\n\n        mThemeManagerCrack = findPreference(\"prefs_key_various_theme_crack\");\n        if (!getSharedPreferences().getBoolean(\"prefs_key_various_enable_super_function\", false)) {\n            mThemeManagerCrack.setVisible(false);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/TsmClientFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class TsmClientFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.tsmclient;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.tsmclient),\n            \"com.miui.tsmclient\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/UpdaterFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.EditTextPreference;\nimport moralnorm.preference.Preference;\n\npublic class UpdaterFragment extends SettingsPreferenceFragment\n    implements Preference.OnPreferenceChangeListener {\n\n    DropDownPreference mUpdateMode;\n    EditTextPreference mBigVersion;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.updater;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.updater),\n            \"com.android.updater\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        int mMode = Integer.parseInt(PrefsUtils.getSharedStringPrefs(getContext(), \"prefs_key_updater_version_mode\", \"1\"));\n        mUpdateMode = findPreference(\"prefs_key_updater_version_mode\");\n        mBigVersion = findPreference(\"prefs_key_various_updater_big_version\");\n\n        setMode(mMode);\n        mUpdateMode.setOnPreferenceChangeListener(this);\n    }\n\n    @Override\n    public boolean onPreferenceChange(@NonNull Preference preference, Object o) {\n        if (preference == mUpdateMode) {\n            setMode(Integer.parseInt((String) o));\n        }\n        return true;\n    }\n\n    private void setMode(int mode) {\n        mBigVersion.setVisible(mode == 2);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/VariousFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SwitchPreference;\n\npublic class VariousFragment extends SettingsPreferenceFragment {\n\n    SwitchPreference mDisableBluetoothRestrict; // 禁用蓝牙临时关闭\n    SwitchPreference mDisableDeviceLog; // 关闭访问设备日志确认\n    Preference mMipad; // 平板相关功能\n\n    @Override\n    public int getContentResId() {\n        return R.xml.various;\n    }\n\n    @Override\n    public void initPrefs() {\n        mDisableBluetoothRestrict = findPreference(\"prefs_key_various_disable_bluetooth_restrict\");\n        mDisableDeviceLog = findPreference(\"prefs_key_various_disable_access_device_logs\");\n        mMipad = findPreference(\"prefs_key_various_mipad\");\n\n        mDisableBluetoothRestrict.setVisible(isMoreMiuiVersion(14f) && isMoreAndroidVersion(31));\n        mDisableDeviceLog.setVisible(isAndroidT());\n        mMipad.setVisible(isPad());\n\n        mDisableBluetoothRestrict.setOnPreferenceChangeListener((preference, o) -> true);\n        mDisableDeviceLog.setOnPreferenceChangeListener((preference, o) -> true);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/WeatherFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class WeatherFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.weather;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.weather),\n            \"com.miui.weather2\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/about/AboutContributerFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.about;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class AboutContributerFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.prefs_about_contributor;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/about/AboutUseFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.about;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class AboutUseFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.prefs_about_use;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/base/BasePreferenceFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.base;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport android.text.TextUtils;\n\nimport androidx.fragment.app.Fragment;\n\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.PreferenceManager;\nimport moralnorm.preference.compat.PreferenceFragment;\n\npublic class BasePreferenceFragment extends PreferenceFragment {\n\n    private PreferenceManager mPreferenceManager;\n\n    @Override\n    public void onCreatePreferences(Bundle bundle, String s) {\n        mPreferenceManager = getPreferenceManager();\n        mPreferenceManager.setSharedPreferencesName(PrefsUtils.mPrefsName);\n        mPreferenceManager.setSharedPreferencesMode(Context.MODE_PRIVATE);\n        mPreferenceManager.setStorageDeviceProtected();\n    }\n\n    public void setTitle(int titleResId) {\n        setTitle(getResources().getString(titleResId));\n    }\n\n    public void setTitle(String title) {\n        if (!TextUtils.isEmpty(title)) {\n            getActivity().setTitle(title);\n        }\n    }\n\n    public String getFragmentName(Fragment fragment) {\n        return fragment.getClass().getName();\n    }\n\n    public String getPreferenceTitle(Preference preference) {\n        return preference.getTitle().toString();\n    }\n\n    public String getPreferenceKey(Preference preference) {\n        return preference.getKey();\n    }\n\n    public void finish() {\n        getActivity().finish();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/base/SettingsPreferenceFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.base;\n\nimport android.content.SharedPreferences;\nimport android.os.Bundle;\nimport android.text.TextUtils;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\npublic abstract class SettingsPreferenceFragment extends BasePreferenceFragment {\n\n    public String mTitle;\n    public int mContentResId = 0;\n    public int mTitleResId = 0;\n\n    @Override\n    public void onCreatePreferences(Bundle bundle, String s) {\n        super.onCreatePreferences(bundle, s);\n        Bundle args = getArguments();\n        if (args != null) {\n            mTitle = args.getString(\":fragment:show_title\");\n            mTitleResId = args.getInt(\":fragment:show_title_resid\");\n            mContentResId = args.getInt(\"contentResId\");\n        }\n        if (mTitleResId != 0) setTitle(mTitleResId);\n        if (!TextUtils.isEmpty(mTitle)) setTitle(mTitle);\n        mContentResId = mContentResId != 0 ? mContentResId : getContentResId();\n        if (mContentResId != 0) {\n            setPreferencesFromResource(mContentResId, s);\n            initPrefs();\n        }\n        ((BaseSettingsActivity)getActivity()).setRestartView(addRestartListener());\n    }\n\n    public View.OnClickListener addRestartListener() {\n        return null;\n    }\n\n    public SharedPreferences getSharedPreferences() {\n        return PrefsUtils.mSharedPreferences;\n    }\n\n    public boolean hasKey(String key) {\n        return getSharedPreferences().contains(key);\n    }\n\n    public void initPrefs() {}\n    public abstract int getContentResId();\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/DisplaySettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.framework;\n\nimport android.view.View;\nimport android.widget.SeekBar;\n\nimport com.sevtinge.cemiuiler.R;\nimport moralnorm.preference.SeekBarPreferenceEx;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class DisplaySettings extends SettingsPreferenceFragment {\n\n    SeekBarPreferenceEx minBrightness;\n    SeekBarPreferenceEx maxBrightness;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.framework_display;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartSystemDialog();\n    }\n\n    @Override\n    public void initPrefs() {\n        maxBrightness = findPreference(\"pref_key_system_ui_auto_brightness_max\");\n        minBrightness = findPreference(\"pref_key_system_ui_auto_brightness_min\");\n        assert minBrightness != null;\n        minBrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {\n            @Override\n            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {\n                if (!fromUser) return;\n                if (maxBrightness.getValue() <= progress) maxBrightness.setValue(progress + 1);\n                maxBrightness.setMinValue(progress + 1);\n            }\n\n            @Override\n            public void onStartTrackingTouch(SeekBar seekBar) {\n            }\n\n            @Override\n            public void onStopTrackingTouch(SeekBar seekBar) {\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/FreeFormSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.framework;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.PreferenceCategory;\nimport moralnorm.preference.SwitchPreference;\n\npublic class FreeFormSettings extends SettingsPreferenceFragment {\n\n    SwitchPreference mMoreFreeForm; // 多小窗\n    PreferenceCategory mSmallFreeForm; // 小窗气泡\n\n    @Override\n    public int getContentResId() {\n        return R.xml.framework_freeform;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartSystemDialog();\n    }\n\n    @Override\n    public void initPrefs() {\n        mMoreFreeForm = findPreference(\"prefs_key_system_framework_freeform_count\");\n        mSmallFreeForm = findPreference(\"prefs_key_system_framework_freeform_bubble_title\");\n\n        mMoreFreeForm.setVisible(isMoreMiuiVersion(13f));\n        mSmallFreeForm.setVisible(!isAndroidR());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/NetworkSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.framework;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class NetworkSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.framework_phone;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartSystemDialog();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/OtherSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.framework;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT;\n\nimport android.content.Intent;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.SubPickerActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SwitchPreference;\n\npublic class OtherSettings extends SettingsPreferenceFragment {\n\n    Preference mCleanShareApps;\n    Preference mCleanOpenApps;\n    SwitchPreference mAppLinkVerify;\n    SwitchPreference mUseOriginalAnim;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.framework_other;\n    }\n\n    @Override\n    public void initPrefs() {\n        mCleanShareApps = findPreference(\"prefs_key_system_framework_clean_share_apps\");\n        mCleanOpenApps = findPreference(\"prefs_key_system_framework_clean_open_apps\");\n        mAppLinkVerify = findPreference(\"prefs_key_system_framework_disable_app_link_verify\");\n        mAppLinkVerify.setVisible(!isAndroidR());\n        mAppLinkVerify.setOnPreferenceChangeListener((preference, o) -> true);\n        mUseOriginalAnim = findPreference(\"prefs_key_system_framework_other_use_original_animation\");\n        mUseOriginalAnim.setVisible(!isAndroidT());\n\n        mCleanShareApps.setOnPreferenceClickListener(preference -> {\n            Intent intent = new Intent(getActivity(), SubPickerActivity.class);\n            intent.putExtra(\"is_app_selector\", false);\n            intent.putExtra(\"key\", preference.getKey());\n            startActivity(intent);\n            return true;\n        });\n\n        mCleanOpenApps.setOnPreferenceClickListener(preference -> {\n            Intent intent = new Intent(getActivity(), SubPickerActivity.class);\n            intent.putExtra(\"is_app_selector\", false);\n            intent.putExtra(\"key\", preference.getKey());\n            startActivity(intent);\n            return true;\n        });\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/framework/VolumeSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.framework;\n\nimport android.provider.Settings;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.DropDownPreference;\n\npublic class VolumeSettings extends SettingsPreferenceFragment {\n    DropDownPreference mDefaultVolumeStream;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.framework_volume;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartSystemDialog();\n    }\n\n    @Override\n    public void initPrefs() {\n        mDefaultVolumeStream = findPreference(\"prefs_key_system_framework_default_volume_stream\");\n\n        mDefaultVolumeStream.setOnPreferenceChangeListener((preference, o) -> {\n            Settings.Secure.putInt(getContext().getContentResolver(), \"system_framework_default_volume_stream\", Integer.parseInt((String) o));\n            return true;\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeDockSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.os.Build;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class HomeDockSettings extends SettingsPreferenceFragment {\n\n    SwitchPreference mDisableRecentIcon;\n    SwitchPreference mDockBackground;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.home_dock;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mDisableRecentIcon = findPreference(\"prefs_key_home_dock_disable_recents_icon\");\n        mDockBackground = findPreference(\"prefs_key_home_dock_bg_custom_enable\");\n        mDisableRecentIcon.setVisible(isPad());\n        mDockBackground.setVisible(isMoreAndroidVersion(Build.VERSION_CODES.S));\n        mDockBackground.setEnabled(mDockBackground.isVisible());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeDrawerSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class HomeDrawerSettings extends SettingsPreferenceFragment {\n\n    SwitchPreference mAllAppsContainerViewBlur;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.home_drawer;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mAllAppsContainerViewBlur = findPreference(\"prefs_key_home_drawer_blur\");\n        mAllAppsContainerViewBlur.setVisible(!isAndroidR());\n\n        mAllAppsContainerViewBlur.setOnPreferenceChangeListener((preference, o) -> true);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeFolderSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.os.Build;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SeekBarPreferenceEx;\nimport moralnorm.preference.SwitchPreference;\n\npublic class HomeFolderSettings extends SettingsPreferenceFragment {\n\n    DropDownPreference mFolderShade;\n    SeekBarPreferenceEx mFolderShadeLevel;\n\n    SeekBarPreferenceEx mFolderColumns;\n    SwitchPreference mFolderWidth;\n    SwitchPreference mFolderSpace;\n    Preference mSmallFolderIconBackgroundCustom;\n    Preference mSmallFolderIconBackgroundCustom1;\n    Preference mSmallFolderIconBackgroundCustom2;\n    Preference mSmallFolderIconBackgroundCustom3;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.home_folder;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mFolderShade = findPreference(\"prefs_key_home_folder_shade\");\n        mFolderShadeLevel = findPreference(\"prefs_key_home_folder_shade_level\");\n\n        mFolderColumns = findPreference(\"prefs_key_home_folder_columns\");\n        mFolderWidth = findPreference(\"prefs_key_home_folder_width\");\n        mFolderSpace = findPreference(\"prefs_key_home_folder_space\");\n        mSmallFolderIconBackgroundCustom = findPreference(\"prefs_key_home_small_folder_icon_bg_custom\");\n        if (mSmallFolderIconBackgroundCustom != null) {\n            mSmallFolderIconBackgroundCustom.setVisible(isMoreAndroidVersion(Build.VERSION_CODES.S));\n            mSmallFolderIconBackgroundCustom.setEnabled(mSmallFolderIconBackgroundCustom.isVisible());\n        }\n\n        mSmallFolderIconBackgroundCustom1 = findPreference(\"prefs_key_home_big_folder_icon_bg_2x1\");\n        if (mSmallFolderIconBackgroundCustom1 != null) {\n            mSmallFolderIconBackgroundCustom1.setVisible(isMoreAndroidVersion(Build.VERSION_CODES.S));\n            mSmallFolderIconBackgroundCustom1.setEnabled(mSmallFolderIconBackgroundCustom1.isVisible());\n        }\n        mSmallFolderIconBackgroundCustom2 = findPreference(\"prefs_key_home_big_folder_icon_bg_1x2\");\n        if (mSmallFolderIconBackgroundCustom2 != null) {\n            mSmallFolderIconBackgroundCustom2.setVisible(isMoreAndroidVersion(Build.VERSION_CODES.S));\n            mSmallFolderIconBackgroundCustom2.setEnabled(mSmallFolderIconBackgroundCustom2.isVisible());\n        }\n        mSmallFolderIconBackgroundCustom3 = findPreference(\"prefs_key_home_big_folder_icon_bg\");\n        if (mSmallFolderIconBackgroundCustom3 != null) {\n            mSmallFolderIconBackgroundCustom3.setVisible(isMoreAndroidVersion(Build.VERSION_CODES.S));\n            mSmallFolderIconBackgroundCustom3.setEnabled(mSmallFolderIconBackgroundCustom3.isVisible());\n        }\n\n        setBigFolderTextForPad();\n        setFolderShadeLevelEnable(Integer.parseInt(PrefsUtils.mSharedPreferences.getString(\"prefs_key_home_folder_shade\", \"0\")));\n        setFolderWidthEnable(PrefsUtils.mSharedPreferences.getInt(mFolderColumns.getKey(), 3));\n        setFolderSpaceEnable(PrefsUtils.mSharedPreferences.getInt(mFolderColumns.getKey(), 3));\n\n        mFolderShade.setOnPreferenceChangeListener((preference, o) -> {\n            setFolderShadeLevelEnable(Integer.parseInt((String) o));\n            return true;\n        });\n\n        mFolderColumns.setOnPreferenceChangeListener(((preference, o) -> {\n            setFolderWidthEnable((Integer) o);\n            setFolderSpaceEnable((Integer) o);\n            return true;\n        }));\n    }\n\n    private void setBigFolderTextForPad(){\n        if (isPad()){\n            mSmallFolderIconBackgroundCustom1.setTitle(R.string.home_big_folder_icon_bg_2x1_n);\n            mSmallFolderIconBackgroundCustom2.setTitle(R.string.home_big_folder_icon_bg_1x2_n);\n            mSmallFolderIconBackgroundCustom3.setTitle(R.string.home_big_folder_icon_bg_n);\n        }\n    }\n\n    private void setFolderShadeLevelEnable(int i) {\n        boolean isEnable = i != 0;\n        mFolderShadeLevel.setVisible(isEnable);\n        mFolderShadeLevel.setEnabled(isEnable);\n    }\n\n    private void setFolderWidthEnable(int columns) {\n        boolean isEnable = columns > 1;\n        mFolderWidth.setVisible(isEnable);\n        mFolderWidth.setEnabled(isEnable);\n    }\n\n    private void setFolderSpaceEnable(int columns) {\n        boolean isEnable = columns > 3;\n        mFolderSpace.setVisible(isEnable);\n        mFolderSpace.setEnabled(isEnable);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeGestureSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeGestureSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_gesture;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeLayoutSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeLayoutSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_layout;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeOtherSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class HomeOtherSettings extends SettingsPreferenceFragment {\n\n    SwitchPreference mFixAndroidRS;\n    SwitchPreference mEnableMoreSettings;\n    SwitchPreference mEnableFold;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.home_other;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mFixAndroidRS = findPreference(\"prefs_key_home_other_fix_android_r_s\");\n        mEnableMoreSettings = findPreference(\"prefs_key_home_other_mi_pad_enable_more_setting\");\n        mEnableFold = findPreference(\"prefs_key_personal_assistant_overlap_mode\");\n\n        mFixAndroidRS.setVisible(!isAndroidT());\n        mEnableMoreSettings.setVisible(isPad());\n        mEnableFold.setVisible(!isAndroidR());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeRecentSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class HomeRecentSettings extends SettingsPreferenceFragment {\n\n    SwitchPreference mShowMenInfo;\n    SwitchPreference mHideCleanIcon;\n    SwitchPreference mNotHideCleanIcon;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.home_recent;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mShowMenInfo = findPreference(\"prefs_key_home_recent_show_memory_info\");\n        mHideCleanIcon = findPreference(\"prefs_key_home_recent_hide_clean_up\");\n        mNotHideCleanIcon = findPreference(\"prefs_key_always_show_clean_up\");\n        mShowMenInfo.setVisible(isPad());\n\n        mHideCleanIcon.setOnPreferenceChangeListener((preference, o) -> {\n            if (!(boolean) o) {\n                mNotHideCleanIcon.setChecked(false);\n            }\n            return true;\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeTitleAnimSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnimSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeTitleSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class HomeTitleSettings extends SettingsPreferenceFragment {\n\n    SwitchPreference mDisableMonoChrome;\n    SwitchPreference mDisableMonetColor;\n    SwitchPreference mDisableHideTheme;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mDisableMonoChrome = findPreference(\"prefs_key_home_other_icon_mono_chrome\");\n        mDisableMonoChrome.setVisible(isMoreAndroidVersion(33));\n        mDisableMonoChrome.setOnPreferenceChangeListener((preference, o) -> true);\n        mDisableMonetColor = findPreference(\"prefs_key_home_other_icon_monet_color\");\n        mDisableMonetColor.setVisible(isMoreAndroidVersion(33));\n        mDisableMonetColor.setOnPreferenceChangeListener((preference, o) -> true);\n        mDisableHideTheme = findPreference(\"prefs_key_home_title_disable_hide_theme\");\n        mDisableHideTheme.setVisible(isPad());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/HomeWidgetSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeWidgetSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_widget;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim1Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim1Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_1;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim2Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim2Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_2;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim3Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim3Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_3;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim4Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim4Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_4;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim5Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim5Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_5;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim6Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim6Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_6;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim7Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim7Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_7;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/home/anim/HomeTitleAnim8Settings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.home.anim;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class HomeTitleAnim8Settings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.home_title_anim_8;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.home),\n            \"com.miui.home\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/settings/SafeModeFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.settings;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class SafeModeFragment extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() { return R.xml.settings_safe_mode; }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/sub/AppPicker.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.sub;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageManager;\nimport android.content.pm.ResolveInfo;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.CheckBox;\nimport android.widget.ProgressBar;\n\nimport androidx.fragment.app.Fragment;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.callback.IAppSelectCallback;\nimport com.sevtinge.cemiuiler.data.AppData;\nimport com.sevtinge.cemiuiler.data.adapter.AppDataAdapter;\nimport com.sevtinge.cemiuiler.provider.SharedPrefsProvider;\nimport com.sevtinge.cemiuiler.utils.BitmapUtils;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport java.util.ArrayList;\nimport java.util.LinkedHashSet;\nimport java.util.List;\nimport java.util.Set;\n\npublic class AppPicker extends Fragment {\n\n    private Bundle args;\n    private String key = null;\n    private boolean appSelector;\n    private View mRootView;\n    private ProgressBar mAmProgress;\n    private RecyclerView mAppListRv;\n    private AppDataAdapter mAppListAdapter;\n    private List<AppData> appDataList;\n    public Handler mHandler;\n    private Set<String> selectedApps;\n    private IAppSelectCallback mAppSelectCallback;\n    public void setAppSelectCallback(IAppSelectCallback callback) {\n        mAppSelectCallback = callback;\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        mRootView = inflater.inflate(R.layout.fragment_app_picker, container, false);\n        initView();\n        return mRootView;\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        requireActivity().setTitle(R.string.array_global_actions_launch_choose);\n        args = requireActivity().getIntent().getExtras();\n        assert args != null;\n        appSelector = args.getBoolean(\"is_app_selector\");\n        if (appSelector) {\n            key = args.getString(\"app_selector_key\");\n        } else {\n            key = args.getString(\"key\");\n        }\n        initData();\n    }\n\n    private void initView() {\n        mAmProgress = mRootView.findViewById(R.id.am_progressBar);\n        mAppListRv = mRootView.findViewById(R.id.app_list_rv);\n        mAppListRv.setLayoutManager(new LinearLayoutManager(getContext()));\n        mAppListAdapter = new AppDataAdapter(getActivity(), key, appSelector ? 1 : 0);\n        mHandler = new Handler();\n\n        mAppListAdapter.setOnItemClickListener((view, position, appData, isCheck) -> {\n            if (appSelector) {\n                mAppSelectCallback.sendMsgToActivity(BitmapUtils.Bitmap2Bytes(appData.icon),\n                    appData.label,\n                    appData.packageName,\n                    appData.versionName + \"(\" + appData.versionCode + \")\",\n                    appData.activityName);\n                requireActivity().finish();\n            } else {\n                CheckBox checkBox = view.findViewById(android.R.id.checkbox);\n//                String key = \"prefs_key_system_framework_clean_share_apps\";\n                selectedApps = new LinkedHashSet<>(PrefsUtils.mSharedPreferences.getStringSet(key, new LinkedHashSet<>()));\n                if (checkBox.isChecked()) {\n                    checkBox.setChecked(false);\n                    selectedApps.remove(appData.packageName);\n                } else {\n                    checkBox.setChecked(true);\n                    selectedApps.add(appData.packageName);\n                }\n                PrefsUtils.mSharedPreferences.edit().putStringSet(key, selectedApps).apply();\n            }\n        });\n    }\n\n    private void initData() {\n        new Thread(new Runnable() {\n            @Override\n            public void run() {\n                appDataList = getAppInfo(getContext());\n                mHandler.post(new Runnable() {\n                    @Override\n                    public void run() {\n                        mAppListRv.setAdapter(mAppListAdapter);\n                        mAppListAdapter.setData(appDataList);\n                        mAmProgress.setVisibility(View.INVISIBLE);\n                        mAppListRv.setVisibility(View.VISIBLE);\n                    }\n                });\n            }\n        }).start();\n    }\n\n\n    /**\n     * 该方法提供了用于判断一个程序是系统程序还是用户程序的功能。\n     *\n     * @param applicationInfo\n     * @return true 用户自己安装的软件\n     * fasle  系统软件.\n     */\n    public static boolean filterApp(ApplicationInfo applicationInfo) {\n        if ((applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {\n            return true;\n        } else if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {\n            return true;\n        }\n        return false;\n    }\n\n\n    public void getOpenWithApps(Context context, List<AppData> appInfoList) {\n        PackageManager pm = context.getPackageManager();\n\n        Intent mainIntent = new Intent();\n        mainIntent.setAction(Intent.ACTION_VIEW);\n        mainIntent.setDataAndType(Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/test/5\"), \"*/*\");\n        mainIntent.putExtra(\"Cemiuiler\", true);\n        List<ResolveInfo> packs = pm.queryIntentActivities(mainIntent, PackageManager.MATCH_ALL | PackageManager.MATCH_DISABLED_COMPONENTS);\n\n        mainIntent = new Intent();\n        mainIntent.setAction(Intent.ACTION_VIEW);\n        mainIntent.setData(Uri.parse(\"https://home.miui.com/\"));\n        mainIntent.putExtra(\"Cemiuiler\", true);\n        List<ResolveInfo> packs2 = pm.queryIntentActivities(mainIntent, PackageManager.MATCH_ALL);\n\n        mainIntent = new Intent();\n        mainIntent.setAction(Intent.ACTION_VIEW);\n        mainIntent.setData(Uri.parse(\"vnd.youtube:n9AcG0glVu4\"));\n        mainIntent.putExtra(\"Cemiuiler\", true);\n        List<ResolveInfo> packs3 = pm.queryIntentActivities(mainIntent, PackageManager.MATCH_ALL);\n\n        mainIntent = new Intent();\n        mainIntent.setAction(Intent.ACTION_SEND);\n        mainIntent.putExtra(Intent.EXTRA_TEXT, \"Cemiuiler is the best!\");\n        mainIntent.setType(\"*/*\");\n        List<ResolveInfo> packs4 = pm.queryIntentActivities(mainIntent, PackageManager.MATCH_ALL);\n\n        packs.addAll(packs2);\n        packs.addAll(packs3);\n        packs.addAll(packs4);\n\n        AppData app;\n        for (ResolveInfo pack : packs)\n            try {\n                boolean exists = false;\n                for (AppData openWithApp : appInfoList) {\n                    if (openWithApp.packageName.equals(pack.activityInfo.applicationInfo.packageName)) {\n                        exists = true;\n                        break;\n                    }\n                }\n                if (exists) {\n                    continue;\n                }\n                app = new AppData();\n                app.icon = BitmapUtils.drawableToBitmap(pack.activityInfo.applicationInfo.loadIcon(pm));\n                app.packageName = pack.activityInfo.applicationInfo.packageName;\n                app.enabled = pack.activityInfo.applicationInfo.enabled;\n                app.label = pack.activityInfo.applicationInfo.loadLabel(pm).toString();\n                appInfoList.add(app);\n            } catch (Throwable e) {\n                e.printStackTrace();\n            }\n    }\n\n\n    public List<AppData> getAppInfo(Context context) {\n        List<AppData> appDataList = new ArrayList<>();\n        if (appSelector) {\n            getAppSelector(context, appDataList);\n        } else {\n            getOpenWithApps(context, appDataList);\n        }\n        return appDataList;\n    }\n\n    public void getAppSelector(Context context, List<AppData> appInfoList) {\n        PackageManager packageManager = context.getPackageManager();\n        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);\n        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);\n        List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(mainIntent, 0);\n\n        AppData appData;\n        for (ResolveInfo resolveInfo : resolveInfos) {\n            appData = new AppData();\n            appData.icon = BitmapUtils.drawableToBitmap(resolveInfo.loadIcon(packageManager));\n            appData.label = resolveInfo.loadLabel(packageManager).toString();\n            appData.packageName = resolveInfo.activityInfo.packageName;\n            appData.activityName = resolveInfo.activityInfo.name;\n            appData.enabled = resolveInfo.activityInfo.enabled;\n            appInfoList.add(appData);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/sub/CustomBackgroundSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.sub;\n\nimport android.os.Bundle;\nimport android.widget.Toast;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.ColorPickerPreference;\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SeekBarPreference;\nimport moralnorm.preference.SwitchPreference;\n\npublic class CustomBackgroundSettings extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener {\n\n    private String mKey = \"\";\n    private String mCustomBackgroundEnabledKey;\n    private String mColorKey;\n    private String mCornerRadiusKey;\n\n    private String mBlurEnabledKey;\n    private String mBlurRadiusKey;\n\n    private SwitchPreference mCustomEnabledPreference;\n\n    private ColorPickerPreference mColorPickerPreference;\n    private SeekBarPreference mCornerRadiusPreference;\n\n    private SwitchPreference mBlurEnabledPreference;\n    private SeekBarPreference mBlurRadiusPreference;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.custom_background;\n    }\n\n    @Override\n    public void initPrefs() {\n        Bundle args = getArguments();\n\n        if (args != null) {\n            mKey = args.getString(\"key\");\n\n            mCustomBackgroundEnabledKey = mKey + \"_custom_enable\";\n\n            mColorKey = mKey + \"_color\";\n            mCornerRadiusKey = mKey + \"_corner_radius\";\n\n            mBlurEnabledKey = mKey + \"_blur_enabled\";\n            mBlurRadiusKey = mKey + \"_blur_radius\";\n        } else {\n            finish();\n        }\n\n        mCustomEnabledPreference = findPreference(\"prefs_key_custom_background_enabled\");\n\n        mColorPickerPreference = findPreference(\"prefs_key_custom_background_color\");\n        mCornerRadiusPreference = findPreference(\"prefs_key_custom_background_corner_radius\");\n\n        mBlurEnabledPreference = findPreference(\"prefs_key_custom_background_blur_enabled\");\n        mBlurRadiusPreference = findPreference(\"prefs_key_custom_background_blur_radius\");\n\n        loadData();\n\n        mCustomEnabledPreference.setOnPreferenceChangeListener(this);\n\n        mColorPickerPreference.setOnPreferenceChangeListener(this);\n        mCornerRadiusPreference.setOnPreferenceChangeListener(this);\n\n        mBlurEnabledPreference.setOnPreferenceChangeListener(this);\n        mBlurRadiusPreference.setOnPreferenceChangeListener(this);\n    }\n\n\n    private void loadData() {\n        mCustomEnabledPreference.setChecked(isCustomEnabled());\n        mColorPickerPreference.setColor(getColor(-1));\n        mCornerRadiusPreference.setValue(getSeekBarValue(mCornerRadiusKey, 18));\n        mBlurEnabledPreference.setChecked(isBackgroundBlurEnabled());\n        mBlurRadiusPreference.setValue(getSeekBarValue(mBlurRadiusKey, 60));\n    }\n\n    private boolean isCustomEnabled() {\n        return hasKey(mCustomBackgroundEnabledKey) && PrefsUtils.getSharedBoolPrefs(getContext(), mCustomBackgroundEnabledKey, false);\n    }\n\n    private void setColor() {\n        mColorPickerPreference.setColor(getColor(2113929215));\n    }\n\n    private int getColor(int defValue) {\n        return hasKey(mColorKey) ? PrefsUtils.getSharedIntPrefs(getContext(), mColorKey, defValue) : defValue;\n    }\n\n    private boolean isBackgroundBlurEnabled() {\n        return hasKey(mBlurEnabledKey) && PrefsUtils.getSharedBoolPrefs(getContext(), mBlurEnabledKey, false);\n    }\n\n    private int getSeekBarValue(String key, int defValue) {\n        return hasKey(key) ? PrefsUtils.getSharedIntPrefs(getContext(), key, defValue) : defValue;\n    }\n\n    @Override\n    public boolean onPreferenceChange(Preference preference, Object o) {\n        if (preference == mCustomEnabledPreference) {\n            setCustomEnable((Boolean) o);\n        } else if (preference == mColorPickerPreference) {\n            setBackgroundColor((int) o);\n        } else if (preference == mCornerRadiusPreference) {\n            setBackgroundCornerRadius((int) o);\n        } else if (preference == mBlurEnabledPreference) {\n            setBlurEnabled((Boolean) o);\n        } else if (preference == mBlurRadiusPreference) {\n            setBackgroundBlurRadius((int) o);\n        }\n        return false;\n    }\n\n    private void setCustomEnable(boolean isCustomEnabled) {\n        mCustomEnabledPreference.setChecked(isCustomEnabled);\n        PrefsUtils.mSharedPreferences.edit().putBoolean(mCustomBackgroundEnabledKey, isCustomEnabled).apply();\n    }\n\n    private void setBackgroundColor(int value) {\n        mColorPickerPreference.setColor(value);\n        PrefsUtils.mSharedPreferences.edit().putInt(mColorKey, value).apply();\n    }\n\n    private void setBackgroundCornerRadius(int value) {\n        mCornerRadiusPreference.setValue(value);\n        PrefsUtils.mSharedPreferences.edit().putInt(mCornerRadiusKey, value).apply();\n    }\n\n    private void setBlurEnabled(boolean isBlurEnabled) {\n        mBlurEnabledPreference.setChecked(isBlurEnabled);\n        PrefsUtils.mSharedPreferences.edit().putBoolean(mBlurEnabledKey, isBlurEnabled).apply();\n    }\n\n    private void setBackgroundBlurRadius(int value) {\n        mBlurRadiusPreference.setValue(value);\n        PrefsUtils.mSharedPreferences.edit().putInt(mBlurRadiusKey, value).apply();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/sub/MultiActionSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.sub;\n\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageManager;\nimport android.os.Bundle;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.SubPickerActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.RadioButtonPreference;\n\npublic class MultiActionSettings extends SettingsPreferenceFragment {\n\n    Bundle args;\n    String mKey = null;\n    String mActionKey;\n    String mAppValue;\n\n    RadioButtonPreference mClearMemory;\n    RadioButtonPreference mInvertColors;\n    RadioButtonPreference mNoAction;\n    RadioButtonPreference mOpenNotificationCenter;\n    RadioButtonPreference mScreenLock;\n    RadioButtonPreference mScreenSleep;\n    RadioButtonPreference mScreenCapture;\n    RadioButtonPreference mOpenPowerMenu;\n    RadioButtonPreference mScreenRecents;\n    RadioButtonPreference mVolumeDialog;\n    RadioButtonPreference mOpenApp;\n    Preference mAppSelector;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.home_multi_action;\n    }\n\n    @Override\n    public void initPrefs() {\n        args = getArguments();\n        mKey = args.getString(\"key\");\n        mActionKey = mKey + \"_action\";\n\n        mNoAction = findPreference(\"prefs_key_no_action\");\n        mOpenNotificationCenter = findPreference(\"prefs_key_open_notification_center\");\n        mScreenLock = findPreference(\"prefs_key_screen_lock\");\n        mScreenSleep = findPreference(\"prefs_key_screen_sleep\");\n        mScreenCapture = findPreference(\"prefs_key_screen_capture\");\n        mOpenPowerMenu = findPreference(\"prefs_key_open_powermenu\");\n        mClearMemory = findPreference(\"prefs_key_clear_memory\");\n        mInvertColors = findPreference(\"prefs_key_invert_colors\");\n        mScreenRecents = findPreference(\"prefs_key_screen_recents\");\n        mVolumeDialog = findPreference(\"prefs_key_volume_dialog\");\n        mOpenApp = findPreference(\"prefs_key_open_app\");\n        mAppSelector = findPreference(\"prefs_key_open_app_selector\");\n        updateAction();\n    }\n\n    private void updateAction() {\n        int value = hasKey(mActionKey) ? PrefsUtils.getSharedIntPrefs(getContext(), mActionKey, 0) : 0;\n        switch (value) {\n            case 0 -> mNoAction.setChecked(true);\n            case 1 -> mOpenNotificationCenter.setChecked(true);\n            case 2 -> mClearMemory.setChecked(true);\n            case 3 -> mInvertColors.setChecked(true);\n            case 4 -> mScreenLock.setChecked(true);\n            case 5 -> mScreenSleep.setChecked(true);\n            case 6 -> mScreenCapture.setChecked(true);\n            case 7 -> mScreenRecents.setChecked(true);\n            case 8 -> mVolumeDialog.setChecked(true);\n            case 12 -> mOpenPowerMenu.setChecked(true);\n            case 13 -> {\n                mOpenApp.setChecked(true);\n                updateAppSelectorTitle();\n            }\n        }\n    }\n\n    @Override\n    public boolean onPreferenceTreeClick(Preference preference) {\n        if (preference != mAppSelector) {\n            editActionIntSharedPrefs(getAction(preference));\n        } else {\n            Intent intent = new Intent(getActivity(), SubPickerActivity.class);\n            intent.putExtra(\"is_app_selector\", true);\n            startActivityForResult(intent, 0);\n        }\n        return true;\n    }\n\n    private int getAction(Preference preference) {\n        if (preference == mOpenNotificationCenter) {\n            return 1;\n        } else if (preference == mClearMemory) {\n            return 2;\n        } else if (preference == mInvertColors) {\n            return 3;\n        } else if (preference == mScreenLock) {\n            return 4;\n        } else if (preference == mScreenSleep) {\n            return 5;\n        } else if (preference == mScreenCapture) {\n            return 6;\n        } else if (preference == mScreenRecents) {\n            return 7;\n        } else if (preference == mVolumeDialog) {\n            return 8;\n        } else if (preference == mOpenPowerMenu) {\n            return 12;\n        } else if (preference == mOpenApp) {\n            return 13;\n        } else {\n            return 0;\n        }\n    }\n\n    private void editActionIntSharedPrefs(int value) {\n        PrefsUtils.mSharedPreferences.edit().putInt(mActionKey, value).apply();\n    }\n\n    public void updateAppSelectorTitle() {\n        if (hasKey(mKey + \"_app\")) {\n            String title = getAppName(getContext(), PrefsUtils.mSharedPreferences.getString(mKey + \"_app\", \"\"));\n            mAppSelector.setTitle(title);\n        }\n    }\n\n    public static String getAppName(Context context, String pkgActName) {\n        return getAppName(context, pkgActName, false);\n    }\n\n    public static String getAppName(Context context, String pkgActName, boolean forcePkg) {\n        PackageManager pm = context.getPackageManager();\n        String notSelected = \"None\";\n        String[] pkgActArray = pkgActName.split(\"\\\\|\");\n        ApplicationInfo ai;\n\n        if (!pkgActName.equals(notSelected)) {\n            if (pkgActArray.length >= 1 && pkgActArray[0] != null) try {\n                if (!forcePkg && pkgActArray.length >= 2 && pkgActArray[1] != null && !\"\".equals(pkgActArray[1].trim())) {\n                    return pm.getActivityInfo(new ComponentName(pkgActArray[0], pkgActArray[1]), 0).loadLabel(pm).toString();\n                } else if (!\"\".equals(pkgActArray[0].trim())) {\n                    ai = pm.getApplicationInfo(pkgActArray[0], 0);\n                    return pm.getApplicationLabel(ai).toString();\n                }\n            } catch (Throwable e) {\n                e.printStackTrace();\n            }\n        }\n        return null;\n    }\n\n    @Override\n    public void onActivityResult(int requestCode, int resultCode, Intent data) {\n        super.onActivityResult(requestCode, resultCode, data);\n        if (resultCode == 1) {\n            String mAppPackageName = data.getStringExtra(\"appPackageName\");\n            String mAppActivityName = data.getStringExtra(\"appActivityName\");\n            PrefsUtils.mSharedPreferences.edit().putString(mKey + \"_app\", mAppPackageName + \"|\" + mAppActivityName).apply();\n            updateAppSelectorTitle();\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/ControlCenterSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidS;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidSv2;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.provider.Settings;\nimport android.view.View;\nimport android.widget.SeekBar;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils;\n\nimport miui.telephony.TelephonyManager;\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.SeekBarPreferenceEx;\nimport moralnorm.preference.SwitchPreference;\n\npublic class ControlCenterSettings extends SettingsPreferenceFragment {\n\n    SwitchPreference mFixMediaPanel;\n    SwitchPreference mNotice;\n    SwitchPreference mNoticex;\n    SeekBarPreferenceEx mNewCCGrid;\n    SwitchPreference mNewCCGridRect;\n    SwitchPreference mFiveG;\n    DropDownPreference mBluetoothSytle;\n\n    // 临时的，旧控制中心\n    SwitchPreference mOldCCGrid;\n    SwitchPreference mOldCCGrid1;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_control_center;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity) getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mFixMediaPanel = findPreference(\"prefs_key_system_ui_control_center_fix_media_control_panel\");\n        mNewCCGrid = findPreference(\"prefs_key_system_control_center_cc_rows\");\n        mNewCCGridRect = findPreference(\"prefs_key_system_ui_control_center_rounded_rect\");\n        mNotice = findPreference(\"prefs_key_n_enable\");\n        mNoticex = findPreference(\"prefs_key_n_enable_fix\");\n        mBluetoothSytle = findPreference(\"prefs_key_system_ui_control_center_cc_bluetooth_tile_style\");\n        mFiveG = findPreference(\"prefs_key_system_control_center_5g_tile\");\n\n        mFixMediaPanel.setVisible(isAndroidS() || isAndroidSv2());\n        mNewCCGrid.setVisible(!isAndroidR());\n        mNewCCGridRect.setVisible(!isAndroidR());\n        mNotice.setVisible(!isAndroidR());\n        mNoticex.setVisible(isMoreAndroidVersion(33));\n        mBluetoothSytle.setVisible(!isAndroidR());\n        mFiveG.setVisible(TelephonyManager.getDefault().isFiveGCapable());\n\n        mOldCCGrid = findPreference(\"prefs_key_system_control_center_old_enable\");\n        mOldCCGrid1 = findPreference(\"prefs_key_system_control_center_old_enable_1\");\n\n        mOldCCGrid.setVisible(isMoreAndroidVersion(33));\n        mOldCCGrid1.setVisible(!isMoreAndroidVersion(33));\n\n        ((SeekBarPreferenceEx) findPreference(\"prefs_key_system_control_center_old_qs_grid_columns\")).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {\n            @Override\n            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {\n                if (!fromUser) return;\n                if (progress < 3) progress = 5;\n                try {\n                    Settings.Secure.putInt(requireActivity().getContentResolver(), \"sysui_qqs_count\", progress);\n                } catch (Throwable t) {\n                    AndroidLogUtils.LogD(\"SeekBarPreferenceEx\", \"onProgressChanged -> system_control_center_old_qs_grid_columns\", t);\n                }\n            }\n\n            @Override\n            public void onStartTrackingTouch(SeekBar seekBar) {\n            }\n\n            @Override\n            public void onStopTrackingTouch(SeekBar seekBar) {\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/LockScreenSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.api.LinQiqiApisKt.isDeviceEncrypted;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;\n\nimport android.os.Build;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport moralnorm.preference.SeekBarPreferenceEx;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SwitchPreference;\n\npublic class LockScreenSettings extends SettingsPreferenceFragment {\n    SwitchPreference mBlurButton; // 锁屏按钮背景模糊\n    SwitchPreference mForceSystemFonts; // 时钟使用系统字体\n    SwitchPreference mPasswordFree; // 开机免输入密码\n    SeekBarPreferenceEx mChangingCVTime; // 充电信息显示刷新间隔\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_lock_screen;\n    }\n\n    @Override\n    public void initPrefs() {\n        mBlurButton = findPreference(\"prefs_key_system_ui_lock_screen_blur_button\");\n        mForceSystemFonts = findPreference(\"prefs_key_system_ui_lock_screen_force_system_fonts\");\n        mPasswordFree = findPreference(\"prefs_key_system_ui_lock_screen_password_free\");\n        mChangingCVTime = findPreference(\"prefs_key_system_ui_lock_screen_show_spacing\");\n\n        mBlurButton.setVisible(!isAndroidR());\n        mForceSystemFonts.setVisible(!isAndroidR());\n        mChangingCVTime.setVisible(isMoreAndroidVersion(Build.VERSION_CODES.TIRAMISU));\n\n        if (isDeviceEncrypted(getContext())) {\n            mPasswordFree.setChecked(false);\n            mPasswordFree.setEnabled(false);\n            mPasswordFree.setSummary(R.string.system_ui_lock_screen_password_free_tip);\n        }\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/NavigationSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class NavigationSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_navigation;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/StatusBarSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.Preference;\n\npublic class StatusBarSettings extends SettingsPreferenceFragment {\n\n    Preference mDeviceStatus; // 硬件指示器\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mDeviceStatus = findPreference(\"prefs_key_system_ui_status_bar_device\");\n        mDeviceStatus.setVisible(!isAndroidR());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/SystemUIOtherSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.PreferenceCategory;\n\npublic class SystemUIOtherSettings extends SettingsPreferenceFragment {\n\n    PreferenceCategory mMonetOverlay;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_other;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mMonetOverlay = findPreference(\"prefs_key_system_ui_monet\");\n        mMonetOverlay.setVisible(!isAndroidR());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/BatteryDetailIndicatorSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class BatteryDetailIndicatorSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar_hardware_detail_indicator;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/BatteryIndicatorSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport android.content.Intent;\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.ColorPickerPreference;\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.Preference;\n\npublic class BatteryIndicatorSettings extends SettingsPreferenceFragment {\n\n    DropDownPreference mBatteryIndicatorColor;\n    ColorPickerPreference mBatteryIndicatorFullPower;\n    ColorPickerPreference mBatteryIndicatorLowPower;\n    ColorPickerPreference mBatteryIndicatorPowerSaving;\n    ColorPickerPreference mBatteryIndicatorPowerCharging;\n    Preference mBatteryIndicatorTest;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar_battery_indicator;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n\n        mBatteryIndicatorColor = findPreference(\"prefs_key_system_ui_status_bar_battery_indicator_color\");\n        mBatteryIndicatorFullPower = findPreference(\"prefs_key_system_ui_status_bar_battery_indicator_color_full_power\");\n        mBatteryIndicatorLowPower = findPreference(\"prefs_key_system_ui_status_bar_battery_indicator_color_low_power\");\n        mBatteryIndicatorPowerSaving = findPreference(\"prefs_key_system_ui_status_bar_battery_indicator_color_power_saving\");\n        mBatteryIndicatorPowerCharging = findPreference(\"prefs_key_system_ui_status_bar_battery_indicator_color_power_charging\");\n\n        showBatteryIndicatorColor(Integer.parseInt(PrefsUtils.getSharedStringPrefs(getActivity(), mBatteryIndicatorColor.getKey(), \"0\")));\n\n        mBatteryIndicatorColor.setOnPreferenceChangeListener((preference, o) -> {\n            showBatteryIndicatorColor(Integer.parseInt((String) o));\n            return true;\n        });\n\n\n        mBatteryIndicatorTest = findPreference(\"prefs_key_system_ui_status_bar_battery_indicator_test\");\n        mBatteryIndicatorTest.setOnPreferenceClickListener(preference -> {\n            requireActivity().sendBroadcast(new Intent(\"moralnorm.module.BatteryIndicatorTest\"));\n            return true;\n        });\n    }\n\n    private void showBatteryIndicatorColor(int vale) {\n        boolean showBatteryIndicatorColor = vale != 2;\n        mBatteryIndicatorFullPower.setVisible(showBatteryIndicatorColor);\n        mBatteryIndicatorLowPower.setVisible(showBatteryIndicatorColor);\n        mBatteryIndicatorPowerSaving.setVisible(showBatteryIndicatorColor);\n        mBatteryIndicatorPowerCharging.setVisible(showBatteryIndicatorColor);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/BatteryStyleSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class BatteryStyleSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() { return R.xml.system_ui_status_bar_battery_styles; }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/ClockIndicatorSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.PreferenceCategory;\n\npublic class ClockIndicatorSettings extends SettingsPreferenceFragment\n    implements Preference.OnPreferenceChangeListener {\n\n    DropDownPreference mClockModePreference;\n    PreferenceCategory mDefault;\n    PreferenceCategory mGeek;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar_clock_indicator;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        int mClockMode = Integer.parseInt(PrefsUtils.getSharedStringPrefs(getContext(), \"prefs_key_system_ui_statusbar_clock_mode\", \"0\"));\n        mClockModePreference = findPreference(\"prefs_key_system_ui_statusbar_clock_mode\");\n        mDefault = findPreference(\"prefs_key_system_ui_statusbar_clock_default\");\n        mGeek = findPreference(\"prefs_key_system_ui_statusbar_clock_geek\");\n\n        setClockMode(mClockMode);\n        mClockModePreference.setOnPreferenceChangeListener(this);\n\n    }\n\n    @Override\n    public boolean onPreferenceChange(Preference preference, Object o) {\n        if (preference == mClockModePreference) {\n            setClockMode(Integer.parseInt((String) o));\n        }\n        return true;\n    }\n\n    private void setClockMode(int mode) {\n        mDefault.setVisible(mode == 1);\n        mGeek.setVisible(mode == 2);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/DoubleLineNetworkSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class DoubleLineNetworkSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar_doubleline_network;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/IconManageSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidT;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.Preference;\nimport moralnorm.preference.SeekBarPreferenceEx;\nimport moralnorm.preference.SwitchPreference;\n\npublic class IconManageSettings extends SettingsPreferenceFragment {\n\n    Preference UseNewHD;\n    DropDownPreference IconNewHD;\n    DropDownPreference mAlarmClockIcon;\n    SeekBarPreferenceEx mAlarmClockIconN;\n    SeekBarPreferenceEx mNotificationIconMaximum;\n    SwitchPreference mBatteryNumber;\n    SwitchPreference mBatteryPercentage;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar_icon_manage;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mAlarmClockIcon = findPreference(\"prefs_key_system_ui_status_bar_icon_alarm_clock\");\n        mAlarmClockIconN = findPreference(\"prefs_key_system_ui_status_bar_icon_alarm_clock_n\");\n        mNotificationIconMaximum = findPreference(\"prefs_key_system_ui_status_bar_notification_icon_maximum\");\n\n        mBatteryNumber = findPreference(\"prefs_key_system_ui_status_bar_battery_percent\");\n        mBatteryPercentage = findPreference(\"prefs_key_system_ui_status_bar_battery_percent_mark\");\n\n        UseNewHD = findPreference(\"prefs_key_system_ui_status_bar_use_new_hd\");\n        IconNewHD = findPreference(\"prefs_key_system_ui_status_bar_icon_new_hd\");\n        UseNewHD.setVisible(isAndroidT());\n        IconNewHD.setVisible(isAndroidT());\n\n        mAlarmClockIconN.setVisible(Integer.parseInt(PrefsUtils.mSharedPreferences.getString(\"prefs_key_system_ui_status_bar_icon_alarm_clock\", \"0\")) == 3);\n\n        mAlarmClockIcon.setOnPreferenceChangeListener((preference, o) -> {\n            mAlarmClockIconN.setVisible(Integer.parseInt((String) o) == 3);\n            return true;\n        });\n\n        mNotificationIconMaximum.setOnPreferenceChangeListener((preference, o) -> {\n            if ((int) o == 16) {\n                mNotificationIconMaximum.setValue(R.string.unlimited);\n            }\n            return true;\n        });\n\n        mBatteryNumber.setOnPreferenceChangeListener((preference, o) -> {\n            if (!(boolean) o) {\n                mBatteryPercentage.setChecked(false);\n            }\n            return true;\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/MobileNetworkTypeSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MobileNetworkTypeSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar_mobile_network_type;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/systemui/statusbar/NetworkSpeedIndicatorSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar;\n\nimport static com.sevtinge.cemiuiler.utils.devicesdk.SystemSDKKt.isAndroidR;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\nimport moralnorm.preference.SeekBarPreferenceEx;\n\npublic class NetworkSpeedIndicatorSettings extends SettingsPreferenceFragment {\n\n    SeekBarPreferenceEx mNetworkSpeedWidth; // 固定宽度\n\n    @Override\n    public int getContentResId() {\n        return R.xml.system_ui_status_bar_network_speed_indicator;\n    }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartDialog(\n            getResources().getString(R.string.system_ui),\n            \"com.android.systemui\"\n        );\n    }\n\n    @Override\n    public void initPrefs() {\n        mNetworkSpeedWidth = findPreference(\"prefs_key_system_ui_statusbar_network_speed_fixedcontent_width\");\n        mNetworkSpeedWidth.setVisible(!isAndroidR());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/various/AOSPSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.various;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class AOSPSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() { return R.xml.various_aosp; }\n}"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/various/AlertDialogSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.various;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.SeekBarPreferenceEx;\n\npublic class AlertDialogSettings extends SettingsPreferenceFragment {\n\n    private DropDownPreference mDialogGravity;\n    private SeekBarPreferenceEx mDialogHorizontalMargin;\n    private SeekBarPreferenceEx mDialogBottomMargin;\n\n    @Override\n    public int getContentResId() {\n        return R.xml.various_dialog;\n    }\n\n    @Override\n    public void initPrefs() {\n        mDialogGravity = findPreference(\"prefs_key_various_dialog_gravity\");\n        mDialogHorizontalMargin = findPreference(\"prefs_key_various_dialog_margin_horizontal\");\n        mDialogBottomMargin = findPreference(\"prefs_key_various_dialog_margin_bottom\");\n\n        int gialogGravity = Integer.parseInt(PrefsUtils.getSharedStringPrefs(getActivity(), \"prefs_key_various_dialog_gravity\", \"0\"));\n\n        mDialogHorizontalMargin.setVisible(gialogGravity != 0);\n        mDialogBottomMargin.setVisible(gialogGravity == 2);\n\n        mDialogGravity.setOnPreferenceChangeListener((preference, o) -> {\n            int i = Integer.parseInt((String) o);\n            mDialogHorizontalMargin.setVisible(i != 0);\n            mDialogBottomMargin.setVisible(i == 2);\n            return true;\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/fragment/various/MiPadSettings.java",
    "content": "package com.sevtinge.cemiuiler.ui.fragment.various;\n\nimport android.view.View;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.BaseSettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class MiPadSettings extends SettingsPreferenceFragment {\n    @Override\n    public int getContentResId() { return R.xml.various_mipad; }\n\n    @Override\n    public View.OnClickListener addRestartListener() {\n        return view -> ((BaseSettingsActivity)getActivity()).showRestartSystemDialog();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/various/LocationDataActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui.various;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.os.Bundle;\nimport android.text.TextUtils;\nimport android.view.ContextMenu;\nimport android.view.LayoutInflater;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.AdapterView;\nimport android.widget.ArrayAdapter;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.ListView;\nimport android.widget.TextView;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.data.LocationData;\nimport com.sevtinge.cemiuiler.data.SQLiteHelper;\nimport com.sevtinge.cemiuiler.utils.ToastHelper;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.regex.Pattern;\n\nimport moralnorm.appcompat.app.AlertDialog;\nimport moralnorm.appcompat.app.AppCompatActivity;\n\npublic class LocationDataActivity extends AppCompatActivity implements View.OnClickListener {\n\n    private Cursor mCursor;\n    private ListView mLocationListView;\n    private LocationAdapter mAdapter;\n    private SQLiteHelper mSQLiteHelper;\n    private ArrayList<LocationData> mLocationDataList = new ArrayList<>();\n\n    Button mAddLocation;\n\n\n    EditText mTitle;\n    EditText mOffset;\n    EditText mBaseStation;\n    EditText mLongitudeAndLatitude;\n    EditText mRemarks;\n\n    @Override\n    public void onCreate(Bundle bundle) {\n        super.onCreate(bundle);\n        setContentView(R.layout.activity_location);\n\n        mAddLocation = findViewById(R.id.location_add);\n        mAddLocation.setOnClickListener(this);\n\n        mSQLiteHelper = new SQLiteHelper(this);\n        mAdapter = new LocationAdapter(this, mLocationDataList);\n        mLocationListView = findViewById(R.id.list_location);\n        mLocationListView.setAdapter(mAdapter);\n        mCursor = mSQLiteHelper.a.rawQuery(\"select * from location order by id desc limit 2000\", null);\n        if (mCursor.moveToFirst()) {\n            do {\n                LocationData locationData = new LocationData(String.valueOf(mCursor.getString(0)), mCursor.getDouble(1), mCursor.getDouble(2), mCursor.getInt(3), mCursor.getInt(4), mCursor.getInt(5), mCursor.getString(6), mCursor.getInt(7));\n                mLocationDataList.add(locationData);\n            } while (mCursor.moveToNext());\n        }\n        mCursor.close();\n\n        registerForContextMenu(mLocationListView);\n\n    }\n\n    @Override\n    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {\n        if (v.getId() == R.id.list_location) {\n            menu.setHeaderTitle(String.valueOf(mLocationDataList.get(((AdapterView.AdapterContextMenuInfo) menuInfo).position).getRemarks()));\n            getMenuInflater().inflate(R.menu.menu_location, menu);\n        } else {\n            super.onCreateContextMenu(menu, v, menuInfo);\n        }\n    }\n\n    @Override\n    public void onClick(View v) {\n        if (v == mAddLocation) {\n            View view = LayoutInflater.from(this).inflate(R.layout.location_edit_dialog, null);\n            initEditView(view);\n            AlertDialog.Builder builder = new AlertDialog.Builder(this);\n            builder.setTitle(\"新增\");\n            builder.setView(view);\n            builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {\n\n                String title = mTitle.getText().toString();\n                String offset = mOffset.getText().toString();\n                String baseStation = mBaseStation.getText().toString();\n                String longitudeAndLatitude = mLongitudeAndLatitude.getText().toString();\n                String remarks = mRemarks.getText().toString();\n\n                if (TextUtils.isEmpty(title) ||\n                    TextUtils.isEmpty(offset) ||\n                    TextUtils.isEmpty(baseStation) ||\n                    TextUtils.isEmpty(longitudeAndLatitude) ||\n                    TextUtils.isEmpty(remarks)) {\n\n                    ToastHelper.makeText(this, \"格式错误\");\n                } else {\n\n                    String[] split = baseStation.split(\",\", 2);\n                    String[] split2 = longitudeAndLatitude.split(\",\", 2);\n\n                    LocationData mData = new LocationData(title,\n                        Double.parseDouble(split2[0]),\n                        Double.parseDouble(split2[1]),\n                        Integer.parseInt(offset),\n                        Integer.parseInt(split[0]),\n                        Integer.parseInt(split[1]),\n                        remarks,\n                        1);\n\n                    /*mData.setTitle(title);\n                    mData.setLongitude(Double.parseDouble(split2[0]));\n                    mData.setLatitude(Double.parseDouble(split2[1]));\n                    mData.setOffset(Integer.parseInt(offset));\n                    mData.setRegionCode(Integer.parseInt(split[0]));\n                    mData.setBaseStationCode(Integer.parseInt(split[1]));\n                    mData.setRemarks(remarks);\n                    mData.setF(1);*/\n\n                    long b2 = mSQLiteHelper.b(mData);\n                    if (b2 < 0) {\n                        ToastHelper.makeText(this, \"Can't insert\");\n                        return;\n                    }\n                    mData.setF((int) b2);\n                    mLocationDataList.add(0, mData);\n                    mAdapter.notifyDataSetChanged();\n                }\n            });\n            builder.setNegativeButton(android.R.string.cancel, null).show();\n        }\n    }\n\n    @SuppressLint(\"NonConstantResourceId\")\n    @Override\n    public boolean onContextItemSelected(@NonNull MenuItem item) {\n        final AdapterView.AdapterContextMenuInfo mMenuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();\n        final LocationData mDataPosition = mLocationDataList.get(mMenuInfo.position);\n\n        if (item.getItemId() == R.id.location_add) {\n            final EditText editText = new EditText(this);\n            View view = LayoutInflater.from(this).inflate(R.layout.location_edit_dialog, null);\n            initEditView(view);\n\n            AlertDialog.Builder builder = new AlertDialog.Builder(this);\n            builder.setTitle(\"新增\");\n            builder.setView(view);\n            builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {\n                String n = n(editText.getText().toString());\n                if (\"\".equals(n) || !e(n)) {\n                    ToastHelper.makeText(this, \"格式错误\");\n                    return;\n                }\n\n                String[] split = n.split(\",\", 6);\n                LocationData kVar2 = new LocationData(String.valueOf(split[0]), Double.parseDouble(split[1]), Double.parseDouble(split[2]), Integer.parseInt(split[3]), Integer.parseInt(split[4]), Integer.parseInt(split[5]), split[6], 7);\n                long b2 = mSQLiteHelper.b(kVar2);\n                if (b2 < 0) {\n                    ToastHelper.makeText(this, \"Can't insert\");\n                    return;\n                }\n\n                kVar2.setF((int) b2);\n                mLocationDataList.add(0, kVar2);\n                mAdapter.notifyDataSetChanged();\n            });\n            builder.setNegativeButton(android.R.string.cancel, null).show();\n        } else if (item.getItemId() == R.id.location_delete) {\n            mLocationDataList.remove(mMenuInfo.position);\n            mAdapter.notifyDataSetChanged();\n            if (mSQLiteHelper.a(mDataPosition) != 1) {\n                ToastHelper.makeText(this, \"Can't delete.\");\n            }\n        } else {\n            return super.onContextItemSelected(item);\n        }\n        return true;\n    }\n\n    private void initEditView(View view) {\n        mTitle = view.findViewById(R.id.title);\n        mOffset = view.findViewById(R.id.offset);\n        mBaseStation = view.findViewById(R.id.base_station);\n        mLongitudeAndLatitude = view.findViewById(R.id.longitude_latitude);\n        mRemarks = view.findViewById(R.id.remarks);\n\n    }\n\n    public static String n(String str) {\n        return str.replaceAll(\"\\\\s+\", \"\");\n    }\n\n    public static boolean e(String str) {\n        return Pattern.compile(\"^((-?\\\\d+(\\\\.\\\\d+)?,){2}(\\\\d+,){3}.+)$\").matcher(str).matches();\n    }\n\n\n    public class LocationAdapter extends ArrayAdapter<LocationData> {\n\n        private List<LocationData> mList;\n        private LayoutInflater mInflater;\n\n        public LocationAdapter(@NonNull Context context, List<LocationData> list) {\n            super(context, (int) R.layout.item_location, list);\n            mList = list;\n            mInflater = getLayoutInflater();\n        }\n\n        @Override\n        public int getCount() {\n            return mList.size();\n        }\n\n        @NonNull\n        @Override\n        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {\n            LocationData mData = getItem(position);\n            ViewHolder holder;\n            if (convertView == null) {\n                convertView = mInflater.inflate(R.layout.item_location, parent, false);\n                holder = new ViewHolder();\n                holder.mTitle = convertView.findViewById(android.R.id.title);\n                holder.mRegionCode = convertView.findViewById(R.id.region_code);\n                holder.mBaseStation = convertView.findViewById(R.id.base_station);\n                holder.mLongitudeAndLatitude = convertView.findViewById(R.id.longitude_latitude);\n                holder.mSummary = convertView.findViewById(android.R.id.summary);\n                convertView.setTag(holder);\n            } else {\n                holder = (ViewHolder) convertView.getTag();\n            }\n            holder.mTitle.setText(mData.getTitle());\n            holder.mRegionCode.setText(\"偏移：\" + mData.getOffset());\n            holder.mBaseStation.setText(\"基站：\" + mData.getRegionCode() + \",\" + mData.getBaseStationCode());\n            holder.mLongitudeAndLatitude.setText(\"经纬度：\" + mData.getLongitude() + \",\" + mData.getLatitude());\n            holder.mSummary.setText(mData.toString());\n            holder.mSummary.setVisibility(View.VISIBLE);\n            return convertView;\n        }\n\n        class ViewHolder {\n            TextView mTitle;\n            TextView mRegionCode;\n            TextView mBaseStation;\n            TextView mLongitudeAndLatitude;\n            TextView mSummary;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/various/LocationSimulationActivity.java",
    "content": "package com.sevtinge.cemiuiler.ui.various;\n\nimport android.content.SharedPreferences;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\n\nimport androidx.annotation.NonNull;\nimport androidx.fragment.app.Fragment;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.ui.base.SettingsActivity;\nimport com.sevtinge.cemiuiler.ui.fragment.base.SettingsPreferenceFragment;\n\npublic class LocationSimulationActivity extends SettingsActivity {\n\n    private static SharedPreferences mSharedPrefs;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setImmersionMenuEnabled(true);\n        setFragment(new LocationSimulationFragment());\n    }\n\n    public static class LocationSimulationFragment extends SettingsPreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {\n\n        @Override\n        public void onCreate(Bundle savedInstanceState) {\n            super.onCreate(savedInstanceState);\n            mSharedPrefs = getPreferenceManager().getSharedPreferences();\n            setSharedPreferenceChanged();\n        }\n\n        @Override\n        public int getContentResId() {\n            return R.xml.various_location_simulation;\n        }\n\n        @Override\n        public void initPrefs() {\n            super.initPrefs();\n        }\n\n\n        @Override\n        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {\n            setSharedPreferenceChanged();\n        }\n\n        private void setSharedPreferenceChanged() {\n\n        }\n\n        @Override\n        public void onResume() {\n            super.onResume();\n            mSharedPrefs.registerOnSharedPreferenceChangeListener(this);\n        }\n\n        @Override\n        public void onPause() {\n            super.onPause();\n            mSharedPrefs.unregisterOnSharedPreferenceChangeListener(this);\n        }\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.menu_location_simulation, menu);\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(@NonNull MenuItem item) {\n\n        if (item.getItemId() == R.id.location_simulation_data) {\n\n        }\n        return super.onOptionsItemSelected(item);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/ui/various/fragment/VariousFragment.java",
    "content": "package com.sevtinge.cemiuiler.ui.various.fragment;\n\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport moralnorm.preference.DropDownPreference;\nimport moralnorm.preference.PreferenceCategory;\nimport moralnorm.preference.PreferenceFragmentCompat;\nimport moralnorm.preference.SeekBarPreference;\nimport moralnorm.preference.SwitchPreference;\n\npublic class VariousFragment extends PreferenceFragmentCompat {\n\n    public String TAG = \"VariousFragment\";\n\n    private SeekBarPreference mDialogHorizontalMargin;\n    private SeekBarPreference mDialogBottomMargin;\n\n    private PreferenceCategory mBlurEnabledCat;\n    private PreferenceCategory mBlurCustomCat;\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n\n        Bundle args = getArguments();\n        assert args != null;\n        String sub = args.getString(\"sub\");\n        if (sub == null) return;\n\n        Log.d(TAG, \"MoralNorm: \" + getArguments());\n\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n    }\n\n    @Override\n    public void onCreatePreferences(Bundle bundle, String s) {\n\n        DropDownPreference mDialogGravity = findPreference(\"prefs_key_various_dialog_gravity\");\n        mDialogHorizontalMargin = findPreference(\"prefs_key_various_dialog_horizontal_margin\");\n        mDialogBottomMargin = findPreference(\"prefs_key_various_dialog_bottom_margin\");\n\n        SwitchPreference mBlurEnabled = findPreference(\"prefs_key_various_blur_enabled\");\n        mBlurEnabledCat = findPreference(\"prefs_key_various_blur_enabled_cat\");\n        mBlurCustomCat = findPreference(\"prefs_key_various_blur_custom\");\n\n        int gialogGravity = Integer.parseInt(PrefsUtils.getSharedStringPrefs(getActivity(), \"prefs_key_various_dialog_gravity\", \"0\"));\n\n        mDialogHorizontalMargin.setVisible(gialogGravity != 0);\n        mDialogBottomMargin.setVisible(gialogGravity == 2);\n\n        mDialogGravity.setOnPreferenceChangeListener((preference, o) -> {\n            int i = Integer.parseInt((String) o);\n            mDialogHorizontalMargin.setVisible(i != 0);\n            mDialogBottomMargin.setVisible(i == 2);\n            return true;\n        });\n\n\n        boolean bluEnabled = PrefsUtils.getSharedBoolPrefs(getActivity(), \"prefs_key_various_blur_enabled\", false);\n        mBlurEnabledCat.setVisible(bluEnabled);\n        mBlurCustomCat.setVisible(bluEnabled);\n\n        mBlurEnabled.setOnPreferenceChangeListener((preference, o) -> {\n            mBlurEnabledCat.setVisible((Boolean) o);\n            mBlurCustomCat.setVisible((Boolean) o);\n            return true;\n        });\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/BackupUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport com.sevtinge.hyperceiler.expansionpacks.utils.KS2Utils;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.net.Uri;\n\nimport androidx.annotation.Nullable;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.BufferedReader;\nimport java.io.BufferedWriter;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.io.OutputStream;\nimport java.io.OutputStreamWriter;\nimport java.text.SimpleDateFormat;\nimport java.util.Iterator;\nimport java.util.Map;\n\npublic class BackupUtils {\n    public static final int CREATE_DOCUMENT_CODE = 255774;\n    public static final int OPEN_DOCUMENT_CODE = 277451;\n    public static final String BACKUP_FILE_NAME = \"Cemiuiler_settings_backup\";\n\n    public static void backup(Activity activity) {\n        @SuppressLint(\"SimpleDateFormat\") String backupFileName = BACKUP_FILE_NAME + new SimpleDateFormat(\"_yyyy-MM-dd-HH:mm:ss\").format(new java.util.Date());\n        Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);\n        intent.addCategory(Intent.CATEGORY_OPENABLE);\n        intent.setType(\"application/json\");\n        intent.putExtra(Intent.EXTRA_TITLE, backupFileName);\n        activity.startActivityForResult(intent, CREATE_DOCUMENT_CODE);\n    }\n\n    public static void restore(Activity activity) {\n        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);\n        intent.addCategory(Intent.CATEGORY_OPENABLE);\n        intent.setType(\"application/json\");\n        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false);\n        activity.startActivityForResult(intent, OPEN_DOCUMENT_CODE);\n    }\n\n    public static void handleCreateDocument(Activity activity, @Nullable Uri data) throws IOException, JSONException {\n        if (data == null) return;\n        OutputStream outputStream = activity.getContentResolver().openOutputStream(data);\n        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));\n        JSONObject jsonObject = new JSONObject();\n        for (Map.Entry<String, ?> entry : PrefsUtils.mSharedPreferences.getAll().entrySet()) {\n            jsonObject.put(entry.getKey(), entry.getValue());\n        }\n        bufferedWriter.write(jsonObject.toString());\n        bufferedWriter.close();\n    }\n\n    public static void handleReadDocument(Activity activity, @Nullable Uri data) throws IOException, JSONException {\n        if (data == null) return;\n        SharedPreferences.Editor edit = PrefsUtils.mSharedPreferences.edit();\n        InputStream inputStream = activity.getContentResolver().openInputStream(data);\n        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));\n        StringBuilder stringBuilder = new StringBuilder();\n        String line = bufferedReader.readLine();\n        while (line != null) {\n            stringBuilder.append(line);\n            line = bufferedReader.readLine();\n        }\n        String read = stringBuilder.toString();\n        JSONObject jsonObject = new JSONObject(read);\n        Iterator<String> keys = jsonObject.keys();\n        while (keys.hasNext()) {\n            String key = keys.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof String) {\n                edit.putString(key, (String) value);\n            } else if (value instanceof Boolean) {\n                edit.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                edit.putInt(key, (Integer) value);\n            }\n        }\n        edit.apply();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/BitmapUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Canvas;\nimport android.graphics.PixelFormat;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.graphics.drawable.NinePatchDrawable;\n\nimport java.io.ByteArrayOutputStream;\n\npublic class BitmapUtils {\n\n    public static Bitmap drawableToBitmap(Drawable drawable) {\n        // 取 drawable 的长宽\n        int w = drawable.getIntrinsicWidth();\n        int h = drawable.getIntrinsicHeight();\n        // 取 drawable 的颜色格式\n        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;\n        // 建立对应 bitmap\n        Bitmap bitmap = Bitmap.createBitmap(w, h, config);\n        // 建立对应 bitmap 的画布\n        Canvas canvas = new Canvas(bitmap);\n        drawable.setBounds(0, 0, w, h);\n       // 把 drawable 内容画到画布中\n        drawable.draw(canvas);\n        return bitmap;\n    }\n\n    Bitmap drawable2Bitmap(Drawable drawable) {\n        if (drawable instanceof BitmapDrawable) {\n            return ((BitmapDrawable) drawable).getBitmap();\n        } else if (drawable instanceof NinePatchDrawable) {\n            Bitmap bitmap = Bitmap\n                    .createBitmap(\n                            drawable.getIntrinsicWidth(),\n                            drawable.getIntrinsicHeight(),\n                            drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888\n                                    : Bitmap.Config.RGB_565);\n            Canvas canvas = new Canvas(bitmap);\n            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),\n                    drawable.getIntrinsicHeight());\n            drawable.draw(canvas);\n            return bitmap;\n        } else {\n            return null;\n        }\n    }\n\n    public static byte[] Bitmap2Bytes(Bitmap bm) {\n        ByteArrayOutputStream baos = new ByteArrayOutputStream();\n        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);\n        return baos.toByteArray();\n    }\n\n    public static Bitmap Bytes2Bimap(byte[] b) {\n        if (b.length != 0) {\n            return BitmapFactory.decodeByteArray(b, 0, b.length);\n        } else {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/BlurUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.graphics.drawable.Drawable;\nimport android.graphics.drawable.GradientDrawable;\nimport android.os.Build;\nimport android.text.TextUtils;\nimport android.view.View;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.sevtinge.cemiuiler.XposedInit;\n\nimport de.robv.android.xposed.XposedHelpers;\n\n@RequiresApi(Build.VERSION_CODES.S)\npublic class BlurUtils {\n\n    private final Context mContext;\n    private Object mViewRootImpl;\n    private Drawable mBlurDrawable;\n\n    private int mColor;\n    private int mAlpha;\n    private int mCornerRadius;\n\n    private int mBlurRadius;\n    private boolean isBlurEnable;\n\n    public BlurUtils(View view) {\n        this(view, \"\");\n    }\n\n    public BlurUtils(View view, String key) {\n        mContext = view.getContext();\n        setKey(mContext, key);\n        setBlurView(view);\n    }\n\n    public void setBlurView(View view) {\n        setOnAttachStateChangeListener(view);\n    }\n\n    public void setBlurEnable(boolean blurEnable) {\n        isBlurEnable = blurEnable;\n    }\n\n    public void setKey(Context context, String key) {\n        if (!TextUtils.isEmpty(key)) {\n\n            String mBlurEnableKey = key + \"_blur_enabled\";\n            String mBlurRadiusKey = key + \"_blur_radius\";\n\n            String mColorKey = key + \"_color\";\n            String mAlphaKey = key + \"_color_alpha\";\n            String mCornerRadiusKey = key + \"_corner_radius\";\n\n            isBlurEnable = XposedInit.mPrefsMap.getBoolean(mBlurEnableKey);\n            mBlurRadius = XposedInit.mPrefsMap.getInt(mBlurRadiusKey, 60);\n\n            mColor = XposedInit.mPrefsMap.getInt(mColorKey, 2113929215);\n            mAlpha = XposedInit.mPrefsMap.getInt(mAlphaKey, 60);\n            mCornerRadius = DisplayUtils.dip2px(context, XposedInit.mPrefsMap.getInt(mCornerRadiusKey, 18));\n\n        } else {\n            isBlurEnable = false;\n            mBlurRadius = 60;\n\n            mColor = 2113929215;\n            mAlpha = 60;\n            mCornerRadius = DisplayUtils.dip2px(context, 90);\n        }\n    }\n\n\n    private void setOnAttachStateChangeListener(View view) {\n        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {\n            @Override\n            public void onViewAttachedToWindow(View v) {\n                mViewRootImpl = XposedHelpers.callMethod(v, \"getViewRootImpl\");\n                mBlurDrawable = createBackgroundDrawable(mViewRootImpl, isBlurEnable, ColorUtilsStatic.colorToHexARGB(mColor), mCornerRadius, mBlurRadius);\n                v.setBackground(mBlurDrawable);\n            }\n\n            @Override\n            public void onViewDetachedFromWindow(View v) {\n                v.setBackground(null);\n            }\n        });\n    }\n\n    private Drawable createBackgroundDrawable(Object viewRootImpl, boolean isBlurEnable, int color, int cornerRadius, int blurRadius) {\n        Drawable mBackgroundDrawable;\n        if (isBlurEnable) {\n            mBackgroundDrawable = (Drawable) XposedHelpers.callMethod(viewRootImpl, \"createBackgroundBlurDrawable\", new Object[0]);\n            setColor(mBackgroundDrawable, color);\n            setCornerRadius(mBackgroundDrawable, cornerRadius);\n            setBlurRadius(mBackgroundDrawable, blurRadius);\n        } else {\n            mBackgroundDrawable = createGradientDrawable(color, cornerRadius);\n        }\n        return mBackgroundDrawable;\n    }\n\n    private Drawable createBackgroundDrawable(Object viewRootImpl, boolean isBlurEnable, String color, int cornerRadius, int blurRadius) {\n        Drawable mBackgroundDrawable;\n        if (isBlurEnable) {\n            mBackgroundDrawable = (Drawable) XposedHelpers.callMethod(viewRootImpl, \"createBackgroundBlurDrawable\", new Object[0]);\n            setColor(mBackgroundDrawable, color);\n            setCornerRadius(mBackgroundDrawable, cornerRadius);\n            setBlurRadius(mBackgroundDrawable, blurRadius);\n        } else {\n            mBackgroundDrawable = createGradientDrawable(color, cornerRadius);\n        }\n        return mBackgroundDrawable;\n    }\n\n    private GradientDrawable createGradientDrawable(int color, int cornerRadius) {\n\n        int mColorAlpha = (color & 0xff000000) >> 24;\n        int mColorRed = (color & 0x00ff0000) >> 16;\n        int mColorGreen = (color & 0x0000ff00) >> 8;\n        int mColorBlue = (color & 0x000000ff);\n\n        GradientDrawable mBackgroundDrawable = new GradientDrawable();\n        mBackgroundDrawable.setShape(GradientDrawable.RECTANGLE);\n        mBackgroundDrawable.setColor(Color.argb(mColorAlpha, mColorRed, mColorGreen, mColorBlue));\n        mBackgroundDrawable.setCornerRadius(cornerRadius);\n        return mBackgroundDrawable;\n    }\n\n    private GradientDrawable createGradientDrawable(String color, int cornerRadius) {\n        GradientDrawable mBackgroundDrawable = new GradientDrawable();\n        mBackgroundDrawable.setShape(GradientDrawable.RECTANGLE);\n        mBackgroundDrawable.setColor(Color.parseColor(color));\n        mBackgroundDrawable.setCornerRadius(cornerRadius);\n        return mBackgroundDrawable;\n    }\n\n    public void setColor(Drawable drawable, int color) {\n        int mColorAlpha = (color & 0xff000000) >> 24;\n        int mColorRed = (color & 0x00ff0000) >> 16;\n        int mColorGreen = (color & 0x0000ff00) >> 8;\n        int mColorBlue = (color & 0x000000ff);\n        XposedHelpers.callMethod(drawable, \"setColor\", Color.argb(mColorAlpha, mColorRed, mColorGreen, mColorBlue));\n    }\n\n    public void setColor(Drawable drawable, String color) {\n        XposedHelpers.callMethod(drawable, \"setColor\", Color.parseColor(color));\n    }\n\n    public void setCornerRadius(Drawable drawable, int cornerRadius) {\n        XposedHelpers.callMethod(drawable, \"setCornerRadius\", new Object[]{cornerRadius});\n    }\n\n    public void setBlurRadius(Drawable drawable, int blurRadius) {\n        XposedHelpers.callMethod(drawable, \"setBlurRadius\", new Object[]{blurRadius});\n    }\n\n\n    /*public BlurUtils(View view) {\n        this(view, null);\n    }\n\n    public BlurUtils(View view, String key) {\n        mView = view;\n        mKey = key;\n        if (mView != null) {\n            mContext = mView.getContext();\n        }\n        if (mKey != null) {\n            mBlurRadiusKey = mKey + \"_blur_radius\";\n            mBgCornerRadiusKey = mKey + \"_bg_corner_radius\";\n            mBgAlphaKey = mKey + \"_bg_alpha\";\n            mBgColorKey = mKey + \"_bg_color\";\n\n            mBlurRadius = XposedInit.mPrefsMap.getInt(mBlurRadiusKey,60);\n            mBgCornerRadius = DisplayUtils.dip2px(mContext, XposedInit.mPrefsMap.getInt(mBgCornerRadiusKey, 90));\n            mBgAlpha = XposedInit.mPrefsMap.getInt(mBgAlphaKey,60);\n            mBgColor = XposedInit.mPrefsMap.getInt(mBgColorKey,-1);\n        }\n        setBlur(mView);\n    }\n\n    void setBlur(View view) {\n\n        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {\n            @Override\n            public void onViewAttachedToWindow(View v) {\n                onAttachedToWindow();\n            }\n\n            @Override\n            public void onViewDetachedFromWindow(View v) {\n                onDetachedFromWindow();\n            }\n        });\n    }\n\n    void onAttachedToWindow() {\n        mViewRootImpl = XposedHelpers.callMethod(mView,\"getViewRootImpl\",new Object[0]);\n        mBlurDrawable = (Drawable) XposedHelpers.callMethod(mViewRootImpl,\"createBackgroundBlurDrawable\",new Object[0]);\n        initBlur();\n    }\n\n    void onDetachedFromWindow() {\n        mView.setBackground(null);\n    }\n\n    void initBlur() {\n        setBlurRadius();\n        setCornerRadius();\n        setColor();\n        setBlurBackground();\n    }\n\n    void setBlurBackground() {\n        mView.setBackground(mBlurDrawable);\n    }\n\n    void setBlurRadius() {\n        XposedHelpers.callMethod(mBlurDrawable,\"setBlurRadius\",new Object[]{mBlurRadius});\n    }\n\n    void setCornerRadius() {\n        XposedHelpers.callMethod(mBlurDrawable,\"setCornerRadius\",new Object[]{mBgCornerRadius});\n    }\n\n    private static void setColor() {\n        int mColorRed = (mBgColor & 0x00ff0000) >> 16;\n        int mColorGreen = (mBgColor & 0x0000ff00) >> 8;\n        int mColorBlue = (mBgColor & 0x000000ff);\n        XposedHelpers.callMethod(mBlurDrawable,\"setColor\", Color.argb(mBgAlpha, mColorRed, mColorGreen, mColorBlue));\n    }*/\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/ColorUtils.kt",
    "content": "package com.sevtinge.cemiuiler.utils\n\nimport android.graphics.Color\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\n\nobject ColorUtils {\n    // color转换不可靠，加一个默认值\n    private val defaultReturnColor = Color.argb(50, 0, 0, 0)\n\n    fun colorToHex(color: Int): String {\n        var originalColor = Color.valueOf(defaultReturnColor)\n        try {\n            originalColor = Color.valueOf(color)\n        } catch (e: Throwable) {\n            // 颜色转换失败\n            XposedLogUtils.logI(\"colorToHex\", \"ColorUtils colorToHex Hook failed by: $e\")\n        }\n        val alpha = (originalColor.alpha() * 255).toInt()\n        val red = (originalColor.red() * 255).toInt()\n        val green = (originalColor.green() * 255).toInt()\n        val blue = (originalColor.blue() * 255).toInt()\n        val alphaHex = if (alpha <= 15) {\n            \"0$alpha\"\n        } else {\n            alpha.toString(16)\n        }\n        val redHex = if (red <= 15) {\n            \"0$red\"\n        } else {\n            red.toString(16)\n        }\n        val greenHex = if (green <= 15) {\n            \"0$green\"\n        } else {\n            green.toString(16)\n        }\n        val blueHex = if (blue <= 15) {\n            \"0$blue\"\n        } else {\n            blue.toString(16)\n        }\n        return \"#$alphaHex$redHex$greenHex$blueHex\".uppercase()\n    }\n\n    fun hexToColor(hexString: String): Int {\n        return try {\n            Color.parseColor(hexString)\n        } catch (e: Throwable) {\n            defaultReturnColor\n        }\n    }\n\n    fun isDarkColor(color: Int): Boolean {\n        val darkness =\n            1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255\n        return darkness > 0.5\n    }\n\n    fun addAlphaForColor(color: Int, alpha: Int): Int {\n        return Color.valueOf(Color.red(color) / 255f, Color.green(color) / 255f, Color.blue(color) / 255f, alpha / 255f)\n            .toArgb()\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/ColorUtilsStatic.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.graphics.Color;\n\nimport androidx.annotation.ColorInt;\n\npublic class ColorUtilsStatic {\n\n    /**\n     * @return 字符串\n     * @color: 参数\n     * 类型：int\n     * 例如：-1272178\n     */\n    public static String colorToRGBA(int color) {\n        int alpha = color >>> 24;\n        int r = (color & 0xff0000) >> 16;\n        int g = (color & 0xff00) >> 8;\n        int b = color & 0xff;\n\n        return alpha + \", \" + r + \", \" + g + \", \" + b;\n    }\n\n    /**\n     * @return 字符串\n     * @red 红色数值\n     * @green 绿色数值\n     * @blue 蓝色色数值\n     */\n    public static String rgbToHex(int red, int green, int blue) {\n\n        String hr = Integer.toHexString(red);\n        String hg = Integer.toHexString(green);\n        String hb = Integer.toHexString(blue);\n\n        return \"#\" + hr + hg + hb;\n    }\n\n    /**\n     * 将 颜色值 转化为 #AARRGGBB\n     *\n     * @param color -1272178\n     * @return #AARRGGBB\n     */\n    public static String colorToHexARGB(@ColorInt int color) {\n        // 转化为16进制字符串\n        String A = Integer.toHexString(Color.alpha(color));\n        String R = Integer.toHexString(Color.red(color));\n        String G = Integer.toHexString(Color.green(color));\n        String B = Integer.toHexString(Color.blue(color));\n\n        // 判断获取到的R,G,B值的长度 如果长度等于1 给R,G,B值的前边添0\n        A = A.length() == 1 ? \"0\" + A : A;\n        R = R.length() == 1 ? \"0\" + R : R;\n        G = G.length() == 1 ? \"0\" + G : G;\n        B = B.length() == 1 ? \"0\" + B : B;\n        //\n        StringBuilder sb = new StringBuilder();\n        sb.append(\"#\");\n        sb.append(A);\n        sb.append(R);\n        sb.append(G);\n        sb.append(B);\n        return sb.toString();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/CtaUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\n\nimport com.sevtinge.cemiuiler.R;\n\npublic class CtaUtils {\n    private static final String APP_PERMISSION_MANAGE_PKG = \"com.miui.securitycenter\";\n    public static final String ACTION_START_CTA_V2 = \"miui.intent.action.SYSTEM_PERMISSION_DECLARE\";\n    public static final String ACTION_START_CTA_V2_NEW = \"miui.intent.action.SYSTEM_PERMISSION_DECLARE_NEW\";\n\n    private static final String KEY_MANDATORY_PERMISSION = \"mandatory_permission\";\n    private static final String KEY_MAIN_PURPOSE = \"main_purpose\";\n    private static final String KEY_USE_NETWORK = \"use_network\";\n    private static final String KEY_OPTIONAL_PERM = \"optional_perm\";\n    private static final String KEY_OPTIONAL_PERM_DESC = \"optional_perm_desc\";\n    private static final String KEY_OPTIONAL_PERM_SHOW = \"optional_perm_show\";\n    private static final String KEY_SHOW_LOCK = \"show_lock\";\n    private static final String KEY_AGREE_DESC = \"agree_desc\";\n\n    public static void setCtaEnabled(Context context) {\n        SharedPreferences.Editor edit = context.getSharedPreferences(\"Cemiuiler_Permission\", 0).edit();\n        edit.putBoolean(\"key_new_cta_open\", true);\n        edit.apply();\n    }\n\n\n    public static boolean isCtaEnabled(Context context) {\n        return context.getSharedPreferences(\"Cemiuiler_Permission\", 0).getBoolean(\"key_new_cta_open\", false);\n    }\n\n    public static boolean showCtaDialog(Activity activity, int requestCode) {\n        Intent intent = new Intent();\n        int mActivities = activity.getPackageManager().queryIntentActivities(intent, 0).size();\n        intent.setAction(mActivities > 0 ? ACTION_START_CTA_V2_NEW : ACTION_START_CTA_V2);\n        intent.setPackage(APP_PERMISSION_MANAGE_PKG);\n        intent.putExtra(KEY_MANDATORY_PERMISSION, true);\n        intent.putExtra(\"all_purpose\", activity.getString(R.string.new_cta_app_all_purpose_title));\n        intent.putExtra(\"runtime_perm\", getRuntimePermission());\n        intent.putExtra(\"runtime_perm_desc\", getRuntimePermissionDesc(activity));\n        intent.putExtra(KEY_OPTIONAL_PERM, getOptionalPermission());\n        intent.putExtra(KEY_OPTIONAL_PERM_DESC, getOptionalPermissionDesc(activity));\n        intent.putExtra(KEY_OPTIONAL_PERM_SHOW, false);\n        intent.putExtra(KEY_AGREE_DESC, activity.getResources().getString(R.string.new_cta_agree_desc));\n        intent.putExtra(\"user_agreement\", \"https://cemiuiler.sevtinge.cc/Protocol\");\n        intent.putExtra(\"privacy_policy\", \"https://cemiuiler.sevtinge.cc/Privacy\");\n        intent.putExtra(KEY_USE_NETWORK, false);\n        intent.putExtra(KEY_SHOW_LOCK, false);\n        try {\n            /*if (!supportNewPermissionStyle() || activity.getPackageManager().queryIntentActivities(intent, 0).size() <= 0) {\n                return false;\n            }*/\n            activity.startActivityForResult(intent, requestCode);\n            return true;\n        } catch (Exception unused) {\n            return false;\n        }\n    }\n\n    private static String[] getRuntimePermission() {\n        return new String[0];\n    }\n\n    private static String[] getRuntimePermissionDesc(Activity activity) {\n        return new String[0];\n    }\n\n    private static String[] getOptionalPermission() {\n        return new String[0];\n    }\n\n    private static String[] getOptionalPermissionDesc(Activity activity) {\n        return new String[0];\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/DexKit.kt",
    "content": "package com.sevtinge.cemiuiler.utils\n\nimport de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam\nimport org.luckypray.dexkit.DexKitBridge\nimport org.luckypray.dexkit.query.enums.StringMatchType\nimport org.luckypray.dexkit.query.matchers.ClassMatcher\nimport org.luckypray.dexkit.query.matchers.MethodMatcher\n\n/**\n * DexKit 工具\n */\nobject DexKit {\n    private lateinit var hostDir: String\n    private var isInitialized = false\n    val dexKitBridge: DexKitBridge by lazy {\n        System.loadLibrary(\"dexkit\")\n        DexKitBridge.create(hostDir)!!.also {\n            isInitialized = true\n        }\n    }\n\n    /**\n     * 初始化 DexKit 的 apk 完整路径\n     */\n    fun initDexKit(loadPackageParam: LoadPackageParam) {\n        hostDir = loadPackageParam.appInfo.sourceDir\n    }\n\n    /**\n     * 关闭 DexKit bridge\n     */\n    fun closeDexKit() {\n        if (isInitialized) dexKitBridge.close()\n    }\n\n    /**\n     * DexKit 封装查找方式\n     */\n    fun MethodMatcher.addUsingStringsEquals(vararg strings: String) {\n        for (string in strings) {\n            addUsingString(string, StringMatchType.Equals)\n        }\n    }\n\n    fun ClassMatcher.addUsingStringsEquals(vararg strings: String) {\n        for (string in strings) {\n            addUsingString(string, StringMatchType.Equals)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/DialogHelper.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.app.Activity;\nimport android.content.DialogInterface;\n\nimport moralnorm.appcompat.app.AlertDialog;\n\npublic class DialogHelper {\n\n    public static void showDialog(Activity activity, String title, String message) {\n        showDialog(activity, title, message, null);\n    }\n\n    public static void showDialog(Activity activity, String title, String message, DialogInterface.OnClickListener onClickListener) {\n        new AlertDialog.Builder(activity)\n            .setTitle(title)\n            .setMessage(message)\n            .setPositiveButton(android.R.string.ok, onClickListener)\n            .setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss())\n            .show();\n    }\n\n    public static void showDialog(Activity activity, int title, int message, DialogInterface.OnClickListener onClickListener) {\n        new AlertDialog.Builder(activity)\n            .setTitle(title)\n            .setMessage(message)\n            .setPositiveButton(android.R.string.ok, onClickListener)\n            .setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss())\n            .show();\n    }\n\n\n    public static void showPositiveButtonDialog(Activity activity, String title, String message, DialogInterface.OnClickListener onClickListener) {\n        new AlertDialog.Builder(activity)\n            .setTitle(title)\n            .setMessage(message)\n            .setPositiveButton(android.R.string.ok, onClickListener)\n            .show();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/DisplayUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.content.Context;\nimport android.util.DisplayMetrics;\nimport android.view.WindowManager;\n\npublic class DisplayUtils {\n\n    public static float mDensity;\n    public static int mDensityDpi;\n    public static DisplayMetrics mDisplayMetrics;\n    public static int mHeightDps;\n    public static int mHeightPixels;\n    public static int mWidthDps;\n    public static int mWidthPixels;\n\n    public static void getAndroidScreenProperty(Context context) {\n        mDisplayMetrics = new DisplayMetrics();\n        ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(mDisplayMetrics);\n        mWidthPixels = mDisplayMetrics.widthPixels;\n        mHeightPixels = mDisplayMetrics.heightPixels;\n        mDensity = mDisplayMetrics.density;\n        mDensityDpi = mDisplayMetrics.densityDpi;\n        float f = mDensity;\n        mWidthDps = (int) ((float) mWidthPixels / f);\n        mHeightDps = (int) ((float) mHeightPixels / f);\n    }\n\n    public static int dip2px(Context context, float dipValue) {\n        final float scale = context.getResources().getDisplayMetrics().density;\n        return (int) (dipValue * scale + 0.5f);\n    }\n\n    public static int px2dip(Context context, float pxValue) {\n        final float scale = context.getResources().getDisplayMetrics().density;\n        return (int) (pxValue / scale + 0.5f);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/Helpers.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogI;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.app.ActivityOptions;\nimport android.app.Application;\nimport android.content.Context;\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.database.ContentObserver;\nimport android.database.Cursor;\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.graphics.LinearGradient;\nimport android.graphics.Matrix;\nimport android.graphics.Rect;\nimport android.graphics.Shader;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Environment;\nimport android.os.Handler;\nimport android.util.LruCache;\nimport android.widget.TextView;\n\nimport com.sevtinge.cemiuiler.BuildConfig;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.provider.SharedPrefsProvider;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.io.File;\nimport java.lang.reflect.Method;\nimport java.util.LinkedHashSet;\nimport java.util.Set;\nimport java.util.concurrent.Executor;\nimport java.util.concurrent.Executors;\n\nimport de.robv.android.xposed.XC_MethodHook;\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\nimport de.robv.android.xposed.callbacks.XC_LoadPackage;\nimport moralnorm.internal.utils.ReflectUtils;\n\npublic class Helpers {\n\n    private static final String TAG = \"Helpers\";\n\n    @SuppressLint(\"StaticFieldLeak\")\n    public static Context mModuleContext = null;\n    public static boolean isModuleActive = false;\n    public static int XposedVersion = 0;\n\n    public static String mAppModulePkg = BuildConfig.APPLICATION_ID;\n\n    public static final int REQUEST_PERMISSIONS_BACKUP = 1;\n    public static final int REQUEST_PERMISSIONS_RESTORE = 2;\n\n\n    public static LruCache<String, Bitmap> memoryCache = new LruCache<>((int) (Runtime.getRuntime().maxMemory() / 1024) / 2) {\n        @Override\n        protected int sizeOf(String key, Bitmap icon) {\n            if (icon != null) {\n                return icon.getAllocationByteCount() / 1024;\n            } else {\n                return 130 * 130 * 4 / 1024;\n            }\n        }\n    };\n\n    public static synchronized Context getProtectedContext(Context context) {\n        return context.createDeviceProtectedStorageContext();\n    }\n\n    public static boolean checkStorageReadable(Activity activity) {\n        String state = Environment.getExternalStorageState();\n        if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY) || state.equals(Environment.MEDIA_MOUNTED)) {\n            return true;\n        } else {\n            DialogHelper.showDialog(activity, \"警告！\", \"无法访问任何合适的存储空间\");\n            return false;\n        }\n    }\n\n    public static Object getStaticObjectFieldSilently(Class<?> clazz, String fieldName) {\n        try {\n            return XposedHelpers.getStaticObjectField(clazz, fieldName);\n        } catch (Throwable t) {\n            return null;\n        }\n    }\n\n    public static class MimeType {\n        public static int IMAGE = 1;\n        public static int AUDIO = 2;\n        public static int VIDEO = 4;\n        public static int DOCUMENT = 8;\n        public static int ARCHIVE = 16;\n        public static int LINK = 32;\n        public static int OTHERS = 64;\n        public static int ALL = IMAGE | AUDIO | VIDEO | DOCUMENT | ARCHIVE | LINK | OTHERS;\n    }\n\n    public static boolean isDackMode(Context context) {\n        return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;\n    }\n\n    @SuppressLint(\"DiscouragedApi\")\n    public static int getSystemBackgroundColor(Context context) {\n        int black = Color.BLACK;\n        int white = Color.WHITE;\n        try {\n            black = context.getResources().getColor(context.getResources().getIdentifier(\"black\", \"color\", \"miui\"), context.getTheme());\n            white = context.getResources().getColor(context.getResources().getIdentifier(\"white\", \"color\", \"miui\"), context.getTheme());\n        } catch (Throwable ignore) {\n        }\n        return isDackMode(context) ? black : white;\n    }\n\n    public static Object proxySystemProperties(String method, String prop, int val, ClassLoader classLoader) {\n        return XposedHelpers.callStaticMethod(XposedHelpers.findClassIfExists(\"android.os.SystemProperties\", classLoader),\n            method, prop, val);\n    }\n\n\n    public static void applyShimmer(TextView title) {\n        if (title.getPaint().getShader() != null) return;\n        int width = title.getResources().getDisplayMetrics().widthPixels;\n        Shader shimmer = new LinearGradient(0, 0, width, 0, new int[]{0xFF5DA5FF, 0xFF9B8AFB, 0xFFD176F2, 0xFFFE88B2, 0xFFD176F2, 0xFF9B8AFB}, new float[]{0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f}, Shader.TileMode.REPEAT);\n        Matrix matrix = new Matrix();\n        matrix.setTranslate(0, 0);\n        shimmer.setLocalMatrix(matrix);\n        title.getPaint().setShader(shimmer);\n    }\n\n\n    // Permissions 权限\n    @SuppressLint({\"SetWorldReadable\", \"SetWorldWritable\"})\n    public static void fixPermissionsAsync(Context context) {\n        Executor executor = Executors.newSingleThreadExecutor();\n        executor.execute(() -> {\n            try {\n                Thread.sleep(500);\n            } catch (Throwable ignore) {\n            }\n            File pkgFolder = context.getDataDir();\n            if (pkgFolder.exists()) {\n                pkgFolder.setExecutable(true, false);\n                pkgFolder.setReadable(true, false);\n                pkgFolder.setWritable(true, false);\n            }\n            File sharedPrefsFolder = new File(PrefsUtils.getSharedPrefsPath());\n            if (sharedPrefsFolder.exists()) {\n                sharedPrefsFolder.setExecutable(true, false);\n                sharedPrefsFolder.setReadable(true, false);\n                sharedPrefsFolder.setWritable(true, false);\n            }\n            File sharedPrefsFile = new File(PrefsUtils.getSharedPrefsFile());\n            if (sharedPrefsFile.exists()) {\n                sharedPrefsFile.setReadable(true, false);\n                sharedPrefsFile.setExecutable(true, false);\n                sharedPrefsFile.setWritable(true, false);\n            }\n        });\n    }\n\n    private static String getCallerMethod() {\n        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();\n        for (StackTraceElement el : stackTrace)\n            if (el != null && el.getClassName().startsWith(mAppModulePkg + \".module\"))\n                return el.getMethodName();\n        return stackTrace[4].getMethodName();\n    }\n\n    public static void hookMethod(Method method, MethodHook callback) {\n        try {\n            XposedBridge.hookMethod(method, callback);\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook \" + method.getName() + \" method\");\n        }\n    }\n\n    public static Context findContext() {\n        Context context = null;\n        try {\n            context = (Application) XposedHelpers.callStaticMethod(XposedHelpers.findClass(\"android.app.ActivityThread\", null), \"currentApplication\");\n            if (context == null) {\n                Object currentActivityThread = XposedHelpers.callStaticMethod(XposedHelpers.findClass(\"android.app.ActivityThread\", null), \"currentActivityThread\");\n                if (currentActivityThread != null)\n                    context = (Context) XposedHelpers.callMethod(currentActivityThread, \"getSystemContext\");\n            }\n        } catch (Throwable ignore) {\n        }\n        return context;\n    }\n\n\n    public static synchronized Context getModuleContext(Context context) throws Throwable {\n        return getModuleContext(context, null);\n    }\n\n    public static synchronized Context getModuleContext(Context context, Configuration config) throws Throwable {\n        if (mModuleContext == null)\n            mModuleContext = context.createPackageContext(mAppModulePkg, Context.CONTEXT_IGNORE_SECURITY).createDeviceProtectedStorageContext();\n        return config == null ? mModuleContext : mModuleContext.createConfigurationContext(config);\n    }\n\n    public static synchronized Resources getModuleRes(Context context) throws Throwable {\n        Configuration config = context.getResources().getConfiguration();\n        Context moduleContext = getModuleContext(context);\n        return (config == null ? moduleContext.getResources() : moduleContext.createConfigurationContext(config).getResources());\n    }\n\n    public static ActivityOptions makeFreeformActivityOptions(Context context, String str) {\n\n        ActivityOptions activityOptions;\n        try {\n            activityOptions = (ActivityOptions) ReflectUtils.callStaticObjectMethod(Class.forName(\"android.util.MiuiMultiWindowUtils\"), ActivityOptions.class, \"getActivityOptions\", new Class[]{Context.class, String.class, Boolean.TYPE, Boolean.TYPE}, new Object[]{context, str, true, false});\n        } catch (Exception e) {\n            LogD(TAG, \"MiuiMultiWindowUtils getActivityOptions error\", e);\n            activityOptions = null;\n        }\n\n        if (activityOptions != null) {\n            return activityOptions;\n        }\n\n\n        ActivityOptions makeBasic = ActivityOptions.makeBasic();\n        ReflectUtils.callObjectMethod(\"android.app.ActivityOptions\", \"setLaunchWindowingMode\", new Class[]{int.class}, 5);\n        Rect rect = (Rect) ReflectUtils.callObjectMethod(\"android.util.MiuiMultiWindowUtils\", \"getFreeformRect\", new Class[]{Context.class}, new Object[]{context});\n        makeBasic.setLaunchBounds(rect);\n        return makeBasic;\n    }\n\n    public static XC_MethodHook.Unhook findAndHookMethodUseUnhook(String className, ClassLoader classLoader, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            return XposedHelpers.findAndHookMethod(className, classLoader, methodName, parameterTypesAndCallback);\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook \" + methodName + \" method in \" + className);\n            return null;\n        }\n    }\n\n    public static XC_MethodHook.Unhook findAndHookMethodUseUnhook(Class<?> clazz, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            return XposedHelpers.findAndHookMethod(clazz, methodName, parameterTypesAndCallback);\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook \" + methodName + \" method in \" + clazz.getCanonicalName());\n            return null;\n        }\n    }\n\n    public static void findAndHookMethod(String className, ClassLoader classLoader, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            XposedHelpers.findAndHookMethod(className, classLoader, methodName, parameterTypesAndCallback);\n            LogI(getCallerMethod(), \"Success to hook \" + methodName + \" method in \" + className);\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook \" + methodName + \" method in \" + className);\n        }\n    }\n\n    public static void findAndHookMethod(Class<?> clazz, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            XposedHelpers.findAndHookMethod(clazz, methodName, parameterTypesAndCallback);\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook \" + methodName + \" method in \" + clazz.getCanonicalName());\n        }\n    }\n\n    public static boolean findAndHookMethodSilently(String className, ClassLoader classLoader, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            XposedHelpers.findAndHookMethod(className, classLoader, methodName, parameterTypesAndCallback);\n            LogI(getCallerMethod(), \"Success to hook \" + methodName + \" method in \" + className);\n            return true;\n        } catch (Throwable t) {\n            return false;\n        }\n    }\n\n    public static boolean findAndHookMethodSilently(Class<?> clazz, String methodName, Object... parameterTypesAndCallback) {\n        try {\n            XposedHelpers.findAndHookMethod(clazz, methodName, parameterTypesAndCallback);\n            LogI(getCallerMethod(), \"Success to hook \" + methodName + \" method in \" + clazz.getCanonicalName());\n            return true;\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook \" + methodName + \" method in \" + clazz.getCanonicalName() + \" Error: \" + t);\n            return false;\n        }\n    }\n\n    public static void findAndHookConstructor(String className, ClassLoader classLoader, Object... parameterTypesAndCallback) {\n        try {\n            XposedHelpers.findAndHookConstructor(className, classLoader, parameterTypesAndCallback);\n            LogI(getCallerMethod(), \"Success to hook constructor in \" + className);\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook constructor in \" + className + \" Error: \" + t);\n        }\n    }\n\n    public static void findAndHookConstructor(Class<?> hookClass, Object... parameterTypesAndCallback) {\n        try {\n            XposedHelpers.findAndHookConstructor(hookClass, parameterTypesAndCallback);\n            LogI(getCallerMethod(), \"Success to hook constructor in \" + hookClass);\n        } catch (Throwable t) {\n            LogI(getCallerMethod(), \"Failed to hook constructor in \" + hookClass + \" Error: \" + t);\n        }\n    }\n\n\n    public static void hookAllMethods(String className, ClassLoader classLoader, String methodName, XC_MethodHook callback) {\n        try {\n            Class<?> hookClass = XposedHelpers.findClassIfExists(className, classLoader);\n            if (hookClass == null || XposedBridge.hookAllMethods(hookClass, methodName, callback).size() == 0)\n                ;\n        } catch (Throwable t) {\n            LogD(\"hookAllMethods\", className + \" is abnormal\", t);\n        }\n    }\n\n    public static void hookAllMethods(Class<?> hookClass, String methodName, XC_MethodHook callback) {\n        try {\n            if (XposedBridge.hookAllMethods(hookClass, methodName, callback).size() == 0)\n                LogI(getCallerMethod(), \"Failed to hook \" + methodName + \" method in \" + hookClass.getCanonicalName());\n        } catch (Throwable t) {\n            LogD(\"hookAllMethods\", hookClass + \" is abnormal\", t);\n        }\n    }\n\n    public static void hookAllConstructors(String className, ClassLoader classLoader, MethodHook callback) {\n        try {\n            Class<?> hookClass = XposedHelpers.findClassIfExists(className, classLoader);\n            if (hookClass == null || XposedBridge.hookAllConstructors(hookClass, callback).size() == 0)\n                LogI(getCallerMethod(), \"Failed to hook \" + className + \" constructor\");\n        } catch (Throwable t) {\n            LogD(\"hookAllConstructors\", className + \" is abnormal\", t);\n        }\n    }\n\n    public static void hookAllConstructors(Class<?> hookClass, MethodHook callback) {\n        try {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                XposedLogUtils.logI(getCallerMethod(), \"Success to hook \" + hookClass.getPackageName() + \"/\" + hookClass.getCanonicalName() + \" constructor\");\n            }\n            if (XposedBridge.hookAllConstructors(hookClass, callback).size() == 0)\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                    XposedLogUtils.logI(getCallerMethod(), \"Failed to hook \" + hookClass.getPackageName() + \"/\" + hookClass.getCanonicalName() + \" constructor\");\n                }\n        } catch (Throwable t) {\n            LogD(\"hookAllMethods\", hookClass + \" is abnormal\", t);\n        }\n    }\n\n\n    public static void hookAllMethodsSilently(String className, ClassLoader classLoader, String methodName, XC_MethodHook callback) {\n        try {\n            Class<?> hookClass = XposedHelpers.findClassIfExists(className, classLoader);\n            if (hookClass != null) {\n                XposedBridge.hookAllMethods(hookClass, methodName, callback).size();\n            }\n        } catch (Throwable t) {\n            LogD(\"hookAllMethodsSilently\", className + \" is abnormal\", t);\n        }\n    }\n\n\n    public static boolean hookAllMethodsSilently(Class<?> hookClass, String methodName, XC_MethodHook callback) {\n        try {\n            return hookClass != null && XposedBridge.hookAllMethods(hookClass, methodName, callback).size() > 0;\n        } catch (Throwable t) {\n            return false;\n        }\n    }\n\n    public static class SharedPrefObserver extends ContentObserver {\n\n        enum PrefType {\n            Any, String, StringSet, Integer, Boolean\n        }\n\n        PrefType prefType;\n        Context ctx;\n        String prefName;\n        String prefDefValueString;\n        int prefDefValueInt;\n        boolean prefDefValueBool;\n\n        public SharedPrefObserver(Context context, android.os.Handler handler) {\n            super(handler);\n            ctx = context;\n            prefType = PrefType.Any;\n            registerObserver();\n        }\n\n        public SharedPrefObserver(Context context, android.os.Handler handler, String name, String defValue) {\n            super(handler);\n            ctx = context;\n            prefName = name;\n            prefType = PrefType.String;\n            prefDefValueString = defValue;\n            registerObserver();\n        }\n\n        public SharedPrefObserver(Context context, android.os.Handler handler, String name) {\n            super(handler);\n            ctx = context;\n            prefName = name;\n            prefType = PrefType.StringSet;\n            registerObserver();\n        }\n\n        public SharedPrefObserver(Context context, android.os.Handler handler, String name, int defValue) {\n            super(handler);\n            ctx = context;\n            prefType = PrefType.Integer;\n            prefName = name;\n            prefDefValueInt = defValue;\n            registerObserver();\n        }\n\n        public SharedPrefObserver(Context context, Handler handler, String name, boolean defValue) {\n            super(handler);\n            ctx = context;\n            prefType = PrefType.Boolean;\n            prefName = name;\n            prefDefValueBool = defValue;\n            registerObserver();\n        }\n\n        void registerObserver() {\n            Uri uri = null;\n            if (prefType == PrefType.String)\n                uri = stringPrefToUri(prefName, prefDefValueString);\n            else if (prefType == PrefType.StringSet)\n                uri = stringSetPrefToUri(prefName);\n            else if (prefType == PrefType.Integer)\n                uri = intPrefToUri(prefName, prefDefValueInt);\n            else if (prefType == PrefType.Boolean)\n                uri = boolPrefToUri(prefName, prefDefValueBool);\n            else if (prefType == PrefType.Any)\n                uri = anyPrefToUri();\n            if (uri != null)\n                ctx.getContentResolver().registerContentObserver(uri, prefType == PrefType.Any, this);\n        }\n\n        @Override\n        public void onChange(boolean selfChange, Uri uri) {\n            if (prefType == PrefType.Any)\n                onChange(uri);\n            else\n                onChange(selfChange);\n        }\n\n        @Override\n        public void onChange(boolean selfChange) {\n            if (selfChange) return;\n            if (prefType == PrefType.String)\n                onChange(prefName, prefDefValueString);\n            else if (prefType == PrefType.StringSet)\n                onChange(prefName);\n            else if (prefType == PrefType.Integer)\n                onChange(prefName, prefDefValueInt);\n            else if (prefType == PrefType.Boolean)\n                onChange(prefName, prefDefValueBool);\n        }\n\n        public void onChange(Uri uri) {\n        }\n\n        public void onChange(String name) {\n        }\n\n        public void onChange(String name, String defValue) {\n        }\n\n        public void onChange(String name, int defValue) {\n        }\n\n        public void onChange(String name, boolean defValue) {\n        }\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public static Set<String> getSharedStringSetPref(Context context, String name) {\n        Uri uri = stringSetPrefToUri(name);\n        try {\n            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);\n            if (cursor != null) {\n                Set<String> prefValue = new LinkedHashSet<>();\n                while (cursor.moveToNext()) {\n                    prefValue.add(cursor.getString(0));\n                }\n                cursor.close();\n                return prefValue;\n            } else {\n                LogI(\"ContentResolver\", \"[\" + name + \"] Cursor fail: null\");\n            }\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n\n        LinkedHashSet<String> empty = new LinkedHashSet<>();\n        if (BaseHook.mPrefsMap.containsKey(name)) {\n            return (Set<String>) BaseHook.mPrefsMap.getObject(name, empty);\n        } else {\n            return empty;\n        }\n    }\n\n    public static int getSharedIntPref(Context context, String name, int defValue) {\n        Uri uri = intPrefToUri(name, defValue);\n        try {\n            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);\n            if (cursor != null && cursor.moveToFirst()) {\n                int prefValue = cursor.getInt(0);\n                cursor.close();\n                return prefValue;\n            } else LogI(\"ContentResolver\", \"[\" + name + \"] Cursor fail: \" + cursor);\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n\n        if (BaseHook.mPrefsMap.containsKey(name))\n            return (int) BaseHook.mPrefsMap.getObject(name, defValue);\n        else\n            return defValue;\n    }\n\n    public static boolean getSharedBoolPref(Context context, String name, boolean defValue) {\n        Uri uri = boolPrefToUri(name, defValue);\n        try {\n            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);\n            if (cursor != null && cursor.moveToFirst()) {\n                int prefValue = cursor.getInt(0);\n                cursor.close();\n                return prefValue == 1;\n            } else LogI(\"ContentResolver\", \"[\" + name + \"] Cursor fail: \" + cursor);\n        } catch (Throwable t) {\n            LogD(\"ContentResolver\", t);\n        }\n\n        if (BaseHook.mPrefsMap.containsKey(name))\n            return (boolean) BaseHook.mPrefsMap.getObject(name, false);\n        else\n            return defValue;\n    }\n\n    public static Uri stringPrefToUri(String name, String defValue) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/string/\" + name + \"/\" + defValue);\n    }\n\n    public static Uri stringSetPrefToUri(String name) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/stringset/\" + name);\n    }\n\n    public static Uri intPrefToUri(String name, int defValue) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/integer/\" + name + \"/\" + defValue);\n    }\n\n    public static Uri boolPrefToUri(String name, boolean defValue) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/boolean/\" + name + \"/\" + (defValue ? '1' : '0'));\n    }\n\n    public static Uri shortcutIconPrefToUri(String name) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/shortcut_icon/\" + name);\n    }\n\n    public static Uri anyPrefToUri() {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/pref/\");\n    }\n\n    public static class MethodHook extends XC_MethodHook {\n\n\n        protected void before(MethodHookParam param) throws Throwable {\n        }\n\n        protected void after(MethodHookParam param) throws Throwable {\n        }\n\n        public MethodHook() {\n            super();\n        }\n\n        public MethodHook(int priority) {\n            super(priority);\n        }\n\n        @Override\n        public final void beforeHookedMethod(MethodHookParam param) throws Throwable {\n            try {\n                this.before(param);\n            } catch (Throwable t) {\n                LogD(\"beforeHook\", t);\n            }\n        }\n\n        @Override\n        public final void afterHookedMethod(MethodHookParam param) throws Throwable {\n            try {\n                this.after(param);\n            } catch (Throwable t) {\n                LogD(\"afterHook\", t);\n            }\n        }\n    }\n\n    public static String getPackageVersionName(XC_LoadPackage.LoadPackageParam lpparam) {\n        try {\n            Class<?> parserCls = XposedHelpers.findClass(\"android.content.pm.PackageParser\", lpparam.classLoader);\n            Object parser = parserCls.newInstance();\n            File apkPath = new File(lpparam.appInfo.sourceDir);\n            Object pkg = XposedHelpers.callMethod(parser, \"parsePackage\", apkPath, 0);\n            String versionName = (String) XposedHelpers.getObjectField(pkg, \"mVersionName\");\n            XposedLogUtils.logI(\"getPackageVersionName\", lpparam + \" versionName is \" + versionName);\n            return versionName;\n        } catch (Throwable e) {\n            XposedLogUtils.logW(\"getPackageVersionName\", e);\n            return \"null\";\n        }\n    }\n\n    public static int getPackageVersionCode(XC_LoadPackage.LoadPackageParam lpparam) {\n        try {\n            Class<?> parserCls = XposedHelpers.findClass(\"android.content.pm.PackageParser\", lpparam.classLoader);\n            Object parser = parserCls.newInstance();\n            File apkPath = new File(lpparam.appInfo.sourceDir);\n            Object pkg = XposedHelpers.callMethod(parser, \"parsePackage\", apkPath, 0);\n            int versionCode = XposedHelpers.getIntField(pkg, \"mVersionCode\");\n            XposedLogUtils.logI(\"getPackageVersionCode\", lpparam + \" versionCode is \" + versionCode);\n            return versionCode;\n        } catch (Throwable e) {\n            XposedLogUtils.logW(\"getPackageVersionCode\", e);\n            return -1;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/HookUtils.kt",
    "content": "package com.sevtinge.cemiuiler.utils\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport android.os.Build\nimport android.view.View\nimport androidx.annotation.RequiresApi\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.logE\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.logW\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedHelpers\n\nobject HookUtils {\n\n    fun dip2px(context: Context, dpValue: Float): Float {\n        val scale = context.resources.displayMetrics.density\n        return dpValue * scale + 0.5f\n    }\n\n    fun getClass(className: String, classLoader: ClassLoader): Class<*>? {\n        val result = XposedHelpers.findClassIfExists(\n            className,\n            classLoader\n        )\n        if (result == null) {\n            logE(\"getClass\", \"'$className' is NOT found.\")\n        }\n        return result\n    }\n\n    fun replaceMethodResult(\n        className: String,\n        classLoader: ClassLoader,\n        methodName: String,\n        result: Any,\n        vararg args: Any?\n    ) {\n        try {\n            XposedHelpers.findAndHookMethod(\n                className,\n                classLoader,\n                methodName,\n                *args,\n                XC_MethodReplacement.returnConstant(result)\n            )\n        } catch (e: Throwable) {\n            logW(\"replaceMethodResult\", e)\n        }\n    }\n\n    fun getValueByField(target: Any, fieldName: String, clazz: Class<*>? = null): Any? {\n        var targetClass = clazz\n        if (targetClass == null) {\n            targetClass = target.javaClass\n        }\n        return try {\n            val field = targetClass.getDeclaredField(fieldName)\n            field.isAccessible = true\n            field.get(target)\n        } catch (e: Throwable) {\n            if (targetClass.superclass == null) {\n                null\n            } else {\n                getValueByField(target, fieldName, targetClass.superclass)\n            }\n        }\n    }\n\n    @RequiresApi(Build.VERSION_CODES.S)\n    fun createBlurDrawable(\n        view: View,\n        blurRadius: Int,\n        cornerRadius: Int,\n        color: Int? = null\n    ): Drawable? {\n        try {\n            val mViewRootImpl =\n                XposedHelpers.callMethod(view, \"getViewRootImpl\") ?: return null\n            val blurDrawable =\n                XposedHelpers.callMethod(mViewRootImpl, \"createBackgroundBlurDrawable\") as Drawable\n            XposedHelpers.callMethod(blurDrawable, \"setBlurRadius\", blurRadius)\n            XposedHelpers.callMethod(blurDrawable, \"setCornerRadius\", cornerRadius)\n            if (color != null) {\n                XposedHelpers.callMethod(blurDrawable, \"setColor\",color)\n            }\n            return blurDrawable\n        } catch (e: Throwable) {\n            logW(\"createBlurDrawable\", \"Create BlurDrawable Error\", e)\n            return null\n        }\n    }\n\n    fun isBlurDrawable(drawable: Drawable?): Boolean {\n        // 不够严谨，可以用\n        if (drawable == null) {\n            return false\n        }\n        val drawableClassName = drawable.javaClass.name\n        return drawableClassName.contains(\"BackgroundBlurDrawable\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/KotlinXposedHelper.kt",
    "content": "@file:Suppress(\"unused\")\n\npackage com.sevtinge.cemiuiler.utils\n\nimport android.annotation.SuppressLint\nimport android.content.res.XResources\nimport com.github.kyuubiran.ezxhelper.EzXHelper.classLoader\nimport com.github.kyuubiran.ezxhelper.Log\nimport dalvik.system.BaseDexClassLoader\nimport de.robv.android.xposed.XC_MethodHook\nimport de.robv.android.xposed.XC_MethodHook.MethodHookParam\nimport de.robv.android.xposed.XC_MethodReplacement\nimport de.robv.android.xposed.XposedBridge.*\nimport de.robv.android.xposed.XposedHelpers.*\nimport de.robv.android.xposed.callbacks.XC_LayoutInflated\nimport java.io.BufferedReader\nimport java.io.DataOutputStream\nimport java.io.IOException\nimport java.io.InputStreamReader\nimport java.lang.reflect.Field\nimport java.lang.reflect.Member\nimport java.lang.reflect.Modifier\nimport java.util.Enumeration\n\ntypealias MethodHookParam = MethodHookParam\ntypealias Replacer = (MethodHookParam) -> Any?\ntypealias Hooker = (MethodHookParam) -> Unit\n\nfun Class<*>.hookMethod(method: String?, vararg args: Any?) = try {\n    findAndHookMethod(this, method, *args)\n} catch (e: NoSuchMethodError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    null\n}\n\nfun Member.hookMethod(callback: XC_MethodHook) = try {\n    hookMethod(this, callback)\n} catch (e: Throwable) {\n    Log.e(e)\n    null\n}\n\ninline fun MethodHookParam.callHooker(crossinline hooker: Hooker) = try {\n    hooker(this)\n} catch (e: Throwable) {\n    Log.e(\"Error occurred calling hooker on ${this.method}\")\n    Log.e(e)\n}\n\ninline fun MethodHookParam.callReplacer(crossinline replacer: Replacer) = try {\n    replacer(this)\n} catch (e: Throwable) {\n    Log.e(\"Error occurred calling replacer on ${this.method}\")\n    Log.e(e)\n    null\n}\n\ninline fun Member.replaceMethod(crossinline replacer: Replacer) = hookMethod(object : XC_MethodReplacement() {\n    override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer)\n})\n\ninline fun Member.hookAfterMethod(crossinline hooker: Hooker) = hookMethod(object : XC_MethodHook() {\n    override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n})\n\ninline fun Member.hookBeforeMethod(crossinline hooker: (MethodHookParam) -> Unit) =\n    hookMethod(object : XC_MethodHook() {\n        override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\ninline fun Class<*>.hookBeforeMethod(\n    method: String?, vararg args: Any?, crossinline hooker: Hooker\n) = hookMethod(method, *args, object : XC_MethodHook() {\n    override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n})\n\ninline fun Class<*>.hookAfterMethod(\n    method: String?, vararg args: Any?, crossinline hooker: Hooker\n) = hookMethod(method, *args, object : XC_MethodHook() {\n    override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n})\n\ninline fun Class<*>.replaceMethod(\n    method: String?, vararg args: Any?, crossinline replacer: Replacer\n) = hookMethod(method, *args, object : XC_MethodReplacement() {\n    override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer)\n})\n\nfun Class<*>.hookAllMethods(methodName: String?, hooker: XC_MethodHook): Set<XC_MethodHook.Unhook> = try {\n    hookAllMethods(this, methodName, hooker)\n} catch (e: NoSuchMethodError) {\n    Log.e(e)\n    emptySet()\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    emptySet()\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    emptySet()\n}\n\ninline fun Class<*>.hookBeforeAllMethods(methodName: String?, crossinline hooker: Hooker) =\n    hookAllMethods(methodName, object : XC_MethodHook() {\n        override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\ninline fun Class<*>.hookAfterAllMethods(methodName: String?, crossinline hooker: Hooker) =\n    hookAllMethods(methodName, object : XC_MethodHook() {\n        override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n\n    })\n\ninline fun Class<*>.replaceAllMethods(methodName: String?, crossinline replacer: Replacer) =\n    hookAllMethods(methodName, object : XC_MethodReplacement() {\n        override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer)\n    })\n\nfun Class<*>.hookConstructor(vararg args: Any?) = try {\n    findAndHookConstructor(this, *args)\n} catch (e: NoSuchMethodError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    null\n}\n\ninline fun Class<*>.hookBeforeConstructor(vararg args: Any?, crossinline hooker: Hooker) =\n    hookConstructor(*args, object : XC_MethodHook() {\n        override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\ninline fun Class<*>.hookAfterConstructor(vararg args: Any?, crossinline hooker: Hooker) =\n    hookConstructor(*args, object : XC_MethodHook() {\n        override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\ninline fun Class<*>.replaceConstructor(vararg args: Any?, crossinline hooker: Hooker) =\n    hookConstructor(*args, object : XC_MethodReplacement() {\n        override fun replaceHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\nfun Class<*>.hookAllConstructors(hooker: XC_MethodHook): Set<XC_MethodHook.Unhook> = try {\n    hookAllConstructors(this, hooker)\n} catch (e: NoSuchMethodError) {\n    Log.e(e)\n    emptySet()\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    emptySet()\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    emptySet()\n}\n\ninline fun Class<*>.hookAfterAllConstructors(crossinline hooker: Hooker) =\n    hookAllConstructors(object : XC_MethodHook() {\n        override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\ninline fun Class<*>.hookBeforeAllConstructors(crossinline hooker: Hooker) =\n    hookAllConstructors(object : XC_MethodHook() {\n        override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\ninline fun Class<*>.replaceAllConstructors(crossinline hooker: Hooker) =\n    hookAllConstructors(object : XC_MethodReplacement() {\n        override fun replaceHookedMethod(param: MethodHookParam) = param.callHooker(hooker)\n    })\n\nfun String.hookMethod(\n    method: String?, vararg args: Any?\n) = try {\n    findClass().hookMethod(method, *args)\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    null\n}\n\ninline fun String.hookBeforeMethod(\n    method: String?, vararg args: Any?, crossinline hooker: Hooker\n) = try {\n    findClass().hookBeforeMethod(method, *args, hooker = hooker)\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    null\n}\n\ninline fun String.hookAfterMethod(\n    method: String?, vararg args: Any?, crossinline hooker: Hooker\n) = try {\n    findClass().hookAfterMethod(method, *args, hooker = hooker)\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    null\n}\n\ninline fun String.replaceMethod(\n    method: String?, vararg args: Any?, crossinline replacer: Replacer\n) = try {\n    findClass().replaceMethod(method, *args, replacer = replacer)\n} catch (e: ClassNotFoundError) {\n    Log.e(e)\n    null\n} catch (e: ClassNotFoundException) {\n    Log.e(e)\n    null\n}\n\nfun MethodHookParam.invokeOriginalMethod(): Any? = invokeOriginalMethod(method, thisObject, args)\n\ninline fun <T, R> T.runCatchingOrNull(func: T.() -> R?) = try {\n    func()\n} catch (e: Throwable) {\n    null\n}\n\nfun Any.getObjectField(field: String?): Any? = getObjectField(this, field)\n\nfun Any.getObjectFieldOrNull(field: String?): Any? = runCatchingOrNull {\n    getObjectField(this, field)\n}\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Any.getObjectFieldAs(field: String?) = getObjectField(this, field) as T\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Any.getObjectFieldOrNullAs(field: String?) = runCatchingOrNull {\n    getObjectField(this, field) as T\n}\n\nfun Any.getIntField(field: String?) = getIntField(this, field)\n\nfun Any.getIntFieldOrNull(field: String?) = runCatchingOrNull {\n    getIntField(this, field)\n}\n\nfun Any.getLongField(field: String?) = getLongField(this, field)\n\nfun Any.getLongFieldOrNull(field: String?) = runCatchingOrNull {\n    getLongField(this, field)\n}\n\nfun Any.getBooleanField(field: String?) = getBooleanField(this, field)\n\nfun Any.getBooleanFieldOrNull(field: String?) = runCatchingOrNull {\n    getBooleanField(this, field)\n}\n\nfun Any.callMethod(methodName: String?, vararg args: Any?): Any? = callMethod(this, methodName, *args)\n\nfun Any.callMethodOrNull(methodName: String?, vararg args: Any?): Any? = runCatchingOrNull {\n    callMethod(this, methodName, *args)\n}\n\nfun Class<*>.callStaticMethod(methodName: String?, vararg args: Any?): Any? = callStaticMethod(this, methodName, *args)\n\nfun Class<*>.callStaticMethodOrNull(methodName: String?, vararg args: Any?): Any? = runCatchingOrNull {\n    callStaticMethod(this, methodName, *args)\n}\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Class<*>.callStaticMethodAs(methodName: String?, vararg args: Any?) =\n    callStaticMethod(this, methodName, *args) as T\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Class<*>.callStaticMethodOrNullAs(methodName: String?, vararg args: Any?) = runCatchingOrNull {\n    callStaticMethod(this, methodName, *args) as T\n}\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Class<*>.getStaticObjectFieldAs(field: String?) = getStaticObjectField(this, field) as T\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Class<*>.getStaticObjectFieldOrNullAs(field: String?) = runCatchingOrNull {\n    getStaticObjectField(this, field) as T\n}\n\nfun Class<*>.getStaticObjectField(field: String?): Any? = getStaticObjectField(this, field)\n\nfun Class<*>.getStaticObjectFieldOrNull(field: String?): Any? = runCatchingOrNull {\n    getStaticObjectField(this, field)\n}\n\nfun Class<*>.setStaticObjectField(field: String?, obj: Any?) = apply {\n    setStaticObjectField(this, field, obj)\n}\n\nfun Class<*>.setStaticObjectFieldIfExist(field: String?, obj: Any?) = apply {\n    try {\n        setStaticObjectField(this, field, obj)\n    } catch (ignored: Throwable) {\n    }\n}\n\ninline fun <reified T> Class<*>.findFieldByExactType(): Field? = findFirstFieldByExactType(this, T::class.java)\n\nfun Class<*>.findFieldByExactType(type: Class<*>): Field? = findFirstFieldByExactType(this, type)\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Any.callMethodAs(methodName: String?, vararg args: Any?) = callMethod(this, methodName, *args) as T\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Any.callMethodOrNullAs(methodName: String?, vararg args: Any?) = runCatchingOrNull {\n    callMethod(this, methodName, *args) as T\n}\n\nfun Any.callMethod(methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?): Any? =\n    callMethod(this, methodName, parameterTypes, *args)\n\nfun Any.callMethodOrNull(\n    methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?\n): Any? = runCatchingOrNull {\n    callMethod(this, methodName, parameterTypes, *args)\n}\n\nfun Class<*>.callStaticMethod(\n    methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?\n): Any? = callStaticMethod(this, methodName, parameterTypes, *args)\n\nfun Class<*>.callStaticMethodOrNull(\n    methodName: String?, parameterTypes: Array<Class<*>>, vararg args: Any?\n): Any? = runCatchingOrNull {\n    callStaticMethod(this, methodName, parameterTypes, *args)\n}\n\nfun String.findClass(): Class<*> = findClass(this, classLoader)\n\nfun String.findClassOrNull(): Class<*>? = findClassIfExists(this, classLoader)\n\nfun Class<*>.new(vararg args: Any?): Any = newInstance(this, *args)\n\nfun Class<*>.new(parameterTypes: Array<Class<*>>, vararg args: Any?): Any = newInstance(this, parameterTypes, *args)\n\nfun Class<*>.findField(field: String?): Field = findField(this, field)\n\nfun Class<*>.findFieldOrNull(field: String?): Field? = findFieldIfExists(this, field)\n\ndata class ResourcesHookData(val type: String, val afterValue: Any)\n\nclass ResourcesHookMap<String, ResourcesHookData> : HashMap<String, ResourcesHookData>() {\n    fun isKeyExist(key: String): Boolean = getOrDefault(key, null) != null\n}\n\nfun <T> T.setIntField(field: String?, value: Int) = apply {\n    setIntField(this, field, value)\n}\n\nfun <T> T.setLongField(field: String?, value: Long) = apply {\n    setLongField(this, field, value)\n}\n\nfun <T> T.setFloatField(field: String?, value: Float) = apply {\n    setFloatField(this, field, value)\n}\n\nfun <T> T.setBooleanField(field: String?, value: Boolean) = apply {\n    setBooleanField(this, field, value)\n}\n\nfun <T> T.setObjectField(field: String?, value: Any?) = apply {\n    setObjectField(this, field, value)\n}\n\ninline fun XResources.hookLayout(\n    id: Int, crossinline hooker: (XC_LayoutInflated.LayoutInflatedParam) -> Unit\n) {\n    try {\n        hookLayout(id, object : XC_LayoutInflated() {\n            override fun handleLayoutInflated(liparam: LayoutInflatedParam) {\n                try {\n                    hooker(liparam)\n                } catch (e: Throwable) {\n                    Log.e(e)\n                }\n            }\n        })\n    } catch (e: Throwable) {\n        Log.e(e)\n    }\n}\n\n@SuppressLint(\"DiscouragedApi\")\ninline fun XResources.hookLayout(\n    pkg: String, type: String, name: String, crossinline hooker: (XC_LayoutInflated.LayoutInflatedParam) -> Unit\n) {\n    try {\n        val id = getIdentifier(name, type, pkg)\n        hookLayout(id, hooker)\n    } catch (e: Throwable) {\n        Log.e(e)\n    }\n}\n\nfun Class<*>.findFirstFieldByExactType(type: Class<*>): Field = findFirstFieldByExactType(this, type)\n\nfun Class<*>.findFirstFieldByExactTypeOrNull(type: Class<*>?): Field? = runCatchingOrNull {\n    findFirstFieldByExactType(this, type)\n}\n\nfun Any.getFirstFieldByExactType(type: Class<*>): Any? = javaClass.findFirstFieldByExactType(type).get(this)\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Any.getFirstFieldByExactTypeAs(type: Class<*>) = javaClass.findFirstFieldByExactType(type).get(this) as? T\n\ninline fun <reified T : Any> Any.getFirstFieldByExactType() =\n    javaClass.findFirstFieldByExactType(T::class.java).get(this) as? T\n\nfun Any.getFirstFieldByExactTypeOrNull(type: Class<*>?): Any? = runCatchingOrNull {\n    javaClass.findFirstFieldByExactTypeOrNull(type)?.get(this)\n}\n\n@Suppress(\"UNCHECKED_CAST\")\nfun <T> Any.getFirstFieldByExactTypeOrNullAs(type: Class<*>?) = getFirstFieldByExactTypeOrNull(type) as? T\n\ninline fun <reified T> Any.getFirstFieldByExactTypeOrNull() = getFirstFieldByExactTypeOrNull(T::class.java) as? T\n\ninline fun ClassLoader.findDexClassLoader(crossinline delegator: (BaseDexClassLoader) -> BaseDexClassLoader = { x -> x }): BaseDexClassLoader? {\n    var classLoader = this\n    while (classLoader !is BaseDexClassLoader) {\n        if (classLoader.parent != null) classLoader = classLoader.parent\n        else return null\n    }\n    return delegator(classLoader)\n}\n\ninline fun ClassLoader.allClassesList(crossinline delegator: (BaseDexClassLoader) -> BaseDexClassLoader = { x -> x }): List<String> {\n    return findDexClassLoader(delegator)?.getObjectField(\"pathList\")?.getObjectFieldAs<Array<Any>>(\"dexElements\")\n        ?.flatMap {\n            it.getObjectField(\"dexFile\")?.callMethodAs<Enumeration<String>>(\"entries\")?.toList().orEmpty()\n        }.orEmpty()\n}\n\nfun exec(command: String): String {\n    var process: Process? = null\n    var reader: BufferedReader? = null\n    var `is`: InputStreamReader? = null\n    var os: DataOutputStream? = null\n    return try {\n        process = Runtime.getRuntime().exec(\"su\")\n        `is` = InputStreamReader(process.inputStream)\n        reader = BufferedReader(`is`)\n        os = DataOutputStream(process.outputStream)\n        os.writeBytes(\n            command.trimIndent()\n        )\n        os.writeBytes(\"\\nexit\\n\")\n        os.flush()\n        var read: Int\n        val buffer = CharArray(4096)\n        val output = StringBuilder()\n        while (reader.read(buffer).also { read = it } > 0) {\n            output.appendRange(buffer, 0, read)\n        }\n        process.waitFor()\n        output.toString()\n    } catch (e: IOException) {\n        throw RuntimeException(e)\n    } catch (e: InterruptedException) {\n        throw RuntimeException(e)\n    } finally {\n        try {\n            os?.close()\n            `is`?.close()\n            reader?.close()\n            process?.destroy()\n        } catch (e: IOException) {\n            e.printStackTrace()\n        }\n    }\n}\n\nfun exec(commands: Array<String>): String {\n    val stringBuilder = java.lang.StringBuilder()\n    for (command in commands) {\n        stringBuilder.append(exec(command))\n        stringBuilder.append(\"\\n\")\n    }\n    return stringBuilder.toString()\n}\n\nval Member.isStatic: Boolean\n    inline get() = Modifier.isStatic(modifiers)\nval Member.isFinal: Boolean\n    inline get() = Modifier.isFinal(modifiers)\nval Member.isPublic: Boolean\n    inline get() = Modifier.isPublic(modifiers)\nval Member.isNotStatic: Boolean\n    inline get() = !isStatic\nval Class<*>.isAbstract: Boolean\n    inline get() = !isPrimitive && Modifier.isAbstract(modifiers)\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/LogcatHelper.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.os.Environment;\n\nimport java.io.BufferedReader;\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\npublic class LogcatHelper {\n\n    private static LogcatHelper INSTANCE = null;\n    private static String PATH_LOGCAT;\n    private LogDumper mLogDumper = null;\n    private final int mPId;\n\n    /**\n     * 初始化目录\n     */\n    public void init(Context context) {\n        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {\n            // 优先保存到SD卡中\n            PATH_LOGCAT = context.getExternalCacheDir().getAbsolutePath();\n        } else {// 如果SD卡不存在，就保存到本应用的目录下\n            PATH_LOGCAT = context.getFilesDir().getAbsolutePath() + File.separator;\n        }\n        File file = new File(PATH_LOGCAT);\n        if (!file.exists()) {\n            file.mkdirs();\n        }\n    }\n\n    public static LogcatHelper getInstance(Context context) {\n        if (INSTANCE == null) {\n            INSTANCE = new LogcatHelper(context);\n        }\n        return INSTANCE;\n    }\n\n    private LogcatHelper(Context context) {\n        init(context);\n        mPId = android.os.Process.myPid();\n    }\n\n    public void start() {\n        if (mLogDumper == null)\n            mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT);\n        mLogDumper.start();\n    }\n\n    public void stop() {\n        if (mLogDumper != null) {\n            mLogDumper.stopLogs();\n            mLogDumper = null;\n        }\n    }\n\n    private static class LogDumper extends Thread {\n\n        private Process logcatProc;\n        private BufferedReader mReader = null;\n        private boolean mRunning = true;\n        String cmds = null;\n        private final String mPID;\n        private FileOutputStream out = null;\n\n        public LogDumper(String pid, String dir) {\n            mPID = pid;\n            try {\n                out = new FileOutputStream(new File(dir, \"Cemiuiler_\" + getFileName() + \".log\"));\n            } catch (FileNotFoundException e) {\n                e.printStackTrace();\n            }\n\n            /*\n\n              日志等级：*:v , *:d , *:w , *:e , *:f , *:s\n              <p>\n              显示当前mPID程序的 E和W等级的日志.\n              <p>\n              */\n\n            // cmds = \"logcat *:e *:w | grep \\\"(\" + mPID + \")\\\"\";\n            // cmds = \"logcat  | grep \\\"(\" + mPID + \")\\\"\";//打印所有日志信息\n            // cmds = \"logcat -s way\";//打印标签过滤信息\n            // cmds = \"logcat *:e *:i | grep \\\"(\" + mPID + \")\\\"\";\n\n            cmds = \"logcat *:i | grep \\\"(\" + mPID + \")\\\"\";\n\n        }\n\n        public void stopLogs() {\n            mRunning = false;\n        }\n\n        @Override\n        public void run() {\n            try {\n                logcatProc = Runtime.getRuntime().exec(cmds);\n                mReader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), 1024);\n                String line = null;\n                while (mRunning && (line = mReader.readLine()) != null) {\n                    if (!mRunning) {\n                        break;\n                    }\n                    if (line.length() == 0) {\n                        continue;\n                    }\n                    if (out != null && line.contains(mPID)) {\n                        out.write((getDateEN() + \"  \" + line + \"\\n\")\n                            .getBytes());\n                    }\n                }\n\n            } catch (IOException e) {\n                e.printStackTrace();\n            } finally {\n                if (logcatProc != null) {\n                    logcatProc.destroy();\n                    logcatProc = null;\n                }\n                if (mReader != null) {\n                    try {\n                        mReader.close();\n                        mReader = null;\n                    } catch (IOException e) {\n                        e.printStackTrace();\n                    }\n                }\n                if (out != null) {\n                    try {\n                        out.close();\n                    } catch (IOException e) {\n                        e.printStackTrace();\n                    }\n                    out = null;\n                }\n\n            }\n\n        }\n\n    }\n\n    @SuppressLint(\"SimpleDateFormat\")\n    public static String getFileName() {\n        SimpleDateFormat format = new SimpleDateFormat(\"yyyy_MM_dd\");\n        return format.format(new Date(System.currentTimeMillis()));\n    }\n\n    @SuppressLint(\"SimpleDateFormat\")\n    public static String getDateEN() {\n        SimpleDateFormat format = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n        return format.format(new Date(System.currentTimeMillis()));\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/MathUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.annotation.SuppressLint;\nimport android.graphics.Rect;\n\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils;\n\nimport java.lang.reflect.Method;\n\npublic class MathUtils {\n    private static final float DEG_TO_RAD = 0.017453292f;\n    private static final float RAD_TO_DEG = 57.295784f;\n\n    private MathUtils() {\n    }\n\n    public static float abs(float v) {\n        return v > 0.0f ? v : -v;\n    }\n\n    public static int constrain(int amount, int low, int high) {\n        return amount < low ? low : Math.min(amount, high);\n    }\n\n    public static long constrain(long amount, long low, long high) {\n        return amount < low ? low : Math.min(amount, high);\n    }\n\n    public static float constrain(float amount, float low, float high) {\n        return amount < low ? low : Math.min(amount, high);\n    }\n\n    public static float log(float a) {\n        return (float) Math.log(a);\n    }\n\n    public static float exp(float a) {\n        return (float) Math.exp(a);\n    }\n\n    public static float pow(float a, float b) {\n        return (float) Math.pow(a, b);\n    }\n\n    public static float sqrt(float a) {\n        return (float) Math.sqrt(a);\n    }\n\n    public static float max(float a, float b) {\n        return Math.max(a, b);\n    }\n\n    public static float max(int a, int b) {\n        return Math.max(a, b);\n    }\n\n    public static float max(float a, float b, float c) {\n        if (a > b) {\n            if (a > c) {\n                return a;\n            }\n        } else if (b > c) {\n            return b;\n        }\n        return c;\n    }\n\n    public static float max(int a, int b, int c) {\n        int i;\n        if (a > b) {\n            i = Math.max(a, c);\n        } else {\n            i = Math.max(b, c);\n        }\n        return i;\n    }\n\n    public static float min(float a, float b) {\n        return Math.min(a, b);\n    }\n\n    public static float min(int a, int b) {\n        return Math.min(a, b);\n    }\n\n    public static float min(float a, float b, float c) {\n        if (a < b) {\n            if (a < c) {\n                return a;\n            }\n        } else if (b < c) {\n            return b;\n        }\n        return c;\n    }\n\n    public static float min(int a, int b, int c) {\n        int i;\n        if (a < b) {\n            i = Math.min(a, c);\n        } else {\n            i = Math.min(b, c);\n        }\n        return i;\n    }\n\n    public static float dist(float x1, float y1, float x2, float y2) {\n        float x = x2 - x1;\n        float y = y2 - y1;\n        return (float) Math.hypot(x, y);\n    }\n\n    public static float dist(float x1, float y1, float z1, float x2, float y2, float z2) {\n        float x = x2 - x1;\n        float y = y2 - y1;\n        float z = z2 - z1;\n        return (float) Math.sqrt((x * x) + (y * y) + (z * z));\n    }\n\n    public static float mag(float a, float b) {\n        return (float) Math.hypot(a, b);\n    }\n\n    public static float mag(float a, float b, float c) {\n        return (float) Math.sqrt((a * a) + (b * b) + (c * c));\n    }\n\n    public static float sq(float v) {\n        return v * v;\n    }\n\n    public static float dot(float v1x, float v1y, float v2x, float v2y) {\n        return (v1x * v2x) + (v1y * v2y);\n    }\n\n    public static float cross(float v1x, float v1y, float v2x, float v2y) {\n        return (v1x * v2y) - (v1y * v2x);\n    }\n\n    public static float radians(float degrees) {\n        return DEG_TO_RAD * degrees;\n    }\n\n    public static float degrees(float radians) {\n        return RAD_TO_DEG * radians;\n    }\n\n    public static float acos(float value) {\n        return (float) Math.acos(value);\n    }\n\n    public static float asin(float value) {\n        return (float) Math.asin(value);\n    }\n\n    public static float atan(float value) {\n        return (float) Math.atan(value);\n    }\n\n    public static float atan2(float a, float b) {\n        return (float) Math.atan2(a, b);\n    }\n\n    public static float tan(float angle) {\n        return (float) Math.tan(angle);\n    }\n\n    public static float lerp(float start, float stop, float amount) {\n        return ((stop - start) * amount) + start;\n    }\n\n    public static float lerpNew(float start, float stop, float amount) {\n        int value = Math.round((((stop - start) * amount) + start));\n        return Math.min(value, stop);\n    }\n\n    public static float lerp(int start, int stop, float amount) {\n        return lerp(start, stop, amount);\n    }\n\n    public static float lerpInv(float a, float b, float value) {\n        if (a != b) {\n            return (value - a) / (b - a);\n        }\n        return 0.0f;\n    }\n\n    public static float saturate(float value) {\n        return constrain(value, 0.0f, 1.0f);\n    }\n\n    public static float lerpInvSat(float a, float b, float value) {\n        return saturate(lerpInv(a, b, value));\n    }\n\n    public static float lerpDeg(float start, float end, float amount) {\n        float minAngle = (((end - start) + 180.0f) % 360.0f) - 180.0f;\n        return (minAngle * amount) + start;\n    }\n\n    public static float norm(float start, float stop, float value) {\n        return (value - start) / (stop - start);\n    }\n\n    public static float map(float minStart, float minStop, float maxStart, float maxStop, float value) {\n        return ((maxStop - maxStart) * ((value - minStart) / (minStop - minStart))) + maxStart;\n    }\n\n    public static float constrainedMap(float rangeMin, float rangeMax, float valueMin, float valueMax, float value) {\n        return lerp(rangeMin, rangeMax, lerpInvSat(valueMin, valueMax, value));\n    }\n\n    public static float smoothStep(float start, float end, float x) {\n        return constrain((x - start) / (end - start), 0.0f, 1.0f);\n    }\n\n    public static int addOrThrow(int a, int b) throws IllegalArgumentException {\n        if (b == 0) {\n            return a;\n        }\n        if (b > 0 && a <= Integer.MAX_VALUE - b) {\n            return a + b;\n        }\n        if (b < 0 && a >= Integer.MIN_VALUE - b) {\n            return a + b;\n        }\n        throw new IllegalArgumentException(\"Addition overflow: \" + a + \" + \" + b);\n    }\n\n    public static float convertGammaToLinearFloat(float i, int max, float f, float f2) {\n        float norm = norm(0.0f, max, i);\n        float R = 0.4f;\n        float A = 0.2146f;\n        float B = 0.2847f;\n        float C = 0.4719f;\n        return lerp(f, f2, constrain(norm <= R ? sq(norm / R) : exp((norm - C) / A) + B, 0.0f, 12.0f) / 12.0f);\n    }\n\n    public static void fitRect(Rect outToResize, int largestSide) {\n        if (outToResize.isEmpty()) {\n            return;\n        }\n        float maxSize = Math.max(outToResize.width(), outToResize.height());\n        try {\n            Class<?> rectClass = Class.forName(\"android.graphics.Rect\");\n            // 获取带有 @hide 注解的方法名称\n            String methodName = \"scale\";\n            // 获取方法\n            @SuppressLint(\"DiscouragedPrivateApi\") Method scaleMethod = rectClass.getDeclaredMethod(methodName, float.class);\n            // 创建一个 Rect 实例\n            Rect rectInstance = new Rect(outToResize);\n            // 设置方法可访问（即强行访问）\n            scaleMethod.setAccessible(true);\n            // 调用带有 @hide 注解的方法\n            scaleMethod.invoke(rectInstance, largestSide / maxSize);\n        } catch (Exception e) {\n            AndroidLogUtils.LogE(\"Call Method scale error: \", e);\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/PrefsMap.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport java.util.HashMap;\nimport java.util.LinkedHashSet;\nimport java.util.Set;\n\npublic class PrefsMap<K, V> extends HashMap<K, V> {\n\n    public Object getObject(String key, Object defValue) {\n        return get(key) == null ? defValue : get(key);\n    }\n\n    public int getInt(String key, int defValue) {\n        key = \"prefs_key_\" + key;\n        return get(key) == null ? defValue : (Integer) get(key);\n    }\n\n    public String getString(String key, String defValue) {\n        key = \"prefs_key_\" + key;\n        return get(key) == null ? defValue : (String) get(key);\n    }\n\n    public int getStringAsInt(String key, int defValue) {\n        key = \"prefs_key_\" + key;\n        return get(key) == null ? defValue : Integer.parseInt((String) get(key));\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public Set<String> getStringSet(String key) {\n        key = \"prefs_key_\" + key;\n        return get(key) == null ? new LinkedHashSet<>() : (Set<String>) get(key);\n    }\n\n    public boolean getBoolean(String key) {\n        key = \"prefs_key_\" + key;\n        return get(key) == null ? false : (Boolean) get(key);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/PrefsUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.database.ContentObserver;\nimport android.database.Cursor;\nimport android.net.Uri;\nimport android.os.Handler;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.provider.SharedPrefsProvider;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport java.io.File;\nimport java.lang.reflect.Field;\nimport java.util.LinkedHashSet;\nimport java.util.Set;\n\nimport de.robv.android.xposed.XposedBridge;\n\npublic class PrefsUtils {\n\n    public static SharedPreferences mSharedPreferences = null;\n\n    public static String mPrefsPathCurrent = null;\n    public static String mPrefsFileCurrent = null;\n    public static String mPrefsName = \"cemiuiler_prefs\";\n    public static String mPrefsPath = \"/data/user_de/0/\" + Helpers.mAppModulePkg + \"/shared_prefs\";\n    public static String mPrefsFile = mPrefsPath + \"/\" + mPrefsName + \".xml\";\n\n\n    public static SharedPreferences getSharedPrefs(Context context, boolean multiProcess) {\n        context = Helpers.getProtectedContext(context);\n        try {\n            return context.getSharedPreferences(mPrefsName, multiProcess ? Context.MODE_MULTI_PROCESS | Context.MODE_WORLD_READABLE : Context.MODE_WORLD_READABLE);\n        } catch (Throwable t) {\n            return context.getSharedPreferences(mPrefsName, multiProcess ? Context.MODE_MULTI_PROCESS | Context.MODE_PRIVATE : Context.MODE_PRIVATE);\n        }\n    }\n\n    public static SharedPreferences getSharedPrefs(Context context) {\n        return getSharedPrefs(context, false);\n    }\n\n\n    public static String getSharedPrefsPath() {\n        if (mPrefsPathCurrent == null) try {\n            Field mFile = mSharedPreferences.getClass().getDeclaredField(\"mFile\");\n            mFile.setAccessible(true);\n            mPrefsPathCurrent = ((File) mFile.get(mSharedPreferences)).getParentFile().getAbsolutePath();\n            return mPrefsPathCurrent;\n        } catch (Throwable t) {\n            System.out.print(\"Test\" + t);\n            return mPrefsPath;\n        }\n        else return mPrefsPathCurrent;\n    }\n\n    public static String getSharedPrefsFile() {\n        if (mPrefsFileCurrent == null) try {\n            Field fFile = mSharedPreferences.getClass().getDeclaredField(\"mFile\");\n            fFile.setAccessible(true);\n            mPrefsFileCurrent = ((File) fFile.get(mSharedPreferences)).getAbsolutePath();\n            System.out.println(\"Test: mPrefsFileCurrent\");\n            return mPrefsFileCurrent;\n        } catch (Throwable t) {\n            System.out.println(\"Test: mPrefsFile\" + t);\n            return mPrefsFile;\n        }\n        else\n            System.out.println(\"Test: mPrefsFileCurrent2\");\n        return mPrefsFileCurrent;\n    }\n\n\n    public static boolean contains(String key) {\n        return mSharedPreferences.contains(key);\n    }\n\n    public static SharedPreferences.Editor editor() {\n        return mSharedPreferences.edit();\n    }\n\n\n    public static String getSharedStringPrefs(Context context, String name, String defValue) {\n        Uri uri = stringPrefsToUri(name, defValue);\n        try {\n            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);\n            if (cursor != null && cursor.moveToFirst()) {\n                String prefValue = cursor.getString(0);\n                cursor.close();\n                return prefValue;\n            } else XposedLogUtils.logI(\"ContentResolver\", \"[\" + name + \"] Cursor fail: \" + cursor);\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n\n        if (XposedInit.mPrefsMap.containsKey(name))\n            return (String) XposedInit.mPrefsMap.getObject(name, defValue);\n        else return defValue;\n    }\n\n    public static Set<String> getSharedStringSetPrefs(Context context, String name) {\n        Uri uri = stringSetPrefsToUri(name);\n        try {\n            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);\n            if (cursor != null) {\n                Set<String> prefValue = new LinkedHashSet<>();\n                while (cursor.moveToNext()) {\n                    prefValue.add(cursor.getString(0));\n                }\n                cursor.close();\n                return prefValue;\n            } else {\n                XposedLogUtils.logI(\"ContentResolver\", \"[\" + name + \"] Cursor fail: null\");\n            }\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n\n        LinkedHashSet<String> empty = new LinkedHashSet<>();\n        if (XposedInit.mPrefsMap.containsKey(name)) {\n            return (Set<String>) XposedInit.mPrefsMap.getObject(name, empty);\n        } else {\n            return empty;\n        }\n    }\n\n\n    public static int getSharedIntPrefs(Context context, String name, int defValue) {\n        Uri uri = intPrefsToUri(name, defValue);\n        try {\n            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);\n            if (cursor != null && cursor.moveToFirst()) {\n                int prefValue = cursor.getInt(0);\n                cursor.close();\n                return prefValue;\n            } else XposedLogUtils.logI(\"ContentResolver\", \"[\" + name + \"] Cursor fail: \" + cursor);\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n\n        if (XposedInit.mPrefsMap.containsKey(name))\n            return (int) XposedInit.mPrefsMap.getObject(name, defValue);\n        else return defValue;\n    }\n\n\n    public static boolean getSharedBoolPrefs(Context context, String name, boolean defValue) {\n        Uri uri = boolPrefsToUri(name, defValue);\n        try {\n            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);\n            if (cursor != null && cursor.moveToFirst()) {\n                int prefValue = cursor.getInt(0);\n                cursor.close();\n                return prefValue == 1;\n            } else XposedLogUtils.logI(\"ContentResolver\", \"[\" + name + \"] Cursor fail: \" + cursor);\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n\n        if (XposedInit.mPrefsMap.containsKey(name))\n            return (boolean) XposedInit.mPrefsMap.getObject(name, false);\n        else\n            return defValue;\n    }\n\n\n    public static Uri stringPrefsToUri(String name, String defValue) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/string/\" + name + \"/\" + defValue);\n    }\n\n    public static Uri stringSetPrefsToUri(String name) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/stringset/\" + name);\n    }\n\n    public static Uri intPrefsToUri(String name, int defValue) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/integer/\" + name + \"/\" + defValue);\n    }\n\n    public static Uri boolPrefsToUri(String name, boolean defValue) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/boolean/\" + name + \"/\" + (defValue ? '1' : '0'));\n    }\n\n    public static Uri shortcutIconPrefsToUri(String name) {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/shortcut_icon/\" + name);\n    }\n\n    public static Uri anyPrefsToUri() {\n        return Uri.parse(\"content://\" + SharedPrefsProvider.AUTHORITY + \"/pref/\");\n    }\n\n\n    public static class SharedPrefsObserver extends ContentObserver {\n\n        enum PrefType {\n            Any, String, StringSet, Integer, Boolean\n        }\n\n        PrefType prefType;\n        Context ctx;\n        String mPrefsName;\n        String mPrefsDefValueString;\n        int mPrefsDefValueInt;\n        boolean mPrefsDefValueBool;\n\n        public SharedPrefsObserver(Context context, Handler handler) {\n            super(handler);\n            ctx = context;\n            prefType = PrefType.Any;\n            registerObserver();\n        }\n\n        public SharedPrefsObserver(Context context, Handler handler, String name, String defValue) {\n            super(handler);\n            ctx = context;\n            mPrefsName = name;\n            prefType = PrefType.String;\n            mPrefsDefValueString = defValue;\n            registerObserver();\n        }\n\n        public SharedPrefsObserver(Context context, Handler handler, String name) {\n            super(handler);\n            ctx = context;\n            mPrefsName = name;\n            prefType = PrefType.StringSet;\n            registerObserver();\n        }\n\n        public SharedPrefsObserver(Context context, Handler handler, String name, int defValue) {\n            super(handler);\n            ctx = context;\n            prefType = PrefType.Integer;\n            mPrefsName = name;\n            mPrefsDefValueInt = defValue;\n            registerObserver();\n        }\n\n        @SuppressLint(\"SuspiciousIndentation\")\n        public SharedPrefsObserver(Context context, Handler handler, String name, boolean defValue) {\n            super(handler);\n            ctx = context;\n            prefType = PrefType.Boolean;\n            mPrefsName = name;\n            mPrefsDefValueBool = defValue;\n            registerObserver();\n        }\n\n        void registerObserver() {\n            Uri uri = null;\n            if (prefType == PrefType.String)\n                uri = stringPrefsToUri(mPrefsName, mPrefsDefValueString);\n            else if (prefType == PrefType.StringSet)\n                uri = stringSetPrefsToUri(mPrefsName);\n            else if (prefType == PrefType.Integer)\n                uri = intPrefsToUri(mPrefsName, mPrefsDefValueInt);\n            else if (prefType == PrefType.Boolean)\n                uri = boolPrefsToUri(mPrefsName, mPrefsDefValueBool);\n            else if (prefType == PrefType.Any)\n                uri = anyPrefsToUri();\n            if (uri != null)\n                ctx.getContentResolver().registerContentObserver(uri, prefType == PrefType.Any, this);\n        }\n\n        @Override\n        public void onChange(boolean selfChange, Uri uri) {\n            if (prefType == PrefType.Any)\n                onChange(uri);\n            else\n                onChange(selfChange);\n        }\n\n        @Override\n        public void onChange(boolean selfChange) {\n            if (selfChange) return;\n            if (prefType == PrefType.String)\n                onChange(mPrefsName, mPrefsDefValueString);\n            else if (prefType == PrefType.StringSet)\n                onChange(mPrefsName);\n            else if (prefType == PrefType.Integer)\n                onChange(mPrefsName, mPrefsDefValueInt);\n            else if (prefType == PrefType.Boolean)\n                onChange(mPrefsName, mPrefsDefValueBool);\n        }\n\n        public void onChange(Uri uri) {\n        }\n\n        public void onChange(String name) {\n        }\n\n        public void onChange(String name, String defValue) {\n        }\n\n        public void onChange(String name, int defValue) {\n        }\n\n        public void onChange(String name, boolean defValue) {\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/PropertyUtils.kt",
    "content": "package com.sevtinge.cemiuiler.utils\n\nimport android.annotation.SuppressLint\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils.logW\nimport java.lang.reflect.Method\n\nobject PropertyUtils {\n    private val get: Method by lazy {\n        @SuppressLint(\"PrivateApi\")\n        val cls = Class.forName(\"android.os.SystemProperties\")\n        cls.getDeclaredMethod(\"get\", String::class.java, String::class.java)\n    }\n\n    operator fun get(prop: String, defaultValue: String?): String? {\n        kotlin.runCatching {\n            get.invoke(null, prop, defaultValue) as String?\n        }.onFailure {\n            logW(\"\", it)\n        }.onSuccess {\n            return it\n        }\n        return defaultValue\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/ResourcesHook.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport static com.sevtinge.cemiuiler.utils.log.AndroidLogUtils.LogD;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.util.Pair;\nimport android.util.SparseIntArray;\n\nimport java.util.concurrent.ConcurrentHashMap;\n\nimport de.robv.android.xposed.XposedBridge;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class ResourcesHook {\n    private boolean hooksApplied = false;\n\n    public enum ReplacementType {\n        ID,\n        DENSITY,\n        OBJECT\n    }\n\n    private final SparseIntArray fakes = new SparseIntArray();\n    private final ConcurrentHashMap<String, Pair<ReplacementType, Object>> replacements = new ConcurrentHashMap<>();\n\n    public static int getFakeResId(String resourceName) {\n        return 0x7e00f000 | (resourceName.hashCode() & 0x00ffffff);\n    }\n\n    private final Helpers.MethodHook mReplaceHook = new Helpers.MethodHook() {\n        @Override\n        protected void before(MethodHookParam param) {\n            Context mContext = Helpers.findContext();\n            if (mContext == null) return;\n            String method = param.method.getName();\n            Object value = getFakeResource(mContext, method, param.args);\n            if (value == null) {\n                value = getResourceReplacement(mContext, (Resources) param.thisObject, method, param.args);\n                if (value == null) return;\n                if (\"getDimensionPixelOffset\".equals(method) || \"getDimensionPixelSize\".equals(method)) {\n                    if (value instanceof Float) value = ((Float) value).intValue();\n                }\n            }\n            param.setResult(value);\n        }\n    };\n\n    public ResourcesHook() {\n    }\n\n    private void applyHooks() {\n        if (hooksApplied) return;\n        hooksApplied = true;\n        Helpers.findAndHookMethod(Resources.class, \"getInteger\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getLayout\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getFraction\", int.class, int.class, int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getBoolean\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getDimension\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getDimensionPixelOffset\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getDimensionPixelSize\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getText\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getString\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getDrawableForDensity\", int.class, int.class, Resources.Theme.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getIntArray\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getStringArray\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getTextArray\", int.class, mReplaceHook);\n        Helpers.findAndHookMethod(Resources.class, \"getAnimation\", int.class, mReplaceHook);\n    }\n\n    public int addResource(String resName, int resId) {\n        try {\n            applyHooks();\n            int fakeResId = getFakeResId(resName);\n            fakes.put(fakeResId, resId);\n            return fakeResId;\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n            return 0;\n        }\n    }\n\n    private Object getFakeResource(Context context, String method, Object[] args) {\n        try {\n            if (context == null) return null;\n            int modResId = fakes.get((int) args[0]);\n            if (modResId == 0) return null;\n\n            Object value;\n            Resources modRes = Helpers.getModuleRes(context);\n            if (\"getDrawable\".equals(method))\n                value = XposedHelpers.callMethod(modRes, method, modResId, args[1]);\n            else if (\"getDrawableForDensity\".equals(method) || \"getFraction\".equals(method))\n                value = XposedHelpers.callMethod(modRes, method, modResId, args[1], args[2]);\n            else\n                value = XposedHelpers.callMethod(modRes, method, modResId);\n            return value;\n        } catch (Throwable t) {\n            LogD(\"getFakeResource\", t);\n            return null;\n        }\n    }\n\n    public void setResReplacement(String pkg, String type, String name, int replacementResId) {\n        try {\n            applyHooks();\n            replacements.put(pkg + \":\" + type + \"/\" + name, new Pair<>(ReplacementType.ID, replacementResId));\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n    }\n\n    public void setDensityReplacement(String pkg, String type, String name, float replacementResValue) {\n        try {\n            applyHooks();\n            replacements.put(pkg + \":\" + type + \"/\" + name, new Pair<>(ReplacementType.DENSITY, replacementResValue));\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n    }\n\n    public void setObjectReplacement(String pkg, String type, String name, Object replacementResValue) {\n        try {\n            applyHooks();\n            replacements.put(pkg + \":\" + type + \"/\" + name, new Pair<>(ReplacementType.OBJECT, replacementResValue));\n        } catch (Throwable t) {\n            XposedBridge.log(t);\n        }\n    }\n\n    private Object getResourceReplacement(Context context, Resources res, String method, Object[] args) {\n        if (context == null) return null;\n\n        String pkgName = null;\n        String resType = null;\n        String resName = null;\n        try {\n            pkgName = res.getResourcePackageName((int) args[0]);\n            resType = res.getResourceTypeName((int) args[0]);\n            resName = res.getResourceEntryName((int) args[0]);\n        } catch (Throwable ignore) {\n        }\n        if (pkgName == null || resType == null || resName == null) return null;\n\n        try {\n            Object value;\n            String resFullName = pkgName + \":\" + resType + \"/\" + resName;\n            String resAnyPkgName = \"*:\" + resType + \"/\" + resName;\n\n            Integer modResId = null;\n            Pair<ReplacementType, Object> replacement = null;\n            if (replacements.containsKey(resFullName))\n                replacement = replacements.get(resFullName);\n            else if (replacements.containsKey(resAnyPkgName))\n                replacement = replacements.get(resAnyPkgName);\n\n            if (replacement != null)\n                if (replacement.first == ReplacementType.OBJECT) return replacement.second;\n                else if (replacement.first == ReplacementType.DENSITY) {\n                    return (Float) replacement.second * res.getDisplayMetrics().density;\n                } else if (replacement.first == ReplacementType.ID) modResId = (Integer) replacement.second;\n            if (modResId == null) return null;\n\n            Resources modRes = Helpers.getModuleRes(context);\n            if (\"getDrawable\".equals(method))\n                value = XposedHelpers.callMethod(modRes, method, modResId, args[1]);\n            else if (\"getDrawableForDensity\".equals(method) || \"getFraction\".equals(method))\n                value = XposedHelpers.callMethod(modRes, method, modResId, args[1], args[2]);\n            else\n                value = XposedHelpers.callMethod(modRes, method, modResId);\n            return value;\n        } catch (Throwable t) {\n            LogD(\"getResourceReplacement\", t);\n            return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/SearchHelper.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport static com.sevtinge.cemiuiler.utils.api.VoyagerApisKt.isPad;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.content.res.XmlResourceParser;\nimport android.graphics.Color;\nimport android.text.TextUtils;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.data.ModData;\n\nimport org.xmlpull.v1.XmlPullParser;\n\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.Objects;\nimport java.util.Set;\n\npublic class SearchHelper {\n\n    public static final int MARK_COLOR_VIBRANT = Color.rgb(255, 0, 0);\n    public static final String NEW_MODS_SEARCH_QUERY = \"\\uD83C\\uDD95\";\n    public static ArrayList<ModData> allModsList = new ArrayList<>();\n\n    public static final HashSet<String> NEW_MODS = new HashSet<>(\n        Set.of(\n            \"pref_key_launcher_nozoomanim\"\n        )\n    );\n\n    public static final String ANDROID_NS = \"http://schemas.android.com/apk/res/android\";\n    public static final String MIUIZER_NS = \"http://schemas.android.com/apk/res-auto\";\n\n    public static void getAllMods(Context context, boolean force) {\n        if (force) {\n            allModsList.clear();\n        } else if (allModsList.size() > 0) {\n            return;\n        }\n        // 系统框架页面相关\n        parsePrefXml(context, R.xml.framework_freeform,\n            R.string.system_framework,\n            R.string.floating_window,\n            R.string.floating_window,\n            R.string.floating_window,\n            R.string.floating_window,\n            \"com.sevtinge.cemiuiler.ui.fragment.framework.FreeFormSettings\");\n\n        parsePrefXml(context, R.xml.framework_volume,\n            R.string.system_framework,\n            R.string.system_framework_volume_title,\n            R.string.system_framework_volume_title,\n            R.string.system_framework_volume_title,\n            R.string.system_framework_volume_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.framework.VolumeSettings\");\n\n        parsePrefXml(context, R.xml.framework_phone,\n            R.string.system_framework,\n            R.string.system_framework_phone_title,\n            R.string.system_framework_phone_title,\n            R.string.system_framework_phone_title,\n            R.string.system_framework_phone_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.framework.NetworkSettings\");\n\n        parsePrefXml(context, R.xml.framework_display,\n            R.string.system_framework,\n            R.string.system_framework_display_title,\n            R.string.system_framework_display_title,\n            R.string.system_framework_display_title,\n            R.string.system_framework_display_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.framework.DisplaySettings\");\n\n        parsePrefXml(context, R.xml.framework_other,\n            R.string.system_framework,\n            R.string.system_framework_other_title,\n            R.string.system_framework_other_title,\n            R.string.system_framework_other_title,\n            R.string.system_framework_other_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.framework.OtherSettings\");\n\n        // 系统界面页面相关\n        parsePrefXml(context, R.xml.system_ui_lock_screen,\n            R.string.system_ui,\n            R.string.system_ui_lockscreen_title,\n            R.string.system_ui_lockscreen_title,\n            R.string.system_ui_lockscreen_title,\n            R.string.system_ui_lockscreen_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.LockScreenSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.StatusBarSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar_icon_manage,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_iconmanage_title,\n            R.string.system_ui_statusbar_iconmanage_title,\n            R.string.system_ui_statusbar_iconmanage_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.IconManageSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar_mobile_network_type,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_iconmanage_title,\n            R.string.system_ui_status_bar_mobile_type_single_title,\n            R.string.system_ui_status_bar_mobile_type_single_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.MobileNetworkTypeSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar_doubleline_network,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_iconmanage_title,\n            R.string.system_ui_statusbar_iconmanage_mobile_network_title,\n            R.string.system_ui_statusbar_iconmanage_mobile_network_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.DoubleLineNetworkSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar_battery_styles,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_iconmanage_title,\n            R.string.system_ui_status_bar_battery_style_title,\n            R.string.system_ui_status_bar_battery_style_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.BatteryStyleSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar_network_speed_indicator,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_network_speed_indicator_title,\n            R.string.system_ui_statusbar_network_speed_indicator_title,\n            R.string.system_ui_statusbar_network_speed_indicator_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.NetworkSpeedIndicatorSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar_clock_indicator,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_clock_title,\n            R.string.system_ui_statusbar_clock_title,\n            R.string.system_ui_statusbar_clock_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.ClockIndicatorSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_status_bar_hardware_detail_indicator,\n            R.string.system_ui,\n            R.string.system_ui_statusbar_title,\n            R.string.system_ui_statusbar_device_title,\n            R.string.system_ui_statusbar_device_title,\n            R.string.system_ui_statusbar_device_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.BatteryDetailIndicatorSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_navigation,\n            R.string.system_ui,\n            R.string.system_ui_navigation_title,\n            R.string.system_ui_navigation_title,\n            R.string.system_ui_navigation_title,\n            R.string.system_ui_navigation_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.NavigationSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_control_center,\n            R.string.system_ui,\n            R.string.system_ui_controlcenter_title,\n            R.string.system_ui_controlcenter_title,\n            R.string.system_ui_controlcenter_title,\n            R.string.system_ui_controlcenter_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.ControlCenterSettings\");\n\n        parsePrefXml(context, R.xml.system_ui_other,\n            R.string.system_ui,\n            R.string.system_ui_other_title,\n            R.string.system_ui_other_title,\n            R.string.system_ui_other_title,\n            R.string.system_ui_other_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.systemui.SystemUIOtherSettings\");\n\n        // 系统桌面相关\n        parsePrefXml(context, R.xml.home_gesture,\n            R.string.home,\n            R.string.home_gesture,\n            R.string.home_gesture,\n            R.string.home_gesture,\n            R.string.home_gesture,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeGestureSettings\");\n\n        parsePrefXml(context, R.xml.home_layout,\n            R.string.home,\n            R.string.home_layout,\n            R.string.home_layout,\n            R.string.home_layout,\n            R.string.home_layout,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeLayoutSettings\");\n\n        parsePrefXml(context, R.xml.home_folder,\n            R.string.home,\n            R.string.home_folder,\n            R.string.home_folder,\n            R.string.home_folder,\n            R.string.home_folder,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeFolderSettings\");\n\n        parsePrefXml(context, R.xml.home_drawer,\n            R.string.home,\n            R.string.home_drawer,\n            R.string.home_drawer,\n            R.string.home_drawer,\n            R.string.home_drawer,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeDrawerSettings\");\n\n        parsePrefXml(context, R.xml.home_title,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title,\n            R.string.home_title,\n            R.string.home_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeTitleSettings\");\n\n        parsePrefXml(context, R.xml.home_title_anim,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeTitleAnimSettings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_1,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_1_title,\n            R.string.home_title_custom_anim_param_1_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim1Settings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_2,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_2_title,\n            R.string.home_title_custom_anim_param_2_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim2Settings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_3,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_3_title,\n            R.string.home_title_custom_anim_param_3_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim3Settings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_4,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_4_title,\n            R.string.home_title_custom_anim_param_4_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim4Settings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_5,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_5_title,\n            R.string.home_title_custom_anim_param_5_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim5Settings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_6,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_6_title,\n            R.string.home_title_custom_anim_param_6_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnimSettings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_7,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_7_title,\n            R.string.home_title_custom_anim_param_7_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim7Settings\");\n\n        parsePrefXml(context, R.xml.home_title_anim_8,\n            R.string.home,\n            R.string.home_title,\n            R.string.home_title_custom_anim_param,\n            R.string.home_title_custom_anim_param_8_title,\n            R.string.home_title_custom_anim_param_8_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim8Settings\");\n\n        parsePrefXml(context, R.xml.home_recent,\n            R.string.home,\n            R.string.home_recent,\n            R.string.home_recent,\n            R.string.home_recent,\n            R.string.home_recent,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeRecentSettings\");\n\n        parsePrefXml(context, R.xml.home_widget,\n            R.string.home,\n            R.string.home_widget,\n            R.string.home_widget,\n            R.string.home_widget,\n            R.string.home_widget,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeWidgetSettings\");\n\n        parsePrefXml(context, R.xml.home_dock,\n            R.string.home,\n            R.string.home_dock,\n            R.string.home_dock,\n            R.string.home_dock,\n            R.string.home_dock,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeDockSettings\");\n\n        parsePrefXml(context, R.xml.home_other,\n            R.string.home,\n            R.string.home_other,\n            R.string.home_other,\n            R.string.home_other,\n            R.string.home_other,\n            \"com.sevtinge.cemiuiler.ui.fragment.home.HomeOtherSettings\");\n\n        // 设置相关\n        parsePrefXml(context, R.xml.system_settings,\n            R.string.system_settings,\n            R.string.system_settings,\n            R.string.system_settings,\n            R.string.system_settings,\n            R.string.system_settings,\n            \"com.sevtinge.cemiuiler.ui.fragment.SystemSettingsFragment\");\n\n        // 其他杂项\n        parsePrefXml(context, R.xml.browser,\n            R.string.browser,\n            R.string.browser,\n            R.string.browser,\n            R.string.browser,\n            R.string.browser,\n            \"com.sevtinge.cemiuiler.ui.fragment.BrowserFragment\");\n\n        parsePrefXml(context, R.xml.camera,\n            R.string.camera,\n            R.string.camera,\n            R.string.camera,\n            R.string.camera,\n            R.string.camera,\n            \"com.sevtinge.cemiuiler.ui.fragment.CameraFragment\");\n\n        parsePrefXml(context, R.xml.clock,\n            R.string.clock,\n            R.string.clock,\n            R.string.clock,\n            R.string.clock,\n            R.string.clock,\n            \"com.sevtinge.cemiuiler.ui.fragment.ClockFragment\");\n\n        parsePrefXml(context, R.xml.fileexplorer,\n            R.string.fileexplorer,\n            R.string.fileexplorer,\n            R.string.fileexplorer,\n            R.string.fileexplorer,\n            R.string.fileexplorer,\n            \"com.sevtinge.cemiuiler.ui.fragment.FileExplorerFragment\");\n\n        parsePrefXml(context, R.xml.incallui,\n            R.string.incallui,\n            R.string.incallui,\n            R.string.incallui,\n            R.string.incallui,\n            R.string.incallui,\n            \"com.sevtinge.cemiuiler.ui.fragment.InCallUiFragment\");\n\n        parsePrefXml(context, R.xml.mms,\n            R.string.mms,\n            R.string.mms,\n            R.string.mms,\n            R.string.mms,\n            R.string.mms,\n            \"com.sevtinge.cemiuiler.ui.fragment.MmsFragment\");\n\n        parsePrefXml(context, R.xml.nfc,\n            R.string.nfc,\n            R.string.nfc,\n            R.string.nfc,\n            R.string.nfc,\n            R.string.nfc,\n            \"com.sevtinge.cemiuiler.ui.fragment.NfcFragment\");\n\n        parsePrefXml(context, R.xml.phone,\n            R.string.phone,\n            R.string.phone,\n            R.string.phone,\n            R.string.phone,\n            R.string.phone,\n            \"com.sevtinge.cemiuiler.ui.fragment.PhoneFragment\");\n\n        parsePrefXml(context, R.xml.downloads,\n            R.string.downloads,\n            R.string.downloads,\n            R.string.downloads,\n            R.string.downloads,\n            R.string.downloads,\n            \"com.sevtinge.cemiuiler.ui.fragment.DownloadsFragment\");\n\n        parsePrefXml(context, R.xml.updater,\n            R.string.updater,\n            R.string.updater,\n            R.string.updater,\n            R.string.updater,\n            R.string.updater,\n            \"com.sevtinge.cemiuiler.ui.fragment.UpdaterFragment\");\n\n        parsePrefXml(context, R.xml.lbe_security,\n            R.string.lbe,\n            R.string.lbe,\n            R.string.lbe,\n            R.string.lbe,\n            R.string.lbe,\n            \"com.sevtinge.cemiuiler.ui.fragment.LbeFragment\");\n\n        parsePrefXml(context, R.xml.milink,\n            R.string.milink,\n            R.string.milink,\n            R.string.milink,\n            R.string.milink,\n            R.string.milink,\n            \"com.sevtinge.cemiuiler.ui.fragment.MiLinkFragment\");\n\n        parsePrefXml(context, R.xml.aod,\n            R.string.aod,\n            R.string.aod,\n            R.string.aod,\n            R.string.aod,\n            R.string.aod,\n            \"com.sevtinge.cemiuiler.ui.fragment.AodFragment\");\n\n        parsePrefXml(context, R.xml.content_extension,\n            R.string.content_extension,\n            R.string.content_extension,\n            R.string.content_extension,\n            R.string.content_extension,\n            R.string.content_extension,\n            \"com.sevtinge.cemiuiler.ui.fragment.ContentExtensionFragment\");\n\n        parsePrefXml(context, R.xml.gallery,\n            R.string.gallery,\n            R.string.gallery,\n            R.string.gallery,\n            R.string.gallery,\n            R.string.gallery,\n            \"com.sevtinge.cemiuiler.ui.fragment.GalleryFragment\");\n\n        parsePrefXml(context, R.xml.guard_provider,\n            R.string.guard_provider,\n            R.string.guard_provider,\n            R.string.guard_provider,\n            R.string.guard_provider,\n            R.string.guard_provider,\n            \"com.sevtinge.cemiuiler.ui.fragment.GuardProviderFragment\");\n\n        parsePrefXml(context, R.xml.mediaeditor,\n            R.string.mediaeditor,\n            R.string.mediaeditor,\n            R.string.mediaeditor,\n            R.string.mediaeditor,\n            R.string.mediaeditor,\n            \"com.sevtinge.cemiuiler.ui.fragment.MediaEditorFragment\");\n\n        parsePrefXml(context, R.xml.mishare,\n            R.string.mishare,\n            R.string.mishare,\n            R.string.mishare,\n            R.string.mishare,\n            R.string.mishare,\n            \"com.sevtinge.cemiuiler.ui.fragment.MiShareFragment\");\n\n        parsePrefXml(context, R.xml.miwallpaper,\n            R.string.miwallpaper,\n            R.string.miwallpaper,\n            R.string.miwallpaper,\n            R.string.miwallpaper,\n            R.string.miwallpaper,\n            \"com.sevtinge.cemiuiler.ui.fragment.MiWallpaperFragment\");\n\n        parsePrefXml(context, R.xml.package_installer,\n            R.string.package_installer,\n            R.string.package_installer,\n            R.string.package_installer,\n            R.string.package_installer,\n            R.string.package_installer,\n            \"com.sevtinge.cemiuiler.ui.fragment.MiuiPackageInstallerFragment\");\n\n        parsePrefXml(context, R.xml.music,\n            R.string.music,\n            R.string.music,\n            R.string.music,\n            R.string.music,\n            R.string.music,\n            \"com.sevtinge.cemiuiler.ui.fragment.MusicFragment\");\n\n        parsePrefXml(context, R.xml.powerkeeper,\n            R.string.powerkeeper,\n            R.string.powerkeeper,\n            R.string.powerkeeper,\n            R.string.powerkeeper,\n            R.string.powerkeeper,\n            \"com.sevtinge.cemiuiler.ui.fragment.PowerKeeperFragment\");\n\n        parsePrefXml(context, R.xml.screenrecorder,\n            R.string.screenrecorder,\n            R.string.screenrecorder,\n            R.string.screenrecorder,\n            R.string.screenrecorder,\n            R.string.screenrecorder,\n            \"com.sevtinge.cemiuiler.ui.fragment.ScreenRecorderFragment\");\n\n        parsePrefXml(context, R.xml.screenshot,\n            R.string.screenshot,\n            R.string.screenshot,\n            R.string.screenshot,\n            R.string.screenshot,\n            R.string.screenshot,\n            \"com.sevtinge.cemiuiler.ui.fragment.ScreenShotFragment\");\n\n        parsePrefXml(context, R.xml.security_center,\n            !isPad() ? R.string.security_center : R.string.security_center_pad,\n            !isPad() ? R.string.security_center : R.string.security_center_pad,\n            !isPad() ? R.string.security_center : R.string.security_center_pad,\n            !isPad() ? R.string.security_center : R.string.security_center_pad,\n            !isPad() ? R.string.security_center : R.string.security_center_pad,\n            \"com.sevtinge.cemiuiler.ui.fragment.SecurityCenterFragment\");\n\n        parsePrefXml(context, R.xml.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            \"com.sevtinge.cemiuiler.ui.fragment.TsmClientFragment\");\n\n        parsePrefXml(context, R.xml.weather,\n            R.string.weather,\n            R.string.weather,\n            R.string.weather,\n            R.string.weather,\n            R.string.weather,\n            \"com.sevtinge.cemiuiler.ui.fragment.WeatherFragment\");\n\n        parsePrefXml(context, R.xml.aiasst,\n            R.string.aiasst,\n            R.string.aiasst,\n            R.string.aiasst,\n            R.string.aiasst,\n            R.string.aiasst,\n            \"com.sevtinge.cemiuiler.ui.fragment.AiAsstFragment\");\n\n        parsePrefXml(context, R.xml.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            R.string.tsmclient,\n            \"com.sevtinge.cemiuiler.ui.fragment.TsmClientFragment\");\n\n        parsePrefXml(context, R.xml.barrage,\n            R.string.barrage,\n            R.string.barrage,\n            R.string.barrage,\n            R.string.barrage,\n            R.string.barrage,\n            \"com.sevtinge.cemiuiler.ui.fragment.BarrageFragment\");\n\n        parsePrefXml(context, R.xml.joyose,\n            R.string.joyose,\n            R.string.joyose,\n            R.string.joyose,\n            R.string.joyose,\n            R.string.joyose,\n            \"com.sevtinge.cemiuiler.ui.fragment.JoyoseFragment\");\n\n        parsePrefXml(context, R.xml.market,\n            R.string.market,\n            R.string.market,\n            R.string.market,\n            R.string.market,\n            R.string.market,\n            \"com.sevtinge.cemiuiler.ui.fragment.MarketFragment\");\n\n        parsePrefXml(context, R.xml.mirror,\n            R.string.mirror,\n            R.string.mirror,\n            R.string.mirror,\n            R.string.mirror,\n            R.string.mirror,\n            \"com.sevtinge.cemiuiler.ui.fragment.MirrorFragment\");\n\n        parsePrefXml(context, R.xml.mtb,\n            R.string.mtb,\n            R.string.mtb,\n            R.string.mtb,\n            R.string.mtb,\n            R.string.mtb,\n            \"com.sevtinge.cemiuiler.ui.fragment.MtbFragment\");\n\n        parsePrefXml(context, R.xml.scanner,\n            R.string.scanner,\n            R.string.scanner,\n            R.string.scanner,\n            R.string.scanner,\n            R.string.scanner,\n            \"com.sevtinge.cemiuiler.ui.fragment.ScannerFragment\");\n\n        parsePrefXml(context, R.xml.creation,\n            R.string.creation,\n            R.string.creation,\n            R.string.creation,\n            R.string.creation,\n            R.string.creation,\n            \"com.sevtinge.cemiuiler.ui.fragment.CreationFragment\");\n\n        parsePrefXml(context, R.xml.various,\n            R.string.various,\n            R.string.various,\n            R.string.various,\n            R.string.various,\n            R.string.various,\n            \"com.sevtinge.cemiuiler.ui.fragment.VariousFragment\");\n\n        parsePrefXml(context, R.xml.various_aosp,\n            R.string.various,\n            R.string.various,\n            R.string.various_open_aosp_something_title,\n            R.string.various_open_aosp_something_title,\n            R.string.various_open_aosp_something_title,\n            \"com.sevtinge.cemiuiler.ui.fragment.various.AOSPSettings\");\n\n        if (isPad()) {\n            parsePrefXml(context, R.xml.various_mipad,\n                R.string.various,\n                R.string.various_mipad_title,\n                R.string.various_mipad_title,\n                R.string.various_mipad_title,\n                R.string.various_mipad_title,\n                \"com.sevtinge.cemiuiler.ui.fragment.VariousFragment\");\n        }\n\n        // 实验性\n        parsePrefXml(context, R.xml.theme_manager,\n            R.string.theme_manager,\n            R.string.theme_manager,\n            R.string.theme_manager,\n            R.string.theme_manager,\n            R.string.theme_manager,\n            \"com.sevtinge.cemiuiler.ui.fragment.ThemeManagerFragment\");\n\n        parsePrefXml(context, R.xml.personal_assistant,\n            R.string.personal_assistant,\n            R.string.personal_assistant,\n            R.string.personal_assistant,\n            R.string.personal_assistant,\n            R.string.personal_assistant,\n            \"com.sevtinge.cemiuiler.ui.fragment.PersonalAssistantFragment\");\n    }\n\n    private static void parsePrefXml(Context context, int xmlResId, int catResId, int catSub1ResId, int catSub2ResId, int catSub3ResId, int catSub4ResId, String catPrefsFragment) {\n        Resources res = context.getResources();\n        try (XmlResourceParser xml = res.getXml(xmlResId)) {\n            int order = 0;\n            int eventType = xml.getEventType();\n            while (eventType != XmlPullParser.END_DOCUMENT) {\n                if (eventType == XmlPullParser.START_TAG && !xml.getName().equals(\"PreferenceCategory\")) {\n                    try {\n                        ModData modData = new ModData();\n                        modData.title = getModTitle(res, xml.getAttributeValue(ANDROID_NS, \"title\"));\n                        if (Objects.equals(modData.title, res.getString(R.string.theme_manager_crack)) || Objects.equals(modData.title, res.getString(R.string.personal_assistant_widget_crack)))\n                            modData.title = \"\";\n                        if (!TextUtils.isEmpty(modData.title)) {\n                            if (!res.getString(catSub3ResId).equals(res.getString(catSub4ResId))) {\n                                modData.breadcrumbs = res.getString(catResId) + \"/\" + res.getString(catSub1ResId) + \"/\" + res.getString(catSub2ResId) + \"/\" + res.getString(catSub3ResId) + \"/\" + res.getString(catSub4ResId);\n                            } else if (!res.getString(catSub2ResId).equals(res.getString(catSub3ResId))) {\n                                modData.breadcrumbs = res.getString(catResId) + \"/\" + res.getString(catSub1ResId) + \"/\" + res.getString(catSub2ResId) + \"/\" + res.getString(catSub3ResId);\n                            } else if (!res.getString(catSub1ResId).equals(res.getString(catSub2ResId))) {\n                                modData.breadcrumbs = res.getString(catResId) + \"/\" + res.getString(catSub1ResId) + \"/\" + res.getString(catSub2ResId);\n                            } else if (!res.getString(catResId).equals(res.getString(catSub1ResId))) {\n                                modData.breadcrumbs = res.getString(catResId) + \"/\" + res.getString(catSub1ResId);\n                            } else {\n                                modData.breadcrumbs = res.getString(catResId);\n                            }\n                            modData.key = xml.getAttributeValue(ANDROID_NS, \"key\");\n                            modData.order = order;\n                            modData.catTitleResId = catSub4ResId;\n                            modData.fragment = catPrefsFragment;\n                            allModsList.add(modData);\n                        }\n                        order++;\n                    } catch (Throwable t) {\n                        t.printStackTrace();\n                    }\n                }\n                eventType = xml.next();\n            }\n        } catch (Throwable t) {\n            t.printStackTrace();\n        }\n    }\n\n    private static String getModTitle(Resources res, String title) {\n        if (title == null) {\n            return null;\n        }\n        int titleResId = Integer.parseInt(title.substring(1));\n        if (titleResId <= 0) {\n            return null;\n        }\n        return res.getString(titleResId);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/SettingLauncher.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.text.TextUtils;\n\nimport androidx.fragment.app.Fragment;\n\npublic class SettingLauncher {\n\n    private final Context mContext;\n    private boolean mLaunched;\n\n    Bundle mExtras;\n    Bundle mArguments;\n    CharSequence mTitle;\n    String mDestinationName;\n    Class<?> mClass;\n\n    int mTitleResId;\n\n    public SettingLauncher(Context context) {\n        if (context == null) {\n            throw new IllegalArgumentException(\"Context must be non-null.\");\n        }\n        mContext = context;\n    }\n\n    public SettingLauncher setClass(Class<?> cls) {\n        mClass = cls;\n        return this;\n    }\n\n    public SettingLauncher setDestination(String name) {\n        mDestinationName = name;\n        return this;\n    }\n\n    public SettingLauncher setTitleRes(int titleResId) {\n        mTitleResId = titleResId;\n        return this;\n    }\n\n    public SettingLauncher setTitleText(CharSequence title) {\n        mTitle = title;\n        return this;\n    }\n\n    public SettingLauncher setArguments(Bundle args) {\n        mArguments = args;\n        return this;\n    }\n\n    public SettingLauncher setExtras(Bundle extras) {\n        mExtras = extras;\n        return this;\n    }\n\n    public void launch() {\n        if (mLaunched) {\n            throw new IllegalStateException(\"This launcher has already been executed. Do not reuse\");\n        }\n        mLaunched = true;\n        Intent intent = toIntent();\n        launch(intent);\n    }\n\n    public Intent toIntent() {\n        Intent intent = new Intent(\"android.intent.action.MAIN\");\n        copyExtras(intent);\n        intent.setClass(mContext, mClass);\n        if (TextUtils.isEmpty(mDestinationName)) {\n            throw new IllegalArgumentException(\"Destination fragment must be set\");\n        }\n        intent.putExtra(\":settings:show_fragment\", mDestinationName);\n        intent.putExtra(\":settings:show_fragment_args\", mArguments);\n        intent.putExtra(\":settings:show_fragment_title\", mTitle);\n        intent.putExtra(\":settings:show_fragment_title_resid\", mTitleResId);\n\n        /*intent.putExtra(\":settings:show_fragment_contentResId\", mContentResId);*/\n        return intent;\n    }\n\n    void launch(Intent intent) {\n        mContext.startActivity(intent);\n    }\n\n    void launchForResult(Fragment fragment, Intent intent, int i) {\n        fragment.startActivityForResult(intent, i);\n    }\n\n    private void copyExtras(Intent intent) {\n        if (mExtras != null) {\n            intent.replaceExtras(mExtras);\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/SettingLauncherHelper.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\npublic class SettingLauncherHelper {\n\n    public static void onStartSettingsForArguments(Context context, Class<?> cls, String fragment, String title) {\n        onStartSettingsForArguments(context, cls, fragment, null, title);\n    }\n\n    public static void onStartSettingsForArguments(Context context, Class<?> cls, String fragment, int titleResId) {\n        onStartSettingsForArguments(context, cls, fragment, null, titleResId);\n    }\n\n    public static void onStartSettingsForArguments(Context context, Class<?> cls, String fragment, Bundle args, String title) {\n        onStartSettingsForArguments(context, cls, fragment, args, 0, title);\n    }\n\n    public static void onStartSettingsForArguments(Context context, Class<?> cls, String fragment, Bundle args, int titleResId) {\n        onStartSettingsForArguments(context, cls, fragment, args, titleResId, null);\n    }\n\n    public static void onStartSettingsForArguments(Context context, Class<?> cls, String fragment, Bundle args, int titleResId, String title) {\n        if (args == null) args = new Bundle();\n        onStartSettings(context, cls, fragment, null, args, titleResId, title);\n    }\n\n    public static void onStartSettingsForExtras(Context context, Class<?> cls, String fragment, Bundle extras, int titleResId, String title) {\n        if (extras == null) extras = new Bundle();\n        onStartSettings(context, cls, fragment, extras, null, titleResId, title);\n    }\n\n    public static void onStartSettings(Context context, Class<?> cls, Class<?> fname, String title) {\n        onStartSettings(context, cls, fname, null, null, 0, title);\n    }\n\n    public static void onStartSettings(Context context, Class<?> cls, Class<?> fname, Bundle extras, Bundle args, String title) {\n        onStartSettings(context, cls, fname, extras, args, 0, title);\n    }\n\n    public static void onStartSettings(Context context, Class<?> cls, Class<?> fname, Bundle extras, Bundle args, int titleResId, String title) {\n        if (args == null) args = new Bundle();\n        onStartSettings(context, cls, fname.getName(), extras, args, titleResId, title);\n    }\n\n    public static void onStartSettings(Context context, Class<?> cls, String fragment, Bundle extras, Bundle args, int titleResId, String title) {\n        new SettingLauncher(context)\n            .setClass(cls)\n            .setDestination(fragment)\n            .setTitleText(title)\n            .setTitleRes(titleResId)\n            .setExtras(extras)\n            .setArguments(args)\n            .launch();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/ShakeManager.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.content.Context;\nimport android.hardware.Sensor;\nimport android.hardware.SensorEvent;\nimport android.hardware.SensorEventListener;\n\nimport com.sevtinge.cemiuiler.module.app.GlobalActions;\n\npublic class ShakeManager implements SensorEventListener {\n\n    private float xAccel;\n    private float yAccel;\n    private float zAccel;\n\n    private float xPreviousAccel;\n    private float yPreviousAccel;\n    private float zPreviousAccel;\n\n    private boolean firstUpdate = true;\n    private boolean shakeInitiated = false;\n    private long lastShakeEvent = System.currentTimeMillis();\n\n    private final Context helperContext;\n\n    public ShakeManager(Context helpercontext) {\n        this.helperContext = helpercontext;\n    }\n\n    public void reset() {\n        xAccel = 0;\n        yAccel = 0;\n        zAccel = 0;\n        xPreviousAccel = 0;\n        yPreviousAccel = 0;\n        zPreviousAccel = 0;\n        firstUpdate = true;\n        shakeInitiated = false;\n    }\n\n    @Override\n    public void onAccuracyChanged(Sensor sensor, int accuracy) {\n        // Don't care...\n    }\n\n    @Override\n    public void onSensorChanged(SensorEvent se) {\n        updateAccelParameters(se.values[0], se.values[1], se.values[2]);\n        if (!shakeInitiated && isAccelerationChanged())\n            shakeInitiated = true;\n        else if (shakeInitiated && isAccelerationChanged())\n            executeShakeActionDelayed();\n        else if (shakeInitiated && (!isAccelerationChanged()))\n            shakeInitiated = false;\n    }\n\n    private void updateAccelParameters(float xNewAccel, float yNewAccel, float zNewAccel) {\n        if (firstUpdate) {\n            xPreviousAccel = xNewAccel;\n            yPreviousAccel = yNewAccel;\n            zPreviousAccel = zNewAccel;\n            firstUpdate = false;\n        } else {\n            xPreviousAccel = xAccel;\n            yPreviousAccel = yAccel;\n            zPreviousAccel = zAccel;\n        }\n        xAccel = xNewAccel;\n        yAccel = yNewAccel;\n        zAccel = zNewAccel;\n    }\n\n    private boolean isAccelerationChanged() {\n        float deltaX = Math.abs(xPreviousAccel - xAccel);\n        float deltaY = Math.abs(yPreviousAccel - yAccel);\n        float deltaZ = Math.abs(zPreviousAccel - zAccel);\n        float shakeThresholdX = 4f;\n        float shakeThresholdY = 4f;\n        float shakeThresholdZ = 8f;\n        return (deltaX > shakeThresholdX && deltaY > shakeThresholdY)\n            || (deltaX > shakeThresholdX && deltaZ > shakeThresholdZ)\n            || (deltaY > shakeThresholdY && deltaZ > shakeThresholdZ);\n    }\n\n    private void executeShakeActionDelayed() {\n        long now = System.currentTimeMillis();\n        int shakeEventThrottle = 750;\n        if (now - lastShakeEvent > shakeEventThrottle) {\n            lastShakeEvent = now;\n            executeShakeAction();\n        }\n    }\n\n    private void executeShakeAction() {\n        GlobalActions.handleAction(helperContext, \"prefs_key_home_gesture_shake\");\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/ShellUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport com.sevtinge.cemiuiler.utils.log.AndroidLogUtils;\n\nimport java.io.BufferedReader;\nimport java.io.DataOutputStream;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.util.List;\n\npublic class ShellUtils {\n    /**\n     * check whether has root permission\n     *\n     * @return if int = 0, then have root, else don't have.\n     */\n    public static int checkRootPermission() {\n        Process process = null;\n        int exitCode = -1;\n        try {\n            process = Runtime.getRuntime().exec(\"su -c true\");\n            return process.waitFor();\n        } catch (IOException | InterruptedException e) {\n            AndroidLogUtils.LogE(\"checkRootPermission\", \"check whether has root permission error: \", e);\n            return exitCode;\n        } finally {\n            if (process != null) {\n                process.destroy();\n            }\n        }\n    }\n\n    /**\n     * execute shell command, default return result msg\n     *\n     * @param command command\n     * @param isRoot  whether need to run with root\n     * @see ShellUtils#execCommand(String[], boolean, boolean)\n     */\n    public static CommandResult execCommand(String command, boolean isRoot) {\n        return execCommand(new String[]{command}, isRoot, true);\n    }\n\n    /**\n     * execute shell commands, default return result msg\n     *\n     * @param commands command activity_wifi\n     * @param isRoot   whether need to run with root\n     * @see ShellUtils#execCommand(String[], boolean, boolean)\n     */\n    public static CommandResult execCommand(List<String> commands, boolean isRoot) {\n        return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, true);\n    }\n\n    /**\n     * execute shell commands, default return result msg\n     *\n     * @param commands command array\n     * @param isRoot   whether need to run with root\n     * @see ShellUtils#execCommand(String[], boolean, boolean)\n     */\n    public static CommandResult execCommand(String[] commands, boolean isRoot) {\n        return execCommand(commands, isRoot, true);\n    }\n\n    /**\n     * execute shell command\n     *\n     * @param command         command\n     * @param isRoot          whether need to run with root\n     * @param isNeedResultMsg whether need result msg\n     * @noinspection UnusedReturnValue\n     * @see ShellUtils#execCommand(String[], boolean, boolean)\n     */\n    public static CommandResult execCommand(String command, boolean isRoot, boolean isNeedResultMsg) {\n        return execCommand(new String[]{command}, isRoot, isNeedResultMsg);\n    }\n\n    /**\n     * execute shell commands\n     *\n     * @param commands        command activity_wifi\n     * @param isRoot          whether need to run with root\n     * @param isNeedResultMsg whether need result msg\n     * @see ShellUtils#execCommand(String[], boolean, boolean)\n     */\n    public static CommandResult execCommand(List<String> commands, boolean isRoot, boolean isNeedResultMsg) {\n        return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, isNeedResultMsg);\n    }\n\n    /**\n     * execute shell commands\n     *\n     * @param command command activity_wifi\n     * @param isRoot  whether need to run with root\n     * @return if execCommand.result is 0, then return true, else return false\n     * @see ShellUtils#execCommand(String[], boolean, boolean)\n     */\n    public static boolean getResultBoolean(String command, boolean isRoot) {\n        return execCommand(new String[]{command}, isRoot, false).result == 0;\n    }\n\n    /**\n     * execute shell commands\n     *\n     * @param commands command activity_wifi\n     * @param isRoot   whether need to run with root\n     * @return if execCommand.result is 0, then return true, else return false\n     * @see ShellUtils#execCommand(String[], boolean, boolean)\n     */\n    public static boolean getResultBoolean(List<String> commands, boolean isRoot) {\n        return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, false).result == 0;\n    }\n\n    /**\n     * execute shell commands\n     *\n     * @param commands        command array\n     * @param isRoot          whether need to run with root\n     * @param isNeedResultMsg whether need result msg\n     * @return <ul>\n     * <li>if isNeedResultMsg is false, {@link CommandResult#successMsg} is null and\n     * {@link CommandResult#errorMsg} is null.</li>\n     * <li>if {@link CommandResult#result} is -1, there maybe some excepiton.</li>\n     * </ul>\n     */\n    public static CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) {\n        int result = -1;\n        if (commands == null || commands.length == 0) {\n            return new CommandResult(result, null, null);\n        }\n\n        Process process = null;\n        BufferedReader successResult = null;\n        BufferedReader errorResult = null;\n        StringBuilder successMsg = null;\n        StringBuilder errorMsg = null;\n\n        DataOutputStream os = null;\n        try {\n            // if (isRoot) {\n            //     int exitCode = checkRootPermission();\n            //     if (exitCode != 0) {\n            //         return new CommandResult(exitCode, null, null);\n            //     }\n            // }\n            process = Runtime.getRuntime().exec(isRoot ? \"su\" : \"sh\");\n            os = new DataOutputStream(process.getOutputStream());\n            for (String command : commands) {\n                if (command == null) {\n                    continue;\n                }\n\n                // donnot use os.writeBytes(commmand), avoid chinese charset error\n                os.write(command.getBytes());\n                // os.writeBytes(command);\n                os.writeBytes(\"\\n\");\n                os.flush();\n            }\n            os.writeBytes(\"exit\\n\");\n            os.flush();\n\n            result = process.waitFor();\n            // get command result\n            if (isNeedResultMsg) {\n                successMsg = new StringBuilder();\n                errorMsg = new StringBuilder();\n                successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));\n                errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));\n                String s;\n                while ((s = successResult.readLine()) != null) {\n                    successMsg.append(s);\n                }\n                while ((s = errorResult.readLine()) != null) {\n                    errorMsg.append(s);\n                }\n            }\n        } catch (IOException | InterruptedException e) {\n            AndroidLogUtils.LogE(\"execCommand\", \"IOException | InterruptedException: \", e);\n        } finally {\n            try {\n                if (os != null) {\n                    os.close();\n                }\n                if (successResult != null) {\n                    successResult.close();\n                }\n                if (errorResult != null) {\n                    errorResult.close();\n                }\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n\n            if (process != null) {\n                process.destroy();\n            }\n        }\n        return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null\n            : errorMsg.toString());\n    }\n\n    /**\n     * result of command\n     * <ul>\n     * <li>{@link CommandResult#result} means result of command, 0 means normal, else means error, same to excute in\n     * linux shell</li>\n     * <li>{@link CommandResult#successMsg} means success message of command result</li>\n     * <li>{@link CommandResult#errorMsg} means error message of command result</li>\n     * </ul>\n     *\n     * @author <main href=\"http://www.trinea.cn\" target=\"_blank\">Trinea</main> 2013-5-16\n     */\n    public static class CommandResult {\n\n        /**\n         * result of command\n         **/\n        public int result;\n        /**\n         * success message of command result\n         **/\n        public String successMsg;\n        /**\n         * error message of command result\n         **/\n        public String errorMsg;\n\n        public CommandResult(int result) {\n            this.result = result;\n        }\n\n        public CommandResult(int result, String successMsg, String errorMsg) {\n            this.result = result;\n            this.successMsg = successMsg;\n            this.errorMsg = errorMsg;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/SystemProperties.kt",
    "content": "package com.sevtinge.cemiuiler.utils\n\nimport android.annotation.SuppressLint\nimport android.content.Context\n\nobject SystemProperties {\n    @SuppressLint(\"PrivateApi\")\n    operator fun get(context: Context, key: String?): String {\n        var ret: String\n        try {\n            val cl = context.classLoader\n            val systemProperties = cl.loadClass(\"android.os.SystemProperties\")\n            // 参数类型\n            val paramTypes: Array<Class<*>?> = arrayOfNulls(1)\n            paramTypes[0] = String::class.java\n            val get = systemProperties.getMethod(\"get\", *paramTypes)\n            // 参数\n            val params = arrayOfNulls<Any>(1)\n            params[0] = key\n            ret = get.invoke(systemProperties, *params) as String\n        } catch (iAE: IllegalArgumentException) {\n            throw iAE\n        } catch (e: Exception) {\n            ret = \"\"\n        }\n        return ret\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/TileUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.res.Resources;\nimport android.os.Build;\nimport android.util.ArrayMap;\nimport android.view.View;\nimport android.widget.Switch;\n\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\nimport com.sevtinge.cemiuiler.utils.log.XposedLogUtils;\n\nimport de.robv.android.xposed.XC_MethodHook.MethodHookParam;\nimport de.robv.android.xposed.XposedHelpers;\n\npublic abstract class TileUtils extends BaseHook {\n    Class<?> mResourceIcon;\n    Class<?> mQSFactory;\n    final boolean[] isListened = {false};\n\n    /*固定语法，必须调用。\n     * 调用方法：\n     * @Override\n     * public void init() {\n     *     super.init();\n     * }\n     * */\n    @Override\n    public void init() {\n        mQSFactory = customQSFactory();\n        Class<?> myTile = customClass();\n        mResourceIcon = findClass(\"com.android.systemui.qs.tileimpl.QSTileImpl$ResourceIcon\");\n        SystemUiHook(); // 不需要覆写\n        tileAllName(mQSFactory); // 不需要覆写\n        showStateMessage(myTile);\n        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            tileAllName14(mQSFactory);\n        }\n        try {\n            myTile.getDeclaredMethod(\"isAvailable\");\n            findAndHookMethod(myTile, \"isAvailable\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                    if (tileName != null) {\n                        if (tileName.equals(customName())) {\n                            tileCheck(param, tileName);\n                        }\n                    } else {\n                        if (!needCustom())\n                            tileCheck(param, tileName);\n                    }\n                }\n            });\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have isAvailable: \" + e);\n        }\n        tileName(myTile); // 不需要覆写\n        try {\n            myTile.getDeclaredMethod(\"handleSetListening\", boolean.class);\n            findAndHookMethod(myTile, \"handleSetListening\", boolean.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                    if (tileName != null) {\n                        if (tileName.equals(customName())) {\n                            try {\n                                tileListening(param, tileName);\n                                param.setResult(null);\n                            } catch (Throwable e) {\n                                XposedLogUtils.logE(TAG, \"handleSetListening have Throwable: \" + e);\n                                param.setResult(null);\n                            }\n                        }\n                    } else {\n                        if (!needCustom())\n                            tileListening(param, tileName);\n                    }\n                }\n            });\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have handleSetListening: \" + e);\n        }\n        try {\n            myTile.getDeclaredMethod(\"getLongClickIntent\");\n            findAndHookMethod(myTile, \"getLongClickIntent\", new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                    if (tileName != null) {\n                        if (tileName.equals(customName())) {\n                            tileLongClickIntent(param, tileName);\n                        }\n                    } else {\n                        if (!needCustom())\n                            tileLongClickIntent(param, tileName);\n                    }\n                }\n            });\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have getLongClickIntent: \" + e);\n        }\n        try {\n            myTile.getDeclaredMethod(\"handleLongClick\", View.class);\n            findAndHookMethod(myTile, \"handleLongClick\", View.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                    if (tileName != null && needCustom()) {\n                        if (tileName.equals(customName())) {\n                            Intent intent = tileHandleLongClick(param, tileName);\n                            if (intent != null) {\n                                Context context = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                                Object o = XposedHelpers.callStaticMethod(findClassIfExists(\"com.android.systemui.controlcenter.utils.ControlCenterUtils\"), \"getSettingsSplitIntent\", context, intent);\n                                XposedHelpers.callMethod(XposedHelpers.getObjectField(param.thisObject, \"mActivityStarter\"), \"postStartActivityDismissingKeyguard\", o, 0, null);\n                                param.setResult(null);\n                            }\n                        }\n                    }\n                }\n            });\n        } catch (NoSuchMethodException t) {\n            XposedLogUtils.logE(TAG, \"Don't Have handleLongClick: \" + t);\n        }\n        try {\n            myTile.getDeclaredMethod(\"handleClick\", View.class);\n            findAndHookMethod(myTile, \"handleClick\", View.class, new MethodHook() {\n                @Override\n                protected void before(MethodHookParam param) {\n                    String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                    if (tileName != null) {\n                        if (tileName.equals(customName())) {\n                            try {\n                                tileClick(param, tileName);\n                                param.setResult(null);\n                            } catch (Throwable e) {\n                                XposedLogUtils.logE(TAG, \"handleClick have Throwable: \" + e);\n                                param.setResult(null);\n                            }\n                        }\n                    } else {\n                        if (!needCustom())\n                            tileClick(param, tileName);\n                    }\n                }\n\n                @Override\n                protected void after(MethodHookParam param) {\n                    if (needAfter()) {\n                        String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                        tileClickAfter(param, tileName);\n                    }\n                }\n            });\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have handleClick: \" + e);\n        }\n        hookAllMethods(myTile, \"handleUpdateState\", new MethodHook() {\n            @Override\n            protected void before(MethodHookParam param) {\n                String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                if (tileName != null) {\n                    if (tileName.equals(customName())) {\n                        boolean isEnable = false;\n                        ArrayMap<String, Integer> tileResMap;\n                        tileResMap = tileUpdateState(param, mResourceIcon, tileName);\n                        if (tileResMap != null) {\n                            int code = tileResMap.get(customName() + \"_Enable\");\n                            if (code == 1) isEnable = true;\n                            Object booleanState = param.args[0];\n                            XposedHelpers.setObjectField(booleanState, \"value\", isEnable);\n                            // 测试为开关状态控制，2为开，1为关\n                            XposedHelpers.setObjectField(booleanState, \"state\", isEnable ? 2 : 1);\n                            String tileLabel = (String) XposedHelpers.callMethod(param.thisObject, \"getTileLabel\");\n                            XposedHelpers.setObjectField(booleanState, \"label\", tileLabel);\n                            XposedHelpers.setObjectField(booleanState, \"contentDescription\", tileLabel);\n                            XposedHelpers.setObjectField(booleanState, \"expandedAccessibilityClassName\", Switch.class.getName());\n                            Object mIcon = XposedHelpers.callStaticMethod(mResourceIcon, \"get\", isEnable ? tileResMap.get(customName() + \"_ON\") : tileResMap.get(customName() + \"_OFF\"));\n                            XposedHelpers.setObjectField(booleanState, \"icon\", mIcon);\n                        }\n                        param.setResult(null);\n                    }\n                } else {\n                    if (!needCustom())\n                        tileUpdateState(param, mResourceIcon, tileName);\n                }\n            }\n        });\n\n    }\n\n    /*用于指定磁贴工厂函数*/\n    public Class<?> customQSFactory() {\n        return null;\n    }\n\n    /*需要Hook的磁贴Class*/\n    public Class<?> customClass() {\n        return null;\n    }\n\n    /*需要Hook执行的Class方法*/\n    public String[] customTileProvider() {\n        return null;\n    }\n\n    /*请在这里输入你需要的自定义快捷方式名称。*/\n    public String customName() {\n        return \"\";\n    }\n\n    /*在这里为你的自定义磁贴打上标题\n    需要传入资源Id*/\n    public int customValue() {\n        return -1;\n    }\n\n    /*是否使用自定义的方式创建磁贴\n    否则为在原有磁贴逻辑上进行修改*/\n    public boolean needCustom() {\n        return false;\n    }\n\n    /*是否需要在after时进行逻辑修改而不是before*/\n    public boolean needAfter() {\n        return false;\n    }\n\n    /*\n     * 在第一次Hook时把新的快捷方式加载进快捷方式列表中。\n     * */\n    private void SystemUiHook() {\n        String custom = customName();\n        if (needCustom()) {\n            if (\"\".equals(custom)) {\n                XposedLogUtils.logE(TAG, \"Error custom:\" + custom);\n                return;\n            }\n            try {\n                findClassIfExists(\"com.android.systemui.SystemUIApplication\").getDeclaredMethod(\"onCreate\");\n                findAndHookMethod(\"com.android.systemui.SystemUIApplication\", \"onCreate\", new MethodHook() {\n                    @Override\n                    protected void after(MethodHookParam param) {\n                        if (!isListened[0]) {\n                            isListened[0] = true;\n                            // 获取Context\n                            Context mContext = (Context) XposedHelpers.callMethod(param.thisObject, \"getApplicationContext\");\n                            // 获取miui_quick_settings_tiles_stock字符串的值\n                            @SuppressLint(\"DiscouragedApi\") int stockTilesResId = mContext.getResources().getIdentifier(\"miui_quick_settings_tiles_stock\", \"string\", lpparam.packageName);\n                            String stockTiles = mContext.getString(stockTilesResId) + \",\" + custom; // 追加自定义的磁贴\n                            // 将拼接后的字符串分别替换下面原有的字符串。\n                            mResHook.setObjectReplacement(lpparam.packageName, \"string\", \"miui_quick_settings_tiles_stock\", stockTiles);\n                            mResHook.setObjectReplacement(\"miui.systemui.plugin\", \"string\", \"miui_quick_settings_tiles_stock\", stockTiles);\n                            mResHook.setObjectReplacement(\"miui.systemui.plugin\", \"string\", \"quick_settings_tiles_stock\", stockTiles);\n                        }\n                    }\n                });\n            } catch (NoSuchMethodException e) {\n                XposedLogUtils.logE(TAG, \"Don't Have onCreate: \" + e);\n            }\n        }\n    }\n\n    /*\n     * 判断是否是自定义磁贴，如果是则在自定义磁贴前加上Key，用于定位磁贴。\n     */\n    private void tileAllName(Class<?> QSFactory) {\n        if (needCustom()) {\n            try {\n                QSFactory.getDeclaredMethod(customTileProvider()[1], String.class);\n                findAndHookMethod(QSFactory, customTileProvider()[1], String.class, new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        String tileName = (String) param.args[0];\n                        if (tileName.equals(customName())) {\n                            String myTileProvider = customTileProvider()[0];\n                            Object provider = XposedHelpers.getObjectField(param.thisObject, myTileProvider);\n                            Object tile = XposedHelpers.callMethod(provider, \"get\");\n                            XposedHelpers.setAdditionalInstanceField(tile, \"customName\", tileName);\n                            param.setResult(tile);\n                        }\n                    }\n                });\n            } catch (NoSuchMethodException e) {\n                XposedLogUtils.logE(TAG, \"Don't Have \" + customTileProvider()[1], e);\n            }\n        }\n    }\n\n    /*安卓14磁贴逻辑被修改，此是解决方法*/\n    private void tileAllName14(Class<?> QSFactory) {\n        if (needCustom()) {\n            try {\n                QSFactory.getDeclaredMethod(customTileProvider()[2], String.class);\n                findAndHookMethod(QSFactory, customTileProvider()[2], String.class,\n                    new MethodHook() {\n                        @Override\n                        protected void before(MethodHookParam param) {\n                            String tileName = (String) param.args[0];\n                            if (tileName.equals(customName())) {\n                                String myTileProvider = customTileProvider()[0];\n                                Object provider = XposedHelpers.getObjectField(param.thisObject, myTileProvider);\n                                Object tile = XposedHelpers.callMethod(provider, \"get\");\n                                XposedHelpers.setAdditionalInstanceField(tile, \"customName\", tileName);\n                                if (tile != null) {\n                                    Object mHandler = XposedHelpers.getObjectField(tile, \"mHandler\");\n                                    XposedHelpers.callMethod(mHandler, \"sendEmptyMessage\", 12);\n                                    XposedHelpers.callMethod(mHandler, \"sendEmptyMessage\", 11);\n                                    param.setResult(tile);\n                                }\n                            }\n                        }\n                    }\n                );\n            } catch (NoSuchMethodException e) {\n                XposedLogUtils.logE(TAG, \"Don't Have \" + customTileProvider()[2], e);\n            }\n        }\n    }\n\n    /* 新版系统界面磁贴开启关闭时会显示的文字 */\n    private void showStateMessage(Class<?> myTile) {\n        try {\n            myTile.getDeclaredMethod(\"handleShowStateMessage\");\n            findAndHookMethod(myTile, \"handleShowStateMessage\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) {\n                        XposedHelpers.callMethod(param.thisObject, \"showStateMessage\",\n                            XposedHelpers.callMethod(param.thisObject, \"getStateMessage\"));\n                        param.setResult(null);\n                    }\n                }\n            );\n        } catch (NoSuchMethodException e) {\n            XposedLogUtils.logE(TAG, \"Don't Have handleShowStateMessage: \" + e);\n        }\n    }\n\n    /*在这里可以为你的自定义磁贴判断系统是否支持\n     此方法需要覆写*/\n    public void tileCheck(MethodHookParam param, String tileName) {\n    }\n\n\n    /*为磁贴打上自定义名称*/\n    private void tileName(Class<?> myTile) {\n        if (needCustom()) {\n            int customValue = customValue();\n            String custom = customName();\n            if (customValue == -1 || \"\".equals(custom)) {\n                XposedLogUtils.logE(TAG, \"Error customValue:\" + customValue);\n                return;\n            }\n            try {\n                myTile.getDeclaredMethod(\"getTileLabel\");\n                findAndHookMethod(myTile, \"getTileLabel\", new MethodHook() {\n                    @Override\n                    protected void before(MethodHookParam param) throws Throwable {\n                        String tileName = (String) XposedHelpers.getAdditionalInstanceField(param.thisObject, \"customName\");\n                        if (tileName != null) {\n                            if (tileName.equals(custom)) {\n                                Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, \"mContext\");\n                                Resources modRes = Helpers.getModuleRes(mContext);\n                                param.setResult(modRes.getString(customValue));\n                            }\n                        }\n                    }\n                });\n            } catch (NoSuchMethodException e) {\n                XposedLogUtils.logE(TAG, \"Don't Have getTileLabel: \", e);\n            }\n        }\n    }\n\n    /*这个方法用于监听系统设置变化\n    用于实时刷新开关状态\n    此方法需要自行覆写*/\n    public void tileListening(MethodHookParam param, String tileName) {\n    }\n\n    /*这个方法用于设置长按磁贴的动作\n     此方法需要自行覆写*/\n    public void tileLongClickIntent(MethodHookParam param, String tileName) {\n    }\n\n    /*这是另一个长按动作代码\n     * 可能不是很严谨，仅在上面长按动作失效时使用*/\n    public Intent tileHandleLongClick(MethodHookParam param, String tileName) {\n        return null;\n    }\n\n    /*这个方法用于设置单击磁贴的动作\n    此方法需要自行覆写*/\n    public void tileClick(MethodHookParam param, String tileName) {\n    }\n\n    public void tileClickAfter(MethodHookParam param, String tileName) {\n    }\n\n    /*这个方法用于设置更新磁贴状态\n     此方法需要自行覆写*/\n    public ArrayMap<String, Integer> tileUpdateState(MethodHookParam param, Class<?> mResourceIcon, String tileName) {\n        return null;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/ToastHelper.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.content.Context;\nimport android.widget.Toast;\n\nimport androidx.annotation.StringRes;\n\npublic class ToastHelper {\n    private static Toast mToast;\n\n    public static void makeText(Context context, CharSequence text) {\n        clearToast();\n        mToast = Toast.makeText(context, text, Toast.LENGTH_SHORT);\n        mToast.show();\n    }\n\n    public static void makeText(Context context, @StringRes int resId) {\n        clearToast();\n        mToast = Toast.makeText(context, resId, Toast.LENGTH_SHORT);\n        mToast.show();\n    }\n\n    public static void clearToast() {\n        if (mToast != null) {\n            mToast.cancel();\n            mToast = null;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/XposedUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\n\npublic class XposedUtils {\n\n    @SuppressLint(\"StaticFieldLeak\")\n    public static Context mModuleContext = null;\n\n    public static synchronized Context getModuleContext(Context context) throws Throwable {\n        return getModuleContext(context, null);\n    }\n\n    public static synchronized Context getModuleContext(Context context, Configuration config) throws Throwable {\n        if (mModuleContext == null)\n            mModuleContext = context.createPackageContext(Helpers.mAppModulePkg, Context.CONTEXT_IGNORE_SECURITY).createDeviceProtectedStorageContext();\n        return config == null ? mModuleContext : mModuleContext.createConfigurationContext(config);\n    }\n\n    public static synchronized Resources getModuleRes(Context context) throws Throwable {\n        Configuration config = context.getResources().getConfiguration();\n        Context moduleContext = getModuleContext(context);\n        return (config == null ? moduleContext.getResources() : moduleContext.createConfigurationContext(config).getResources());\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/api/LinQiqiApis.kt",
    "content": "package com.sevtinge.cemiuiler.utils.api\n\nimport android.app.admin.DevicePolicyManager\nimport android.content.Context\nimport com.github.kyuubiran.ezxhelper.MemberExtensions.isStatic\nimport java.lang.reflect.Method\n\n/**\n * 源自 EzXHelper 1.x 版本所附赠的扩展函数，2.0 丢失，暂时先复用\n *\n * 判断类是否相同(用于判断参数)\n * eg: fun foo(a: Boolean, b: Int) { }\n * foo.parameterTypes.sameAs(*array)\n * foo.parameterTypes.sameAs(Boolean::class.java, Int::class.java)\n * foo.parameterTypes.sameAs(\"boolean\", \"int\")\n * foo.parameterTypes.sameAs(Boolean::class.java, \"int\")\n *\n * @param other 其他类(支持String或者Class<*>)\n * @return 是否相等\n */\nfun Array<Class<*>>.sameAs(vararg other: Any): Boolean {\n    if (this.size != other.size) return false\n    for (i in this.indices) {\n        when (val otherClazz = other[i]) {\n            is Class<*> -> {\n                if (this[i] != otherClazz) return false\n            }\n\n            is String -> {\n                if (this[i].name != otherClazz) return false\n            }\n\n            else -> {\n                throw IllegalArgumentException(\"Only support Class<*> or String\")\n            }\n        }\n    }\n    return true\n}\n\n\n/**\n * 源自 EzXHelper 1.x 版本所附赠的扩展函数，2.0 丢失，暂时先复用\n *\n * 扩展函数 通过类或者对象获取单个方法\n * @param methodName 方法名\n * @param isStatic 是否为静态方法\n * @param returnType 方法返回值 填入null为无视返回值\n * @param argTypes 方法参数类型\n * @return 符合条件的方法\n * @throws IllegalArgumentException 方法名为空\n * @throws NoSuchMethodException 未找到方法\n */\nfun Any.method(\n    methodName: String,\n    returnType: Class<*>? = null,\n    isStatic: Boolean = false,\n    argTypes: ArgTypes = argTypes()\n): Method {\n    if (methodName.isBlank()) throw IllegalArgumentException(\"Method name must not be empty!\")\n    var c = if (this is Class<*>) this else this.javaClass\n    do {\n        c.declaredMethods.toList().asSequence()\n            .filter { it.name == methodName }\n            .filter { it.parameterTypes.size == argTypes.argTypes.size }\n            .apply { if (returnType != null) filter { returnType == it.returnType } }\n            .filter { it.parameterTypes.sameAs(*argTypes.argTypes) }\n            .filter { it.isStatic == isStatic }\n            .firstOrNull()?.let { it.isAccessible = true; return it }\n    } while (c.superclass?.also { c = it } != null)\n    throw NoSuchMethodException(\"Name:$methodName, Static: $isStatic, ArgTypes:${argTypes.argTypes.joinToString(\",\")}\")\n}\n\n/**\n * 源自 EzXHelper 1.x 版本所附赠的扩展函数，2.0 丢失，暂时先复用\n * 扩展函数 调用对象的方法\n *\n * @param methodName 方法名\n * @param args 形参表 可空\n * @param argTypes 形参类型 可空\n * @param returnType 返回值类型 为null时无视返回值类型\n * @return 函数调用后的返回值\n * @throws IllegalArgumentException 当方法名为空时\n * @throws IllegalArgumentException 当args的长度与argTypes的长度不符时\n * @throws IllegalArgumentException 当对象是一个Class时\n */\nfun Any.invokeMethod(\n    methodName: String,\n    args: Args = args(),\n    argTypes: ArgTypes = argTypes(),\n    returnType: Class<*>? = null\n): Any? {\n    if (methodName.isBlank()) throw IllegalArgumentException(\"Object name must not be empty!\")\n    if (args.args.size != argTypes.argTypes.size) throw IllegalArgumentException(\"Method args size must equals argTypes size!\")\n    return if (args.args.isEmpty()) {\n        try {\n            this.method(methodName, returnType, false)\n        } catch (e: NoSuchMethodException) {\n            return null\n        }.invoke(this)\n    } else {\n        try {\n            this.method(methodName, returnType, false, argTypes = argTypes)\n        } catch (e: NoSuchMethodException) {\n            return null\n        }.invoke(this, *args.args)\n    }\n}\n\n/**\n * 检测设备是否加密，来源米客\n * @return 返回一个 Boolean 值，true 为已加密，false 为未加密\n * API 34 已弃用 DevicePolicyManager.ENCRYPTION_STATUS_ACTIVATING 属性值，官方说法如下\n * This result code has never actually been used, so there is no reason for apps to check for it.\n */\nfun isDeviceEncrypted(context: Context): Boolean {\n    val policyMgr = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager\n    val encryption = policyMgr.storageEncryptionStatus\n    return encryption == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE ||\n        encryption == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE_PER_USER\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/api/VoyagerApis.kt",
    "content": "package com.sevtinge.cemiuiler.utils.api\n\nimport android.content.Context\nimport android.util.TypedValue\nimport android.view.Window\nimport com.github.kyuubiran.ezxhelper.ClassUtils.getStaticObjectOrNullAs\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.sevtinge.cemiuiler.utils.api.LazyClass.clazzMiuiBuild\nimport com.sevtinge.cemiuiler.utils.isStatic\nimport java.lang.reflect.Field\nimport java.lang.reflect.Method\n\n@JvmInline\nvalue class Args(val args: Array<out Any?>)\n\n@JvmInline\nvalue class ArgTypes(val argTypes: Array<out Class<*>>)\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninline fun args(vararg args: Any?) = Args(args)\n\n@Suppress(\"NOTHING_TO_INLINE\")\ninline fun argTypes(vararg argTypes: Class<*>) = ArgTypes(argTypes)\n\ntypealias MethodCondition = Method.() -> Boolean\n\n/**\n * 扩展函数 通过类或者对象获取单个属性\n * @param fieldName 属性名\n * @param isStatic 是否静态类型\n * @param fieldType 属性类型\n * @return 符合条件的属性\n * @throws IllegalArgumentException 属性名为空\n * @throws NoSuchFieldException 未找到属性\n */\nfun Any.field(\n    fieldName: String,\n    isStatic: Boolean = false,\n    fieldType: Class<*>? = null\n): Field {\n    if (fieldName.isBlank()) throw IllegalArgumentException(\"Field name must not be empty!\")\n    var c: Class<*> = if (this is Class<*>) this else this.javaClass\n    do {\n        c.declaredFields\n            .filter { isStatic == it.isStatic }\n            .firstOrNull { (fieldType == null || it.type == fieldType) && (it.name == fieldName) }\n            ?.let { it.isAccessible = true;return it }\n    } while (c.superclass?.also { c = it } != null)\n    throw NoSuchFieldException(\"Name: $fieldName,Static: $isStatic, Type: ${if (fieldType == null) \"ignore\" else fieldType.name}\")\n}\n\n/**\n * 判断运行模块的机型是否是平板\n * @return 一个 Boolean 值，true 代表是平板，false 代表不是平板\n * @author Voyager\n */\nval IS_TABLET by lazy {\n    getStaticObjectOrNullAs<Boolean>(clazzMiuiBuild, \"IS_TABLET\") ?: false\n}\n\n/**\n * 函数调用，适用于其他一些需要判断的情况\n */\nfun isPad() =\n    clazzMiuiBuild.getField(\"IS_TABLET\").getBoolean(null)\n\n/**\n * 是否为国际版系统\n */\nval IS_INTERNATIONAL_BUILD by lazy {\n    getStaticObjectOrNullAs<Boolean>(clazzMiuiBuild, \"IS_INTERNATIONAL_BUILD\") ?: false\n}\n\nfun getValueByField(target: Any, fieldName: String, clazz: Class<*>? = null): Any? {\n    var targetClass = clazz\n    if (targetClass == null) {\n        targetClass = target.javaClass\n    }\n    return try {\n        val field = targetClass.getDeclaredField(fieldName)\n        field.isAccessible = true\n        field.get(target)\n    } catch (e: Throwable) {\n        if (targetClass.superclass == null) {\n            null\n        } else {\n            getValueByField(target, fieldName, targetClass.superclass)\n        }\n    }\n}\n\n/**\n * 扩展函数 通过遍历方法数组 返回符合条件的方法数组\n * @param condition 条件\n * @return 符合条件的方法数组\n */\nfun Array<Method>.findAllMethods(condition: MethodCondition): Array<Method> {\n    return this.filter { it.condition() }.onEach { it.isAccessible = true }.toTypedArray()\n}\n\n/**\n * 通过条件获取方法数组\n * @param clz 类\n * @param findSuper 是否查找父类\n * @param condition 条件\n * @return 符合条件的方法数组\n */\nfun findAllMethods(\n    clz: Class<*>,\n    findSuper: Boolean = false,\n    condition: MethodCondition\n): List<Method> {\n    var c = clz\n    val arr = ArrayList<Method>()\n    arr.addAll(c.declaredMethods.findAllMethods(condition))\n    if (findSuper) {\n        while (c.superclass?.also { c = it } != null) {\n            arr.addAll(c.declaredMethods.findAllMethods(condition))\n        }\n    }\n    return arr\n}\n\n/**\n * 通过条件获取方法数组\n * @param clzName 类名\n * @param classLoader 类加载器\n * @param findSuper 是否查找父类\n * @param condition 条件\n * @return 符合条件的方法数组\n */\nfun findAllMethods(\n    clzName: String,\n    classLoader: ClassLoader = EzXHelper.classLoader,\n    findSuper: Boolean = false,\n    condition: MethodCondition\n): List<Method> {\n    return findAllMethods(loadClass(clzName, classLoader), findSuper, condition)\n}\n\nfun dp2px(context: Context, dpValue: Float): Int = TypedValue.applyDimension(\n    TypedValue.COMPLEX_UNIT_DIP,\n    dpValue,\n    context.resources.displayMetrics\n).toInt()\n\n/**\n * 模糊查找组件调用\n */\nobject BlurDraw {\n    fun getValueByFields(target: Any, fieldNames: List<String>, clazz: Class<*>? = null): Any? {\n        var targetClass = clazz ?: target.javaClass\n        while (targetClass != Any::class.java) {\n            for (fieldName in fieldNames) {\n                try {\n                    val field = targetClass.getDeclaredField(fieldName)\n                    field.isAccessible = true\n                    val value = field.get(target)\n                    if (value is Window) {\n                        // Log.i(\"BlurPersonalAssistant Window field name: $fieldName\")\n                        return value\n                    }\n                } catch (e: NoSuchFieldException) {\n                    // This field doesn't exist in this class, skip it\n                } catch (e: IllegalAccessException) {\n                    // This field isn't accessible, skip it\n                }\n            }\n            targetClass = targetClass.superclass ?: break\n        }\n        return null\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/api/loadClassByLazy.kt",
    "content": "package com.sevtinge.cemiuiler.utils.api\n\nimport com.github.kyuubiran.ezxhelper.ClassUtils.loadClass\n\n// by StarVoyager\nobject LazyClass {\n    val clazzMiuiBuild by lazy {\n        loadClass(\"miui.os.Build\")\n    }\n\n    val AndroidBuildCls by lazy {\n        loadClass(\"android.os.Build\")\n    }\n\n    val SettingsFeaturesClass by lazy {\n        loadClass(\"com.android.settings.utils.SettingsFeatures\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/AppUtils.kt",
    "content": "package com.sevtinge.cemiuiler.utils.devicesdk\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.pm.PackageInfo\nimport android.content.pm.PackageManager\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.os.Build\nimport android.text.TextUtils\nimport android.util.Log\nimport android.util.TypedValue\nimport com.github.kyuubiran.ezxhelper.EzXHelper\nimport com.sevtinge.cemiuiler.utils.PrefsUtils.getSharedPrefs\nimport moralnorm.internal.utils.DeviceHelper\nimport java.io.DataOutputStream\nimport java.util.*\n\nfun dp2px(dpValue: Float): Int = TypedValue.applyDimension(\n    TypedValue.COMPLEX_UNIT_DIP, dpValue, EzXHelper.appContext.resources.displayMetrics\n).toInt()\n\nfun dp2px2(dp: Float): Float = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, Resources.getSystem().displayMetrics)\n\nfun px2dp(pxValue: Int): Int = (pxValue / EzXHelper.appContext.resources.displayMetrics.density + 0.5f).toInt()\n\nfun getDensityDpi(): Int =\n    (EzXHelper.appContext.resources.displayMetrics.widthPixels / EzXHelper.appContext.resources.displayMetrics.density).toInt()\n\nfun isDarkMode(): Boolean =\n    EzXHelper.appContext.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES\n\n@SuppressLint(\"PrivateApi\")\n@Suppress(\"RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS\")\nfun getProp(mKey: String): String =\n    Class.forName(\"android.os.SystemProperties\").getMethod(\"get\", String::class.java)\n        .invoke(Class.forName(\"android.os.SystemProperties\"), mKey)\n        .toString()\n\n@SuppressLint(\"PrivateApi\")\nfun getProp(mKey: String, defaultValue: Boolean): Boolean =\n    Class.forName(\"android.os.SystemProperties\")\n        .getMethod(\"getBoolean\", String::class.java, Boolean::class.javaPrimitiveType)\n        .invoke(Class.forName(\"android.os.SystemProperties\"), mKey, defaultValue) as Boolean\n\nfun getPackageInfoCompat(packageName: String, flags: Int = 0): PackageInfo =\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n        EzXHelper.appContext.packageManager.getPackageInfo(\n            packageName,\n            PackageManager.PackageInfoFlags.of(flags.toLong())\n        )\n    } else {\n        EzXHelper.appContext.packageManager.getPackageInfo(packageName, flags)\n    }\n\nfun checkVersionName(): String = getPackageInfoCompat(EzXHelper.appContext.packageName).versionName\n\nfun isAlpha(): Boolean =\n    getPackageInfoCompat(EzXHelper.appContext.packageName).versionName.contains(\"ALPHA\", ignoreCase = true)\n\nfun isTablet(): Boolean = Resources.getSystem().getConfiguration().smallestScreenWidthDp >= 600\n\nfun isPadDevice(): Boolean = isTablet() || DeviceHelper.isFoldDevice()\n\nfun checkVersionCode(): Long = getPackageInfoCompat(EzXHelper.appContext.packageName).longVersionCode\n\nfun checkAndroidVersion(): String = getProp(\"ro.build.version.release\")\n\n/**\n * 执行 Shell 命令\n * @param command Shell 命令\n */\nfun execShell(command: String) {\n    try {\n        val p = Runtime.getRuntime().exec(\"su\")\n        val outputStream = p.outputStream\n        val dataOutputStream = DataOutputStream(outputStream)\n        dataOutputStream.writeBytes(command)\n        dataOutputStream.flush()\n        dataOutputStream.close()\n        outputStream.close()\n    } catch (t: Throwable) {\n        t.printStackTrace()\n    }\n}\n\n@SuppressLint(\"DiscouragedApi\")\nfun getCornerRadiusTop(): Int {\n    val resourceId = EzXHelper.appContext.resources.getIdentifier(\n        \"rounded_corner_radius_top\", \"dimen\", \"android\"\n    )\n    return if (resourceId > 0) {\n        EzXHelper.appContext.resources.getDimensionPixelSize(resourceId)\n    } else 100\n}\n\nfun setLocale(context: Context, locale: Locale): Context {\n    var tmpLocale: Locale = locale\n    if (\"und\" == locale.toLanguageTag() || \"system\" == locale.toLanguageTag()) {\n        tmpLocale = Resources.getSystem().configuration.locales[0]\n    }\n    val configuration = context.resources.configuration\n    configuration.setLocale(tmpLocale)\n    Log.d(\"AppUtil\", \"setLocale: ${tmpLocale.toLanguageTag()}\")\n    // if (atLeastAndroidT()) {\n    //     AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(tmpLocale.toLanguageTag()))\n    // }\n    return context.createConfigurationContext(configuration)\n}\n\nfun getLocale(context: Context): Locale {\n    val pref = getSharedPrefs(context, true)\n    val tag: String? = pref.getString(\"prefs_key_settings_language\", \"SYSTEM\")\n    Log.d(\"AppUtil\", \"getLocale: tag=$tag\")\n    return if (tag == null || TextUtils.isEmpty(tag) || \"SYSTEM\" == tag) {\n        val sysLang = Resources.getSystem().configuration.locales[0].toLanguageTag().trim()\n        Log.d(\"AppUtil\", \"getLocale: sysLang=$sysLang\")\n        Locale.forLanguageTag(sysLang)\n    } else Locale.forLanguageTag(tag)\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/devicesdk/SystemSDK.kt",
    "content": "package com.sevtinge.cemiuiler.utils.devicesdk\n\nimport android.os.Build\n\n/**\n获取设备 Android 版本 、MIUI 版本\n并判断设备指定类型\n */\nfun getAndroidVersion(): Int = Build.VERSION.SDK_INT\n\nfun isAndroidR(): Boolean = getAndroidVersion() == Build.VERSION_CODES.R\nfun isAndroidS(): Boolean = getAndroidVersion() == Build.VERSION_CODES.S\nfun isAndroidSv2(): Boolean = getAndroidVersion() == Build.VERSION_CODES.S_V2\nfun isAndroidT(): Boolean = getAndroidVersion() == Build.VERSION_CODES.TIRAMISU\nfun isAndroidU(): Boolean = getAndroidVersion() == Build.VERSION_CODES.UPSIDE_DOWN_CAKE\n\nfun isMoreAndroidVersion(version: Int): Boolean {\n    return getAndroidVersion() >= version\n}\n\nfun getMiuiVersion(): Float = when (getProp(\"ro.miui.ui.version.name\")) {\n    \"V150\" -> 15f\n    \"V140\" -> 14f\n    \"V130\" -> 13f\n    \"V125\" -> 12.5f\n    \"V12\" -> 12f\n    \"V11\" -> 11f\n    \"V10\" -> 10f\n    else -> 0f\n}\n\nfun isMoreMiuiVersion(version: Float): Boolean {\n    return getMiuiVersion() >= version\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/log/AndroidLogUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils.log;\n\nimport android.util.Log;\n\nimport com.sevtinge.cemiuiler.BuildConfig;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\n/* 不太建议在非 Xposed 代码使用处调用，虽然已经做了 try 处理，但是 detailLog 将始终为 false\n * 可能因为 <BaseHook.mPrefsMap.getBoolean(\"settings_disable_detailed_log\");>\n * 会导致 <java.lang.NoClassDefFoundError: Failed resolution of: Lcom/sevtinge/cemiuiler/XposedInit;> 等\n * */\npublic class AndroidLogUtils {\n    private static final String Tag = \"Cemiuiler]: \";\n    private static final boolean isDebugVersion = BuildConfig.BUILD_TYPE.contains(\"debug\");\n    private static final boolean isNotReleaseVersion = !BuildConfig.BUILD_TYPE.contains(\"release\");\n    private static boolean detailLog = false;\n    private static boolean run = false;\n\n    private static void getDisableDetailedLog() {\n        if (!run) {\n            try {\n                detailLog = BaseHook.mPrefsMap.getBoolean(\"settings_disable_detailed_log\");\n            } catch (Throwable e) {\n                LogE(\"getDisableDetailedLog\", \"It is not recommended to call this class in non Xposed code,\" +\n                    \"detailLog will be false: \", e);\n            }\n            run = true;\n        }\n    }\n\n    public static void LogI(String tag, String msg) {\n        getDisableDetailedLog();\n        if (!isDebugVersion) return;\n        if (detailLog) return;\n        Log.i(tag, \"[I/\" + Tag + msg);\n    }\n\n    public static void deLogI(String tag, String msg) {\n        Log.i(tag, \"[I/\" + Tag + msg);\n    }\n\n    public static void LogD(String tag, Throwable tr) {\n        if (!isDebugVersion) return;\n        Log.d(tag, \"[D/\" + Tag, tr);\n    }\n\n    public static void LogD(String tag, String msg, Throwable tr) {\n        if (!isDebugVersion) return;\n        Log.d(tag, \"[D/\" + Tag + msg, tr);\n    }\n\n    public static void LogE(String tag, Throwable tr) {\n        if (!isDebugVersion) return;\n        Log.e(tag, \"[E/\" + Tag, tr);\n    }\n\n    public static void LogE(String tag, String msg, Throwable tr) {\n        if (!isDebugVersion) return;\n        Log.e(tag, \"[E/\" + Tag + msg, tr);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/log/XposedLogUtils.java",
    "content": "package com.sevtinge.cemiuiler.utils.log;\n\nimport java.util.Optional;\n\nimport com.sevtinge.cemiuiler.BuildConfig;\nimport com.sevtinge.cemiuiler.module.base.BaseHook;\n\nimport de.robv.android.xposed.XposedBridge;\n\n\npublic class XposedLogUtils {\n\n    private static boolean isDebugVersion = BuildConfig.BUILD_TYPE.contains(\"debug\");\n    private static boolean isReleaseVersion = BuildConfig.BUILD_TYPE.contains(\"release\");\n    private static boolean isDisableDetailLog = BaseHook.mPrefsMap.getBoolean(\"settings_disable_detailed_log\");\n\n    public static void logI(String msg) {\n        if (!isDebugVersion) return;\n        if (isDisableDetailLog) return;\n        XposedBridge.log(\"[Cemiuiler][I]: \" + msg);\n    }\n\n    public static void logI(String tag, String msg) {\n        if (!isDebugVersion) return;\n        if (isDisableDetailLog) return;\n        XposedBridge.log(\"[Cemiuiler][I][\" + tag + \"]: \" + msg);\n    }\n\n    public static void logW(String msg) {\n        if (isReleaseVersion) return;\n        if (isDisableDetailLog) return;\n        XposedBridge.log(\"[Cemiuiler][W]: \" + msg);\n    }\n\n    public static void logW(String tag, String msg) {\n        if (isReleaseVersion) return;\n        if (isDisableDetailLog) return;\n        XposedBridge.log(\"[Cemiuiler][W][\" + tag + \"]: \" + msg);\n    }\n\n    public static void logW(String tag, Throwable log) {\n        if (isReleaseVersion) return;\n        if (isDisableDetailLog) return;\n        XposedBridge.log(\"[Cemiuiler][W][\" + tag + \"]: \" + log);\n    }\n\n    public static void logW(String tag, String msg, Exception exp) {\n        if (isReleaseVersion) return;\n        if (isDisableDetailLog) return;\n        XposedBridge.log(\"[Cemiuiler][W][\" + tag + \"]: \" + msg + \", by\" + exp);\n    }\n\n    public static void logW(String tag, String msg, Throwable log) {\n        if (isReleaseVersion) return;\n        if (isDisableDetailLog) return;\n        XposedBridge.log(\"[Cemiuiler][W][\" + tag + \"]: \" + msg + \", by\" + log);\n    }\n\n    public static void logE(String tag, String msg) {\n        XposedBridge.log(\"[Cemiuiler][E][\" + tag + \"]: \" + msg);\n    }\n\n    public static void logE(String tag, Throwable log) {\n        XposedBridge.log(\"[Cemiuiler][E][\" + tag + \"]: \" + log);\n    }\n\n    public static void logE(String tag, Exception exp) {\n        XposedBridge.log(\"[Cemiuiler][E][\" + tag + \"]: \" + exp);\n    }\n\n    public static void logE(String tag, String msg, Throwable log) {\n        XposedBridge.log(\"[Cemiuiler][E][\" + tag + \"]: \" + msg + \", by\" + log);\n    }\n\n    public static void logE(String tag, String msg, Exception exp) {\n        XposedBridge.log(\"[Cemiuiler][E][\" + tag + \"]: \" + msg + \", by\" + exp);\n    }\n\n    public static void logD(String msg) {\n        if (!isDebugVersion) return;\n        XposedBridge.log(\"[Cemiuiler][D]: \" + msg);\n    }\n\n    public static void logD(String tag, String msg) {\n        if (!isDebugVersion) return;\n        XposedBridge.log(\"[Cemiuiler][D][\" + tag + \"]: \" + msg);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/utils/log/XposedLogUtilsKt.kt",
    "content": "package com.sevtinge.cemiuiler.utils.log\n\nimport com.sevtinge.cemiuiler.BuildConfig\nimport com.sevtinge.cemiuiler.module.base.BaseHook\nimport de.robv.android.xposed.XposedBridge\n\nobject XposedLogUtilsKt {\n    private val isDebugVersion = BuildConfig.BUILD_TYPE.contains(\"debug\")\n    private val isNotReleaseVersion = !BuildConfig.BUILD_TYPE.contains(\"release\")\n    private val detailLog = BaseHook.mPrefsMap.getBoolean(\"settings_disable_detailed_log\")\n\n    // Xposed debug 日志输出\n    fun logI(tag: String?, msg: String) {\n        if (!isDebugVersion) return\n        if (detailLog) return\n        if (tag != null) XposedBridge.log(\"[Cemiuiler][I][$tag]: $msg\") else XposedBridge.log(\"[Cemiuiler][I]: $msg\")\n\n    }\n\n    fun logW(tag: String, msg: String) {\n        if (detailLog) return\n        XposedBridge.log(\"[Cemiuiler][W][$tag]: $msg\")\n    }\n\n    fun logW(tag: String, log: Throwable) {\n        if (detailLog) return\n        XposedBridge.log(\"[Cemiuiler][W][$tag]: $log\")\n    }\n\n    fun logW(tag: String, msg: String, log: Throwable) {\n        if (detailLog) return\n        XposedBridge.log(\"[Cemiuiler][W][$tag]: $msg, warning by $log\")\n    }\n\n    fun logE(tag: String, log: Throwable?, exp: Exception?) {\n        val logMessage = \"[Cemiuiler][E][$tag]: \" +\n            when {\n                log != null -> \", hook failed by $log\"\n                exp != null -> \", hook failed by $exp\"\n                else -> \"\"\n            }\n        XposedBridge.log(logMessage)\n    }\n\n    fun logE(tag: String, msg: String, log: Throwable?, exp: Exception?) {\n        val logMessage = \"[Cemiuiler][E][$tag]: $msg\" +\n            when {\n                log != null -> \", hook failed by $log\"\n                exp != null -> \", hook failed by $exp\"\n                else -> \"\"\n            }\n        XposedBridge.log(logMessage)\n    }\n\n    fun logD(tag: String, msg: String) {\n        if (!isDebugVersion) return\n        XposedBridge.log(\"[Cemiuiler][D][$tag]: $msg\")\n    }\n\n    fun logD(msg: String) {\n        if (!isDebugVersion) return\n        XposedBridge.log(\"[Cemiuiler][D]: $msg\")\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/BatteryIndicatorView.java",
    "content": "package com.sevtinge.cemiuiler.view;\n\nimport android.animation.ArgbEvaluator;\nimport android.annotation.SuppressLint;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.content.res.Configuration;\nimport android.graphics.Color;\nimport android.graphics.LinearGradient;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.Shader;\nimport android.graphics.drawable.ShapeDrawable;\nimport android.graphics.drawable.shapes.RectShape;\nimport android.graphics.drawable.shapes.RoundRectShape;\nimport android.net.Uri;\nimport android.os.Handler;\nimport android.util.AttributeSet;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\n\nimport com.sevtinge.cemiuiler.utils.PrefsUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\npublic class BatteryIndicatorView extends ImageView {\n\n    protected int mDisplayWidth;\n    protected boolean mIsBeingCharged;\n    protected boolean mIsExtremePowerSave;\n    protected boolean mIsPowerSave;\n\n    @SuppressLint(\"DiscouragedApi\")\n    protected final int mLowLevelSystem = getResources().getInteger(getResources().getIdentifier(\"config_lowBatteryWarningLevel\", \"integer\", \"android\"));\n    protected int mPowerLevel;\n    protected int mTestPowerLevel;\n    private int mFullColor = Color.GREEN;\n    private int mLowColor = Color.RED;\n    private int mPowerSaveColor = Color.rgb(245, 166, 35);\n    private int mChargingColor = Color.YELLOW;\n    private int mLowLevel = mLowLevelSystem;\n    private int mHeight = 5;\n    private int mGlow = 0;\n    private int mTransparency = 0;\n    private int mPadding = 0;\n    private int mVisibility = View.VISIBLE;\n    private ColorMode mColorMode = ColorMode.DISCRETE;\n    private boolean mTesting = false;\n    private boolean mRounded = false;\n    private boolean mCentered = false;\n    private boolean mExpanded = false;\n    private boolean mOnKeyguard = false;\n    private boolean mBottom = false;\n    private boolean mLimited = false;\n    private int mTintColor = Color.argb(153, 0, 0, 0);\n    private Object mStatusBar = null;\n\n    enum ColorMode {\n        DISCRETE, GRADUAL, RAINBOW\n    }\n\n    public BatteryIndicatorView(Context context) {\n        super(context);\n        updateDisplaySize();\n    }\n\n    public BatteryIndicatorView(Context context, AttributeSet attributeSet) {\n        super(context, attributeSet);\n        updateDisplaySize();\n    }\n\n    public void init(Object statusBar) {\n        mStatusBar = statusBar;\n\n        try {\n            ShapeDrawable shape = new ShapeDrawable();\n            Paint paint = shape.getPaint();\n            paint.setStyle(Paint.Style.FILL);\n            paint.setAntiAlias(true);\n            shape.setIntrinsicWidth(9999);\n            setImageDrawable(shape);\n        } catch (Throwable t) {\n        }\n\n        updateParameters();\n        new PrefsUtils.SharedPrefsObserver(getContext(), new Handler(getContext().getMainLooper())) {\n            @Override\n            public void onChange(Uri uri) {\n                try {\n                    String key = uri.getPathSegments().get(2);\n                    if (!mTesting) {\n                        updateParameters();\n                        update();\n                    }\n                } catch (Throwable t) {\n                }\n            }\n        };\n        getContext().registerReceiver(new BroadcastReceiver() {\n            @Override\n            public void onReceive(Context context, Intent intent) {\n                removeCallbacks(step);\n                startTest();\n            }\n        }, new IntentFilter(\"moralnorm.module.BatteryIndicatorTest\"));\n    }\n\n    Runnable step = new Runnable() {\n        @Override\n        public void run() {\n            mTestPowerLevel--;\n            if (mTestPowerLevel >= 0) {\n                update();\n                postDelayed(step, mTestPowerLevel == mLowLevel - 1 ? 300 : 20);\n            } else {\n                removeCallbacks(step);\n                mTesting = false;\n                postDelayed(() -> {\n                    updateParameters();\n                    update();\n                }, 1000);\n            }\n        }\n    };\n\n    private void startTest() {\n        mTesting = true;\n        mTestPowerLevel = 100;\n        post(step);\n    }\n\n    private void postUpdate() {\n        post(BatteryIndicatorView.this::update);\n    }\n\n    public void onExpandingChanged(boolean expanded) {\n        if (mExpanded == expanded) return;\n        mExpanded = expanded;\n        update();\n    }\n\n    public void onKeyguardStateChanged(boolean showing) {\n        if (mOnKeyguard == showing) return;\n        mOnKeyguard = showing;\n        update();\n    }\n\n    public void onDarkModeChanged(float intensity, int tintColor) {\n        // if (intensity != 0.0f && intensity != 1.0f) return;\n        if (mTintColor == tintColor) return;\n        mTintColor = tintColor;\n        update();\n    }\n\n    public void onBatteryLevelChanged(int powerLevel, boolean isCharging, boolean isCharged) {\n        if (this.mPowerLevel == powerLevel && this.mIsBeingCharged == isCharging && !isCharged) return;\n        this.mPowerLevel = powerLevel;\n        this.mIsBeingCharged = isCharging && !isCharged;\n//\t\tif (isCharging != this.mIsCharged) {\n//\t\t\tthis.mIsCharged = isCharging;\n//\t\t\tif (!this.mIsCharged)\n//\t\t\t\tstartChargingAnim();\n//\t\t\telse\n//\t\t\t\tstopChargingAnim();\n//\t\t}\n        update();\n    }\n\n    public void onPowerSaveChanged(boolean isPowerSave) {\n        if (this.mIsPowerSave == isPowerSave) return;\n        this.mIsPowerSave = isPowerSave;\n        update();\n    }\n\n    public void onExtremePowerSaveChanged(boolean isExtremePowerSave) {\n        if (this.mIsExtremePowerSave == isExtremePowerSave) return;\n        this.mIsExtremePowerSave = isExtremePowerSave;\n        update();\n    }\n\n    @Override\n    protected void onConfigurationChanged(Configuration configuration) {\n        super.onConfigurationChanged(configuration);\n        updateDisplaySize();\n        postUpdate();\n    }\n\n    @Override\n    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {\n        super.onLayout(changed, left, top, right, bottom);\n        if (changed) {\n            updateDisplaySize();\n            postUpdate();\n        }\n    }\n\n    public void update() {\n        if (mLimited) this.setVisibility(mExpanded || mOnKeyguard ? mVisibility : View.GONE);\n        clearAnimation();\n        updateDrawable();\n    }\n\n    public void updateDisplaySize() {\n        this.mDisplayWidth = getMeasuredWidth();\n    }\n\n    protected void updateParameters() {\n        mColorMode = ColorMode.values()[Integer.parseInt(PrefsUtils.getSharedStringPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_color\", \"0\"))];\n        mFullColor = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_color_full_power\", Color.GREEN);\n        mLowColor = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_color_low_power\", Color.RED);\n        mPowerSaveColor = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_color_power_saving\", Color.rgb(245, 166, 35));\n        mChargingColor = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_color_power_charging\", Color.YELLOW);\n        mLowLevel = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_low_level\", mLowLevelSystem);\n        mHeight = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_height\", 5);\n        mGlow = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_glow\", 0);\n        mRounded = PrefsUtils.getSharedBoolPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_rounded\", false);\n        mBottom = Integer.parseInt(PrefsUtils.getSharedStringPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_align\", \"0\")) == 1;\n        mCentered = PrefsUtils.getSharedBoolPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_centered\", false);\n        mLimited = PrefsUtils.getSharedBoolPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_limitvis\", false);\n        mTransparency = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_alpha\", 0);\n        mPadding = PrefsUtils.getSharedIntPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_padding\", 0);\n        mVisibility = PrefsUtils.getSharedBoolPrefs(getContext(), \"prefs_key_system_ui_status_bar_battery_indicator_enable\", false) ? View.VISIBLE : View.GONE;\n        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();\n        lp.width = ViewGroup.LayoutParams.MATCH_PARENT;\n        lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;\n        lp.gravity = mBottom ? Gravity.BOTTOM : Gravity.TOP;\n        setLayoutParams(lp);\n        try {\n            this.setImageAlpha(255 - Math.round(255 * mTransparency / 100f));\n        } catch (Throwable ignore) {\n        }\n        this.setVisibility(mVisibility);\n        this.setScaleType(mCentered ? ScaleType.CENTER : ScaleType.MATRIX);\n        Matrix matrix = new Matrix();\n        matrix.setTranslate(0, 0);\n        matrix.setScale(1, 1);\n        this.setImageMatrix(new Matrix());\n    }\n\n    @SuppressLint({\"InternalInsetResource\", \"DiscouragedApi\"})\n    protected void updateDrawable() {\n        try {\n            int level = this.mTesting ? this.mTestPowerLevel : this.mPowerLevel;\n            int color = this.mFullColor;\n            if (!this.mTesting && this.mIsBeingCharged)\n                color = this.mChargingColor;\n            else if (!this.mTesting && (this.mIsPowerSave || this.mIsExtremePowerSave))\n                color = this.mPowerSaveColor;\n            else if (level <= this.mLowLevel)\n                color = this.mLowColor;\n\n            ShapeDrawable shape = (ShapeDrawable) getDrawable();\n            shape.setShaderFactory(null);\n            Paint paint = shape.getPaint();\n            paint.setShader(null);\n\n            if (color == Color.TRANSPARENT && mStatusBar != null)\n                try {\n                    if (mExpanded) {\n                        color = Color.WHITE;\n                    } else {\n                        if (mOnKeyguard) {\n                            boolean isLightWallpaperStatusBar = (boolean) XposedHelpers.callMethod(XposedHelpers.getObjectField(mStatusBar, \"mUpdateMonitor\"), \"isLightWallpaperStatusBar\");\n                            color = (isLightWallpaperStatusBar ? Color.argb(153, 0, 0, 0) : Color.WHITE);\n                        } else {\n                            color = mTintColor;\n                        }\n                    }\n                } catch (Throwable t) {\n                }\n\n            int mDisplayPadding = Math.round(mPadding / 100f * this.mDisplayWidth);\n\n            if (mColorMode == ColorMode.GRADUAL) {\n                color = level <= this.mLowLevel || (!this.mTesting && (this.mIsBeingCharged || this.mIsPowerSave || this.mIsExtremePowerSave)) ? color : (int) new ArgbEvaluator().evaluate(1f - (level - this.mLowLevel) / (100f - this.mLowLevel), color, mLowColor);\n            } else if (mColorMode == ColorMode.RAINBOW) {\n                int steps = 15;\n                float jump = 300f / (float) steps;\n                float[] pos = new float[steps];\n                int[] rainbow = new int[steps];\n                for (int i = 0; i < steps; i++) {\n                    pos[i] = i / (float) (steps - 1);\n                    float c = (mCentered ? 240 : 0) + jump * i;\n                    if (c > 360) c -= 360;\n                    rainbow[i] = Color.HSVToColor(255, new float[]{c, 1.0f, 1.0f});\n                }\n                shape.setShaderFactory(new ShapeDrawable.ShaderFactory() {\n                    @Override\n                    public Shader resize(int width, int height) {\n                        if (mCentered)\n                            return new LinearGradient(width / 2f - (mDisplayWidth - mDisplayPadding * 2) / 2f, height / 2f, (mDisplayWidth - mDisplayPadding * 2), height / 2f, rainbow, pos, Shader.TileMode.CLAMP);\n                        else\n                            return new LinearGradient(0, height / 2f, (mDisplayWidth - mDisplayPadding * 2), height / 2f, rainbow, pos, Shader.TileMode.CLAMP);\n                    }\n                });\n            }\n            paint.setColor(color);\n            shape.setShape(mRounded ? new RoundRectShape(new float[]{mHeight, mHeight, mHeight, mHeight, mHeight, mHeight, mHeight, mHeight}, null, null) : new RectShape());\n\n            int mWidth = Math.round((this.mDisplayWidth - mDisplayPadding * 2) * level / 100f);\n            float mDensity = getResources().getDisplayMetrics().density;\n            int sbHeight = getResources().getDimensionPixelSize(getResources().getIdentifier(\"status_bar_height\", \"dimen\", \"android\"));\n            if (mGlow == 0) {\n                paint.clearShadowLayer();\n                if (mBottom)\n                    setPadding(mDisplayPadding, 0, mDisplayPadding, -mHeight);\n                else\n                    setPadding(mDisplayPadding, -mHeight, mDisplayPadding, 0);\n                shape.setIntrinsicHeight(mHeight * 2);\n                shape.setIntrinsicWidth(mWidth);\n            } else {\n                int shadowPadding = sbHeight - mHeight;\n                paint.setShadowLayer(\n                    (mGlow / 100f) * (sbHeight - 9 * mDensity),\n                    (mCentered || mDisplayPadding > 0) ? 0 : shadowPadding / 2f,\n                    mBottom ? mHeight - 10 : 10 - mHeight,\n                    Color.argb(Math.min(Math.round(mGlow / 100f * 255), Math.round(255 - mTransparency / 100f * 255)), Color.red(color), Color.green(color), Color.blue(color))\n                );\n                if (mDisplayPadding == 0)\n                    setPadding(mCentered ? 0 : -shadowPadding, mBottom ? shadowPadding : -shadowPadding, mCentered ? 0 : Math.min(mDisplayWidth - mWidth, shadowPadding), mBottom ? -shadowPadding : shadowPadding);\n                else\n                    setPadding(mDisplayPadding, mBottom ? shadowPadding : -shadowPadding, mDisplayPadding, mBottom ? -shadowPadding : shadowPadding);\n                shape.setIntrinsicHeight(sbHeight);\n                shape.setIntrinsicWidth(mWidth + (mCentered ? 0 : (mDisplayPadding == 0 ? shadowPadding : 0)));\n            }\n\n            invalidate();\n        } catch (Throwable t) {\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/BlurFrameLayout.java",
    "content": "package com.sevtinge.cemiuiler.view;\n\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.graphics.drawable.Drawable;\nimport android.graphics.drawable.GradientDrawable;\nimport android.os.Build;\nimport android.text.TextUtils;\nimport android.view.View;\nimport android.widget.FrameLayout;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.sevtinge.cemiuiler.XposedInit;\nimport com.sevtinge.cemiuiler.utils.DisplayUtils;\n\nimport de.robv.android.xposed.XposedHelpers;\n\n@RequiresApi(Build.VERSION_CODES.S)\npublic class BlurFrameLayout {\n\n    int mBgColor;\n    int mBgAlpha;\n    int mBgCornerRadius;\n    int mBlurRadius;\n\n    boolean isBlurEnable;\n\n    Context mContext;\n    Drawable mBlurDrawable;\n\n    Object mViewRootImpl;\n    View mBlurView;\n\n\n    public BlurFrameLayout(Context context, boolean blurEnable) {\n        isBlurEnable = blurEnable;\n    }\n\n    public BlurFrameLayout(View view, String key) {\n        this(view.getContext(), false);\n        mContext = view.getContext();\n        mBlurView = new FrameLayout(mContext);\n        if (!TextUtils.isEmpty(key)) {\n            String mBgColorKey = key + \"_bg_color\";\n            String mBgAlphaKey = key + \"_bg_alpha\";\n            String mBgCornerRadiusKey = key + \"_bg_corner_radius\";\n\n            String mBlurRadiusKey = key + \"_blur_radius\";\n\n            mBlurRadius = XposedInit.mPrefsMap.getInt(mBlurRadiusKey, 60);\n\n            mBgColor = XposedInit.mPrefsMap.getInt(mBgColorKey, -1);\n            mBgAlpha = XposedInit.mPrefsMap.getInt(mBgAlphaKey, 60);\n            mBgCornerRadius = DisplayUtils.dip2px(mContext, XposedInit.mPrefsMap.getInt(mBgCornerRadiusKey, 90));\n        }\n        setOnAttachStateChangeListener(mBlurView);\n    }\n\n    private void setOnAttachStateChangeListener(View view) {\n        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {\n            @Override\n            public void onViewAttachedToWindow(View v) {\n                mViewRootImpl = XposedHelpers.callMethod(v, \"getViewRootImpl\");\n                mBlurDrawable = (Drawable) XposedHelpers.callMethod(mViewRootImpl, \"createBackgroundBlurDrawable\", new Object[0]);\n                setBackgroundDrawable(mContext, v, isBlurEnable, mBgColor, mBgAlpha, mBgCornerRadius, mBlurRadius);\n            }\n\n            @Override\n            public void onViewDetachedFromWindow(View v) {\n                v.setBackground(null);\n            }\n        });\n    }\n\n\n    private void setBackgroundDrawable(Context context, View view, boolean isBlurEnable, int color, int alpha, int cornerRadius, int blurRadius) {\n        if (isBlurEnable) {\n            setColor(color, alpha);\n            setCornerRadius(cornerRadius);\n            setBlurRadius(blurRadius);\n        } else {\n            view.setBackground(createGradientDrawable(context, color, alpha, cornerRadius));\n        }\n    }\n\n\n    public void setColor(int color, int alpha) {\n        int mColorRed = (color & 0x00ff0000) >> 16;\n        int mColorGreen = (color & 0x0000ff00) >> 8;\n        int mColorBlue = (color & 0x000000ff);\n        XposedHelpers.callMethod(mBlurDrawable, \"setColor\", Color.argb(alpha, mColorRed, mColorGreen, mColorBlue));\n    }\n\n    public void setCornerRadius(int cornerRadius) {\n        XposedHelpers.callMethod(mBlurDrawable, \"setCornerRadius\", cornerRadius);\n    }\n\n    public void setBlurRadius(int blurRadius) {\n        XposedHelpers.callMethod(mBlurDrawable, \"setBlurRadius\", blurRadius);\n    }\n\n    private GradientDrawable createGradientDrawable(Context context, int color, int alpha, int cornerRadius) {\n\n        int mColorRed = (color & 0x00ff0000) >> 16;\n        int mColorGreen = (color & 0x0000ff00) >> 8;\n        int mColorBlue = (color & 0x000000ff);\n\n        GradientDrawable mBackgroundDrawable = new GradientDrawable();\n        mBackgroundDrawable.setShape(GradientDrawable.RECTANGLE);\n        mBackgroundDrawable.setColor(Color.argb(alpha, mColorRed, mColorGreen, mColorBlue));\n        mBackgroundDrawable.setCornerRadius(DisplayUtils.dip2px(context, cornerRadius));\n        return mBackgroundDrawable;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/CircleImageView.java",
    "content": "package com.sevtinge.cemiuiler.view;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapShader;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorFilter;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.RectF;\nimport android.graphics.Shader;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.ColorDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.net.Uri;\nimport android.util.AttributeSet;\nimport android.widget.ImageView;\n\nimport com.sevtinge.cemiuiler.R;\n\nimport androidx.annotation.ColorInt;\nimport androidx.annotation.ColorRes;\nimport androidx.annotation.DrawableRes;\n\npublic class CircleImageView extends ImageView {\n\n    private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;\n\n    private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;\n    private static final int COLORDRAWABLE_DIMENSION = 2;\n\n    private static final int DEFAULT_BORDER_WIDTH = 0;\n    private static final int DEFAULT_BORDER_COLOR = Color.BLACK;\n    private static final int DEFAULT_FILL_COLOR = Color.TRANSPARENT;\n    private static final boolean DEFAULT_BORDER_OVERLAY = false;\n\n    private final RectF mDrawableRect = new RectF();\n    private final RectF mBorderRect = new RectF();\n\n    private final Matrix mShaderMatrix = new Matrix();\n    private final Paint mBitmapPaint = new Paint();\n    private final Paint mBorderPaint = new Paint();\n    private final Paint mFillPaint = new Paint();\n\n    private int mBorderColor = DEFAULT_BORDER_COLOR;\n    private int mBorderWidth = DEFAULT_BORDER_WIDTH;\n    private int mFillColor = DEFAULT_FILL_COLOR;\n\n    private Bitmap mBitmap;\n    private BitmapShader mBitmapShader;\n    private int mBitmapWidth;\n    private int mBitmapHeight;\n\n    private float mDrawableRadius;\n    private float mBorderRadius;\n\n    private ColorFilter mColorFilter;\n\n    private boolean mReady;\n    private boolean mSetupPending;\n    private boolean mBorderOverlay;\n\n    public CircleImageView(Context context) {\n        super(context);\n        init();\n    }\n\n    public CircleImageView(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n\n    public CircleImageView(Context context, AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);\n        mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);\n        mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);\n        mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_border_overlay, DEFAULT_BORDER_OVERLAY);\n        mFillColor = a.getColor(R.styleable.CircleImageView_fill_color1, DEFAULT_FILL_COLOR);\n\n        a.recycle();\n\n        init();\n    }\n\n    private void init() {\n        super.setScaleType(SCALE_TYPE);\n        mReady = true;\n\n        if (mSetupPending) {\n            setup();\n            mSetupPending = false;\n        }\n    }\n\n    @Override\n    public ScaleType getScaleType() {\n        return SCALE_TYPE;\n    }\n\n    @Override\n    public void setScaleType(ScaleType scaleType) {\n        if (scaleType != SCALE_TYPE) {\n            throw new IllegalArgumentException(String.format(\"ScaleType %s not supported.\", scaleType));\n        }\n    }\n\n    @Override\n    public void setAdjustViewBounds(boolean adjustViewBounds) {\n        if (adjustViewBounds) {\n            throw new IllegalArgumentException(\"adjustViewBounds not supported.\");\n        }\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        if (mBitmap == null) {\n            return;\n        }\n        if (mFillColor != Color.TRANSPARENT) {\n            canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mFillPaint);\n        }\n        canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mBitmapPaint);\n        if (mBorderWidth != 0) {\n            canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mBorderRadius, mBorderPaint);\n        }\n    }\n\n    @Override\n    protected void onSizeChanged(int w, int h, int oldw, int oldh) {\n        super.onSizeChanged(w, h, oldw, oldh);\n        setup();\n    }\n\n    public int getBorderColor() {\n        return mBorderColor;\n    }\n\n    public void setBorderColor(@ColorInt int borderColor) {\n        if (borderColor == mBorderColor) {\n            return;\n        }\n\n        mBorderColor = borderColor;\n        mBorderPaint.setColor(mBorderColor);\n        invalidate();\n    }\n\n    public void setBorderColorResource(@ColorRes int borderColorRes) {\n        setBorderColor(getContext().getResources().getColor(borderColorRes, null));\n    }\n\n    public int getFillColor() {\n        return mFillColor;\n    }\n\n    public void setFillColor(@ColorInt int fillColor) {\n        if (fillColor == mFillColor) {\n            return;\n        }\n\n        mFillColor = fillColor;\n        mFillPaint.setColor(fillColor);\n        invalidate();\n    }\n\n    public void setFillColorResource(@ColorRes int fillColorRes) {\n        setFillColor(getContext().getResources().getColor(fillColorRes, null));\n    }\n\n    public int getBorderWidth() {\n        return mBorderWidth;\n    }\n\n    public void setBorderWidth(int borderWidth) {\n        if (borderWidth == mBorderWidth) {\n            return;\n        }\n\n        mBorderWidth = borderWidth;\n        setup();\n    }\n\n    public boolean isBorderOverlay() {\n        return mBorderOverlay;\n    }\n\n    public void setBorderOverlay(boolean borderOverlay) {\n        if (borderOverlay == mBorderOverlay) {\n            return;\n        }\n\n        mBorderOverlay = borderOverlay;\n        setup();\n    }\n\n    @Override\n    public void setImageBitmap(Bitmap bm) {\n        super.setImageBitmap(bm);\n        mBitmap = bm;\n        setup();\n    }\n\n    @Override\n    public void setImageDrawable(Drawable drawable) {\n        super.setImageDrawable(drawable);\n        mBitmap = getBitmapFromDrawable(drawable);\n        setup();\n    }\n\n    @Override\n    public void setImageResource(@DrawableRes int resId) {\n        super.setImageResource(resId);\n        mBitmap = getBitmapFromDrawable(getDrawable());\n        setup();\n    }\n\n    @Override\n    public void setImageURI(Uri uri) {\n        super.setImageURI(uri);\n        mBitmap = uri != null ? getBitmapFromDrawable(getDrawable()) : null;\n        setup();\n    }\n\n    @Override\n    public void setColorFilter(ColorFilter cf) {\n        if (cf == mColorFilter) {\n            return;\n        }\n\n        mColorFilter = cf;\n        mBitmapPaint.setColorFilter(mColorFilter);\n        invalidate();\n    }\n\n    private Bitmap getBitmapFromDrawable(Drawable drawable) {\n        if (drawable == null) {\n            return null;\n        }\n\n        if (drawable instanceof BitmapDrawable) {\n            return ((BitmapDrawable) drawable).getBitmap();\n        }\n\n        try {\n            Bitmap bitmap;\n\n            if (drawable instanceof ColorDrawable) {\n                bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);\n            } else {\n                bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);\n            }\n\n            Canvas canvas = new Canvas(bitmap);\n            drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());\n            drawable.draw(canvas);\n            return bitmap;\n        } catch (Exception e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    private void setup() {\n        if (!mReady) {\n            mSetupPending = true;\n            return;\n        }\n\n        if (getWidth() == 0 && getHeight() == 0) {\n            return;\n        }\n\n        if (mBitmap == null) {\n            invalidate();\n            return;\n        }\n\n        mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);\n\n        mBitmapPaint.setAntiAlias(true);\n        mBitmapPaint.setShader(mBitmapShader);\n\n        mBorderPaint.setStyle(Paint.Style.STROKE);\n        mBorderPaint.setAntiAlias(true);\n        mBorderPaint.setColor(mBorderColor);\n        mBorderPaint.setStrokeWidth(mBorderWidth);\n\n        mFillPaint.setStyle(Paint.Style.FILL);\n        mFillPaint.setAntiAlias(true);\n        mFillPaint.setColor(mFillColor);\n\n        mBitmapHeight = mBitmap.getHeight();\n        mBitmapWidth = mBitmap.getWidth();\n\n        mBorderRect.set(0, 0, getWidth(), getHeight());\n        mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f);\n\n        mDrawableRect.set(mBorderRect);\n        if (!mBorderOverlay) {\n            mDrawableRect.inset(mBorderWidth, mBorderWidth);\n        }\n        mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f);\n\n        updateShaderMatrix();\n        invalidate();\n    }\n\n    private void updateShaderMatrix() {\n        float scale;\n        float dx = 0;\n        float dy = 0;\n\n        mShaderMatrix.set(null);\n\n        if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {\n            scale = mDrawableRect.height() / (float) mBitmapHeight;\n            dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;\n        } else {\n            scale = mDrawableRect.width() / (float) mBitmapWidth;\n            dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;\n        }\n\n        mShaderMatrix.setScale(scale, scale);\n        mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top);\n\n        mBitmapShader.setLocalMatrix(mShaderMatrix);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/MultipleChoiceView.java",
    "content": "package com.sevtinge.cemiuiler.view;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.util.SparseBooleanArray;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.LinearLayout;\n\nimport androidx.annotation.Nullable;\nimport androidx.recyclerview.widget.LinearLayoutManager;\nimport androidx.recyclerview.widget.RecyclerView;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.data.adapter.MutipleChoiceAdapter;\n\nimport java.util.List;\n\npublic class MultipleChoiceView extends LinearLayout implements MutipleChoiceAdapter.OnCurWillCheckAllChangedListener {\n\n    private MutipleChoiceAdapter mAdapter;\n    private List<String> mData;\n    private RecyclerView mListView;\n    private Button mAllSelectBtn;\n    private Button mOkBtn;\n    // 确定选择监听器\n    private onCheckedListener mOnCheckedListener;\n    // 当前点击按钮时是否将全选\n    private boolean curWillCheckAll = true;\n\n    public MultipleChoiceView(Context context) {\n        super(context);\n        initView(context);\n    }\n\n    public MultipleChoiceView(Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n        initView(context);\n    }\n\n\n    /* 实例化各个控件 */\n    private void initView(Context context) {\n        View view = inflate(context, R.layout.view_mutiplechoice, this);\n        mListView = view.findViewById(android.R.id.list);\n        mListView.setLayoutManager(new LinearLayoutManager(context));\n        mListView.setHasFixedSize(true);\n        mAllSelectBtn = view.findViewById(android.R.id.button2);\n        mOkBtn = view.findViewById(android.R.id.button1);\n        mAllSelectBtn.setText(curWillCheckAll ? getResources().getString(R.string.appcompat_action_mode_select_all) : getResources().getString(R.string.appcompat_action_mode_inverse));\n        OnCustomMultipleChoiceCheckedListener onCheckedListener = new OnCustomMultipleChoiceCheckedListener();\n\n        // 全选按钮的回调接口\n        mAllSelectBtn.setOnClickListener(onCheckedListener);\n        mOkBtn.setOnClickListener(onCheckedListener);\n    }\n\n    public void setData(List<String> data, boolean[] isSelected) {\n        if (data != null) {\n            mData = data;\n            mAdapter = new MutipleChoiceAdapter(data);\n            mAdapter.setOnCurWillCheckAllChangedListener(this);\n            if (isSelected != null) {\n                if (isSelected.length != data.size()) {\n                    throw new IllegalArgumentException(\"data's length not equal the isSelected's length\");\n                } else {\n                    for (int i = 0; i < isSelected.length; i++) {\n                        mAdapter.getCheckedArray().put(i, isSelected[i]);\n                    }\n                }\n\n            }\n            // 绑定Adapter\n            mListView.setAdapter(mAdapter);\n        } else {\n            throw new IllegalArgumentException(\"data is null\");\n        }\n    }\n\n    public void setOnCheckedListener(onCheckedListener listener) {\n        mOnCheckedListener = listener;\n    }\n\n    @Override\n    public void onCurWillCheckAllChanged(boolean curWillCheckAll) {\n        this.curWillCheckAll = curWillCheckAll;\n        mAllSelectBtn.setText(curWillCheckAll ? getResources().getString(R.string.appcompat_action_mode_select_all) : getResources().getString(R.string.appcompat_action_mode_inverse));\n    }\n\n    public interface onCheckedListener {\n        void onChecked(SparseBooleanArray sparseBooleanArray);\n    }\n\n    /**\n     * 全选\n     */\n    public void selectAll() {\n        if (mData != null) {\n            for (int i = 0; i < mData.size(); i++) {\n                mAdapter.getCheckedArray().put(i, true);\n            }\n            // 刷新listview和TextView的显示\n            mAdapter.notifyDataSetChanged();\n        }\n    }\n\n    /**\n     * 全不选\n     */\n    public void deselectAll() {\n        if (mData != null) {\n            for (int i = 0; i < mData.size(); i++) {\n                mAdapter.getCheckedArray().put(i, false);\n            }\n            // 刷新listview和TextView的显示\n            mAdapter.notifyDataSetChanged();\n        }\n    }\n\n    /**\n     * 反选\n     */\n    public void reverseSelect() {\n        if (mData != null) {\n            for (int i = 0; i < mData.size(); i++) {\n                mAdapter.getCheckedArray().put(i, !mAdapter.getCheckedArray().get(i));\n            }\n            // 刷新listview和TextView的显示\n            mAdapter.notifyDataSetChanged();\n        }\n    }\n\n    private class OnCustomMultipleChoiceCheckedListener implements OnClickListener {\n\n        @Override\n        public void onClick(View v) {\n            switch (v.getId()) {\n                // 确定选择按钮\n                case android.R.id.button1 -> {\n                    if (mOnCheckedListener != null && mAdapter != null) {\n                        mOnCheckedListener.onChecked(mAdapter.getCheckedArray());\n                    }\n                }\n                // 全选/反选按钮\n                case android.R.id.button2 -> {\n                    if (mData != null) {\n                        if (curWillCheckAll) {\n                            selectAll();\n                        } else {\n                            reverseSelect();\n                        }\n                        ((Button) v).setText(curWillCheckAll ? getResources().getString(R.string.appcompat_action_mode_inverse) : getResources().getString(R.string.appcompat_action_mode_select_all));\n                        curWillCheckAll = !curWillCheckAll;\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/RestartAlertDialog.java",
    "content": "package com.sevtinge.cemiuiler.view;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.res.Resources;\n\nimport com.sevtinge.cemiuiler.R;\nimport com.sevtinge.cemiuiler.module.app.GlobalActions;\nimport com.sevtinge.cemiuiler.utils.ShellUtils;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport moralnorm.appcompat.app.AlertDialog;\n\npublic class RestartAlertDialog extends AlertDialog {\n\n    List<String> mAppNameList;\n    List<String> mAppPackageNameList;\n\n    public RestartAlertDialog(Context context) {\n        super(context);\n        setView(createMultipleChoiceView(context));\n    }\n\n    private MultipleChoiceView createMultipleChoiceView(Context context) {\n        Resources mRes = context.getResources();\n        MultipleChoiceView view = new MultipleChoiceView(context);\n        mAppNameList = Arrays.asList(mRes.getStringArray(R.array.restart_apps_name));\n        mAppPackageNameList = Arrays.asList(mRes.getStringArray(R.array.restart_apps_packagename));\n        view.setData(mAppNameList, null);\n        view.deselectAll();\n        view.setOnCheckedListener(sparseBooleanArray -> {\n            dismiss();\n            for (int i = 0; i < sparseBooleanArray.size(); i++) {\n                if (sparseBooleanArray.get(i)) {\n                    ShellUtils.execCommand(\"pkill -l 9 -f \" + mAppPackageNameList.get(i), true, false);\n                }\n            }\n        });\n        return view;\n    }\n\n    public void restartApp(Context context, String packageName) {\n        Intent intent = new Intent(GlobalActions.ACTION_PREFIX + \"RestartApps\");\n        intent.putExtra(\"packageName\", packageName);\n        context.sendBroadcast(intent);\n    }\n\n    public void restartSystemUI(Context context) {\n        Intent intent = new Intent(GlobalActions.ACTION_PREFIX + \"RestartSystemUI\");\n        intent.setPackage(\"com.android.systemui\");\n        context.sendBroadcast(intent);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/SpinnerEx.java",
    "content": "package com.sevtinge.cemiuiler.view;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ArrayAdapter;\n\nimport java.util.ArrayList;\n\nimport moralnorm.appcompat.widget.Spinner;\n\n\npublic class SpinnerEx extends Spinner {\n\n    public CharSequence[] entries;\n    public int[] entryValues;\n    private final ArrayList<Integer> disabledItems = new ArrayList<>();\n\n    public SpinnerEx(Context context, AttributeSet attrs) {\n        super(context, attrs);\n\n        final TypedArray xmlAttrs = context.obtainStyledAttributes(attrs, new int[]{android.R.attr.entries, 0});\n        entries = xmlAttrs.getTextArray(0);\n        if (xmlAttrs.getResourceId(1, 0) != 0) entryValues = getResources().getIntArray(xmlAttrs.getResourceId(1, 0));\n        xmlAttrs.recycle();\n    }\n\n    private int findIndex(int val, int[] vals) {\n        for (int i = 0; i < vals.length; i++)\n            if (vals[i] == val) return i;\n        return -1;\n    }\n\n    public void init(int val) {\n        if (entries == null || entryValues == null) return;\n        ArrayAdapterEx newAdapter = new ArrayAdapterEx(getContext(), android.R.layout.simple_spinner_item, entries);\n        setAdapter(newAdapter);\n        setSelection(findIndex(val, entryValues));\n    }\n\n    public void addDisabledItems(int item) {\n        disabledItems.add(item);\n    }\n\n    public int getSelectedArrayValue() {\n        return entryValues[getSelectedItemPosition()];\n    }\n\n    class ArrayAdapterEx extends ArrayAdapter<CharSequence> {\n\n        ArrayAdapterEx(Context context, int resource, CharSequence[] objects) {\n            super(context, resource, objects);\n        }\n\n        @Override\n        public boolean isEnabled(int position) {\n            return !disabledItems.contains(position);\n        }\n\n        @Override\n        public View getDropDownView(int position, View convertView, ViewGroup parent) {\n            View view = super.getDropDownView(position, convertView, parent);\n            view.setEnabled(isEnabled(position));\n            return view;\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/WeatherData.kt",
    "content": "package com.sevtinge.cemiuiler.view\n\nimport android.annotation.SuppressLint\nimport android.content.ComponentName\nimport android.content.Context\nimport android.content.Intent\nimport android.database.ContentObserver\nimport android.net.Uri\nimport android.os.Handler\nimport android.os.Looper\nimport android.os.Message\nimport android.text.TextUtils\nimport android.widget.Toast\nimport com.sevtinge.cemiuiler.utils.api.argTypes\nimport com.sevtinge.cemiuiler.utils.api.args\nimport com.sevtinge.cemiuiler.utils.callStaticMethod\n\n@SuppressLint(\"ViewConstructor\", \"SetTextI18n\")\nclass WeatherData(val context: Context?, private val showCity: Boolean) {\n\n    private val mContext: Context\n    private val mWeatherUri = Uri.parse(\"content://weather/weather\")\n    private val mHandler: Handler\n    private val mWeatherObserver: ContentObserver?\n    private val mWeatherRunnable: WeatherRunnable\n    var weatherData: String = \"\\n\"\n    var callBacks: () -> Unit = {}\n\n    init {\n        mHandler =\n            object : Handler(Looper.getMainLooper()) {\n                override fun handleMessage(message: Message) {\n                    val str = message.obj as String\n                    weatherData = if (TextUtils.isEmpty(str)) \"\\n\" else \"$str\\n\"\n                    callBacks()\n                }\n            }\n        mWeatherObserver = WeatherContentObserver(mHandler)\n        mContext = context!!\n        mWeatherRunnable = WeatherRunnable()\n        context.contentResolver.registerContentObserver(mWeatherUri, true, mWeatherObserver)\n        updateWeatherInfo()\n    }\n\n    private inner class WeatherContentObserver(handler: Handler?) : ContentObserver(handler) {\n        override fun onChange(z: Boolean) {\n            updateWeatherInfo()\n        }\n    }\n\n    inner class WeatherRunnable : Runnable {\n        override fun run() {\n            var str = \"\"\n            try {\n                val query = mContext.contentResolver.query(mWeatherUri, null, null, null, null)\n                if (query != null) {\n                    if (query.moveToFirst()) {\n                        str = if (showCity) {\n                            query.getString(query.getColumnIndexOrThrow(\"city_name\")) + \" \" + query.getString(\n                                query.getColumnIndexOrThrow(\n                                    \"description\"\n                                )\n                            ) + \" \" + query.getString(query.getColumnIndexOrThrow(\"temperature\"))\n                        } else {\n                            query.getString(query.getColumnIndexOrThrow(\"description\")) + \" \" + query.getString(\n                                query.getColumnIndexOrThrow(\n                                    \"temperature\"\n                                )\n                            )\n                        }\n                    }\n                    query.close()\n                }\n            } catch (_: Exception) {\n\n            }\n            val obtainMessage2 = mHandler.obtainMessage()\n            obtainMessage2.what = 100\n            obtainMessage2.obj = str\n            mHandler.sendMessage(obtainMessage2)\n        }\n    }\n\n    private fun updateWeatherInfo() {\n        mHandler.removeCallbacks(mWeatherRunnable)\n        mHandler.postDelayed(mWeatherRunnable, 200)\n    }\n\n    fun onDetachedFromWindow() {\n        if (mWeatherObserver != null) {\n            mContext.contentResolver.unregisterContentObserver(mWeatherObserver)\n        }\n    }\n\n    fun startCalendarApp() {\n        mContext.classLoader.loadClass(\"com.miui.systemui.util.CommonUtil\")\n            .callStaticMethod(\"startCalendarApp\", args(context), argTypes(Context::class.java))\n    }\n\n    fun startWeatherApp() {\n        try {\n            val intent = Intent().apply {\n                flags = Intent.FLAG_ACTIVITY_NEW_TASK\n                component = ComponentName(\n                    \"com.miui.weather2\",\n                    \"com.miui.weather2.ActivityWeatherMain\"\n                )\n            }\n            mContext.startActivity(intent)\n        } catch (e: Exception) {\n            Toast.makeText(context, \"启动失败\", Toast.LENGTH_LONG).show()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/sevtinge/cemiuiler/view/WeatherView.kt",
    "content": "package com.sevtinge.cemiuiler.view\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.database.ContentObserver\nimport android.net.Uri\nimport android.os.Handler\nimport android.os.Looper\nimport android.os.Message\nimport android.text.TextUtils\nimport android.widget.TextView\n\n@SuppressLint(\"ViewConstructor\")\nclass WeatherView(context: Context?, private val showCity: Boolean) : TextView(context) {\n\n    private val mContext: Context\n    private val weatherUri = Uri.parse(\"content://weather/weather\")\n    private val mHandler: Handler\n    private val mWeatherObserver: ContentObserver?\n    private val mWeatherRunnable: WeatherRunnable\n\n    init {\n        mHandler =\n            object : Handler(Looper.getMainLooper()) {\n                override fun handleMessage(message: Message) {\n                    val str = message.obj as String\n                    this@WeatherView.text = if (TextUtils.isEmpty(str)) \" \" else str\n                }\n            }\n        mWeatherObserver = WeatherContentObserver(mHandler)\n        mContext = context!!\n        mWeatherRunnable = WeatherRunnable()\n        context.contentResolver.registerContentObserver(weatherUri, true, mWeatherObserver)\n        updateWeatherInfo()\n    }\n\n    private inner class WeatherContentObserver(handler: Handler?) : ContentObserver(handler) {\n        override fun onChange(z: Boolean) {\n            updateWeatherInfo()\n        }\n    }\n\n    inner class WeatherRunnable : Runnable {\n        override fun run() {\n            var str = \"\"\n            try {\n                val query = mContext.contentResolver.query(weatherUri, null, null, null, null)\n                if (query != null) {\n                    if (query.moveToFirst()) {\n                        str = if (showCity) {\n                            query.getString(query.getColumnIndexOrThrow(\"city_name\")) + \" \" + query.getString(\n                                query.getColumnIndexOrThrow(\n                                    \"description\"\n                                )\n                            ) + \" \" + query.getString(query.getColumnIndexOrThrow(\"temperature\"))\n                        } else {\n                            query.getString(query.getColumnIndexOrThrow(\"description\")) + \" \" + query.getString(\n                                query.getColumnIndexOrThrow(\n                                    \"temperature\"\n                                )\n                            )\n                        }\n                    }\n                    query.close()\n                }\n            } catch (_: Exception) {\n\n            }\n            val obtainMessage2 = mHandler.obtainMessage()\n            obtainMessage2.what = 100\n            obtainMessage2.obj = str\n            mHandler.sendMessage(obtainMessage2)\n        }\n    }\n\n    private fun updateWeatherInfo() {\n        mHandler.removeCallbacks(mWeatherRunnable)\n        mHandler.postDelayed(mWeatherRunnable, 200)\n    }\n\n    public override fun onDetachedFromWindow() {\n        super.onDetachedFromWindow()\n        if (mWeatherObserver != null) {\n            mContext.contentResolver.unregisterContentObserver(mWeatherObserver)\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/zhenxiang/blur/BackgroundBlurDrawableExtensions.kt",
    "content": "package com.zhenxiang.blur\n\nimport android.os.Build\nimport androidx.annotation.RequiresApi\nimport com.android.internal.graphics.drawable.BackgroundBlurDrawable\nimport org.lsposed.hiddenapibypass.HiddenApiBypass\n\n@RequiresApi(Build.VERSION_CODES.S)\nfun BackgroundBlurDrawable.setColor(color: Int) {\n    HiddenApiBypass.invoke(BackgroundBlurDrawable::class.java, this, \"setColor\", color)\n}\n\n@RequiresApi(Build.VERSION_CODES.S)\nfun BackgroundBlurDrawable.setBlurRadius(blurRadius: Int) {\n    HiddenApiBypass.invoke(BackgroundBlurDrawable::class.java, this, \"setBlurRadius\", blurRadius)\n}\n\n@RequiresApi(Build.VERSION_CODES.S)\nfun BackgroundBlurDrawable.setCornerRadius(\n    cornerRadiusTL: Float,\n    cornerRadiusTR: Float,\n    cornerRadiusBL: Float,\n    cornerRadiusBR: Float\n) {\n    HiddenApiBypass.invoke(\n        BackgroundBlurDrawable::class.java,\n        this,\n        \"setCornerRadius\",\n        cornerRadiusTL,\n        cornerRadiusTR,\n        cornerRadiusBL,\n        cornerRadiusBR\n    )\n}"
  },
  {
    "path": "app/src/main/java/com/zhenxiang/blur/BlurFrameLayout.kt",
    "content": "package com.zhenxiang.blur\n\nimport android.content.Context\nimport android.os.Build\nimport android.widget.FrameLayout\nimport androidx.annotation.RequiresApi\n\nclass BlurFrameLayout constructor(context: Context) : FrameLayout(context) {\n    @RequiresApi(Build.VERSION_CODES.S)\n    val blurController: SystemBlurController = SystemBlurController(this)\n}\n"
  },
  {
    "path": "app/src/main/java/com/zhenxiang/blur/BlurLinearLayout.kt",
    "content": "package com.zhenxiang.blur\n\nimport android.content.Context\nimport android.os.Build\nimport android.widget.LinearLayout\nimport androidx.annotation.RequiresApi\n\nclass BlurLinearLayout constructor(context: Context) : LinearLayout(context) {\n    @RequiresApi(Build.VERSION_CODES.S)\n    val blurController: SystemBlurController = SystemBlurController(this)\n}"
  },
  {
    "path": "app/src/main/java/com/zhenxiang/blur/SystemBlurController.kt",
    "content": "package com.zhenxiang.blur\n\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.drawable.ShapeDrawable\nimport android.graphics.drawable.shapes.RoundRectShape\nimport android.os.Build\nimport android.view.View\nimport android.view.WindowManager\nimport androidx.annotation.RequiresApi\nimport com.android.internal.graphics.drawable.BackgroundBlurDrawable\nimport com.sevtinge.cemiuiler.module.base.BaseHook.mPrefsMap\nimport com.sevtinge.cemiuiler.utils.devicesdk.isMoreAndroidVersion\nimport com.zhenxiang.blur.model.CornersRadius\nimport java.util.function.Consumer\n\n@RequiresApi(Build.VERSION_CODES.S)\nclass SystemBlurController(\n    private val view: View,\n    backgroundColour: Int = if (mPrefsMap.getInt(\"blur_view_color\", -1) != -1) mPrefsMap.getInt(\"blur_view_color\", -1)\n    else Color.parseColor(\"#44FFFFFF\"),\n    blurRadius: Int = mPrefsMap.getInt(\"home_blur_radius\", 100),\n    cornerRadius: CornersRadius = CornersRadius.all(0f),\n) : View.OnAttachStateChangeListener {\n\n    private var windowManager: WindowManager? = null\n    private val crossWindowBlurListener = Consumer<Boolean> { blurEnabled = it }\n    private var blurEnabled: Boolean = false\n        set(value) {\n            if (value != field) {\n                field = value\n                updateBackgroundColour()\n                updateBlurRadius()\n            }\n        }\n    private var backgroundColour = backgroundColour\n        set(value) {\n            field = value\n            updateBackgroundColour()\n        }\n    var blurRadius = blurRadius\n        set(value) {\n            field = value\n            updateBlurRadius()\n        }\n    var cornerRadius = cornerRadius\n        set(value) {\n            field = value\n            when (val bg = view.background) {\n                is BackgroundBlurDrawable -> setCornerRadius(bg, value)\n                is ShapeDrawable -> bg.shape = getShapeFromCorners(value)\n            }\n        }\n\n    init {\n        if (isMoreAndroidVersion(31)) {\n            // On api 31 and above background init is done in onViewAttachedToWindow\n            view.addOnAttachStateChangeListener(this)\n        } else {\n            // On pre api 31 init background here\n            val shape = ShapeDrawable()\n            shape.shape = getShapeFromCorners(cornerRadius)\n            shape.paint.color = backgroundColour\n            view.background = shape\n        }\n    }\n\n    override fun onViewAttachedToWindow(v: View) {\n        windowManager = getWindowManager(view.context).apply {\n            blurEnabled = isCrossWindowBlurEnabled\n            addCrossWindowBlurEnabledListener(crossWindowBlurListener)\n        }\n        view.createBackgroundBlurDrawable()?.let {\n            // Configure blur drawable with current values\n            it.setColor(backgroundColour)\n            it.setBlurRadius(blurRadius)\n            setCornerRadius(it, cornerRadius)\n            view.background = it\n        }\n    }\n\n    override fun onViewDetachedFromWindow(v: View) {\n        // Clear blur drawable\n        if (view.background is BackgroundBlurDrawable) {\n            view.background = null\n        }\n        windowManager?.removeCrossWindowBlurEnabledListener(crossWindowBlurListener)\n        windowManager = null\n    }\n\n    private fun updateBackgroundColour() {\n        val bg = view.background\n        when (bg) {\n            is BackgroundBlurDrawable -> bg.setColor(backgroundColour)\n            is ShapeDrawable -> bg.paint.color = backgroundColour\n        }\n        bg?.invalidateSelf()\n    }\n\n    private fun updateBlurRadius() {\n        val bg = view.background\n        if (bg is BackgroundBlurDrawable) {\n            bg.setBlurRadius(if (blurEnabled) blurRadius else 0)\n        }\n    }\n\n    private fun setCornerRadius(blurDrawable: BackgroundBlurDrawable, corners: CornersRadius) {\n        blurDrawable.setCornerRadius(\n            corners.topLeft, corners.topRight, corners.bottomLeft, corners.bottomRight\n        )\n    }\n\n    private fun getShapeFromCorners(corners: CornersRadius): RoundRectShape {\n        return RoundRectShape(getCornersFloatArray(corners), null, null)\n    }\n\n    private fun getCornersFloatArray(corners: CornersRadius): FloatArray {\n        return floatArrayOf(\n            corners.topLeft,\n            corners.topLeft,\n            corners.topRight,\n            corners.topRight,\n            corners.bottomRight,\n            corners.bottomRight,\n            corners.bottomLeft,\n            corners.bottomLeft\n        )\n    }\n\n    private fun getWindowManager(context: Context): WindowManager {\n        return context.getSystemService(Context.WINDOW_SERVICE) as WindowManager\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/zhenxiang/blur/ViewExtensions.kt",
    "content": "package com.zhenxiang.blur\n\nimport android.os.Build\nimport android.util.Log\nimport android.view.View\nimport android.view.ViewRootImpl\nimport androidx.annotation.RequiresApi\nimport com.android.internal.graphics.drawable.BackgroundBlurDrawable\nimport org.lsposed.hiddenapibypass.HiddenApiBypass\n\n@RequiresApi(Build.VERSION_CODES.S)\nfun View.createBackgroundBlurDrawable(): BackgroundBlurDrawable? {\n\n    return try {\n        val getViewRootImpl =\n            HiddenApiBypass.invoke(View::class.java, this, \"getViewRootImpl\") as ViewRootImpl\n        HiddenApiBypass.invoke(\n            ViewRootImpl::class.java,\n            getViewRootImpl,\n            \"createBackgroundBlurDrawable\"\n        ) as BackgroundBlurDrawable\n    } catch (e: Exception) {\n        Log.w(null, e)\n        null\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/zhenxiang/blur/model/CornerRadius.kt",
    "content": "package com.zhenxiang.blur.model\n\ndata class CornersRadius(\n    val topLeft: Float,\n    val topRight: Float,\n    val bottomLeft: Float,\n    val bottomRight: Float,\n) {\n\n    companion object {\n        fun all(radius: Float): CornersRadius {\n            return CornersRadius(radius, radius, radius, radius)\n        }\n\n        fun custom(\n            topLeft: Float, topRight: Float, bottomLeft: Float, bottomRight: Float\n        ): CornersRadius {\n            return CornersRadius(topLeft, topRight, bottomLeft, bottomRight)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/color/ic_small_window_color.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<gradient xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:type=\"linear\"\n    android:startX=\"28.0\"\n    android:startY=\"4.0\"\n    android:endX=\"28.0\"\n    android:endY=\"48.0\">\n    <item\n        android:color=\"#FF7986F9\"\n        android:offset=\"0.0\" />\n    <item\n        android:color=\"#FFBA8FFF\"\n        android:offset=\"1.0\" />\n</gradient>"
  },
  {
    "path": "app/src/main/res/color/ic_small_window_color2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<gradient xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:type=\"linear\"\n    android:startX=\"78.0\"\n    android:startY=\"16.0\"\n    android:endX=\"78.0\"\n    android:endY=\"48.0\">\n    <item\n        android:color=\"#FFFFFFFF\"\n        android:offset=\"0.0\" />\n    <item\n        android:color=\"#99FFFFFF\"\n        android:offset=\"1.0\" />\n</gradient>"
  },
  {
    "path": "app/src/main/res/color/ic_small_window_color3.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<gradient xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:type=\"linear\"\n    android:startX=\"78.0\"\n    android:startY=\"12.16\"\n    android:endX=\"78.0\"\n    android:endY=\"53.12\">\n    <item\n        android:color=\"#FFD4E632\"\n        android:offset=\"0.0\" />\n    <item\n        android:color=\"#FF40E6E6\"\n        android:offset=\"1.0\" />\n</gradient>"
  },
  {
    "path": "app/src/main/res/color/ic_small_window_color4.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<gradient xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:type=\"linear\"\n    android:startX=\"52.5\"\n    android:startY=\"52.0\"\n    android:endX=\"52.5\"\n    android:endY=\"79.0\">\n    <item\n        android:color=\"#FFFFFFFF\"\n        android:offset=\"0.0\" />\n    <item\n        android:color=\"#99FFFFFF\"\n        android:offset=\"1.0\" />\n</gradient>"
  },
  {
    "path": "app/src/main/res/color/ic_small_window_color5.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<gradient xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:type=\"linear\"\n    android:startX=\"52.5\"\n    android:startY=\"52.0\"\n    android:endX=\"52.5\"\n    android:endY=\"79.0\">\n    <item\n        android:color=\"#FFFF6996\"\n        android:offset=\"0.0\" />\n    <item\n        android:color=\"#FFFFC281\"\n        android:offset=\"1.0\" />\n</gradient>"
  },
  {
    "path": "app/src/main/res/color/visual_check_text_color.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector>\n    <!--<item\n        android:state_checked=\"true\"\n        android:color=\"@color/visual_check_textview_checked_text_color\" />\n    <item\n        android:state_checked=\"false\"\n        android:color=\"@color/visual_check_textview_unchecked_text_color\" />-->\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/baseline_wb_sunny_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"#ffffffff\"\n        android:pathData=\"M6.76,4.84l-1.8,-1.79 -1.41,1.41 1.79,1.79 1.42,-1.41zM4,10.5L1,10.5v2h3v-2zM13,0.55h-2L11,3.5h2L13,0.55zM20.45,4.46l-1.41,-1.41 -1.79,1.79 1.41,1.41 1.79,-1.79zM17.24,18.16l1.79,1.8 1.41,-1.41 -1.8,-1.79 -1.4,1.4zM20,10.5v2h3v-2h-3zM12,5.5c-3.31,0 -6,2.69 -6,6s2.69,6 6,6 6,-2.69 6,-6 -2.69,-6 -6,-6zM11,22.45h2L13,19.5h-2v2.95zM3.55,18.54l1.41,1.41 1.79,-1.8 -1.41,-1.41 -1.79,1.8z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/bubble_bar_pop_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"oval\">\n    <solid android:color=\"#99838383\" />\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/ic_android_settings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item>\n        <shape>\n            <size\n                android:width=\"@dimen/header_icon_size\"\n                android:height=\"@dimen/header_icon_size\"/>\n            <corners android:radius=\"8dp\" />\n            <solid android:color=\"#3DDC84\"/>\n        </shape>\n    </item>\n\n    <item>\n        <vector\n            android:width=\"36dp\"\n            android:height=\"36dp\"\n            android:viewportWidth=\"30\"\n            android:viewportHeight=\"30\">\n            <path\n                android:pathData=\"M8,0L22,0A8,8 0,0 1,30 8L30,22A8,8 0,0 1,22 30L8,30A8,8 0,0 1,0 22L0,8A8,8 0,0 1,8 0z\"\n                android:fillColor=\"#3DDC84\"/>\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M9.603,20.196a0.9,0.9 0,0 0,0.9 0.9h0.9v3.152a1.349,1.349 0,1 0,2.7 0L14.103,21.097h1.8v3.152a1.349,1.349 0,1 0,2.7 0L18.603,21.097h0.9a0.9,0.9 0,0 0,0.9 -0.9L20.403,11.19L9.603,11.19Z\"/>\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M7.351,11.196A1.327,1.327 0,0 0,6 12.547v6.3a1.351,1.351 0,0 0,2.7 0v-6.3A1.327,1.327 0,0 0,7.351 11.196Z\"/>\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M22.649,11.196A1.327,1.327 0,0 0,21.298 12.547v6.3a1.351,1.351 0,1 0,2.7 0v-6.3A1.327,1.327 0,0 0,22.649 11.196Z\"/>\n            <path\n                android:fillColor=\"#FFFFFF\"\n                android:pathData=\"M18.194,5.936 L19.363,4.766a0.436,0.436 0,0 0,0 -0.63,0.434 0.434,0 0,0 -0.63,0L17.384,5.486a5.146,5.146 0,0 0,-4.768 0L11.267,4.135a0.434,0.434 0,0 0,-0.63 0,0.436 0.436,0 0,0 0,0.63L11.803,5.936A5.376,5.376 0,0 0,9.603 10.3L20.398,10.3A5.376,5.376 0,0 0,18.194 5.936ZM13.341,8.053a0.589,0.589 0,1 1,-0.589 -0.59A0.592,0.592 0,0 1,13.341 8.053ZM17.841,8.053a0.589,0.589 0,1 1,-0.589 -0.59A0.592,0.592 0,0 1,17.839 8.053Z\"/>\n        </vector>\n    </item>\n</layer-list>"
  },
  {
    "path": "app/src/main/res/drawable/ic_arrow_edit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"24.727268dp\"\n    android:width=\"24.727268dp\"\n    android:alpha=\"0.7\"\n    android:viewportWidth=\"68.0\"\n    android:viewportHeight=\"68.0\">\n    <path\n        android:fillColor=\"?rebootIconColor\"\n        android:pathData=\"M34,10C35.3807,10 36.5,11.1193 36.5,12.5C36.5,13.8807 35.3807,15 34,15H17.5C16.1193,15 15,16.1193 15,17.5V51.5C15,52.8807 16.1193,54 17.5,54H49.5C50.8807,54 52,52.8807 52,51.5V35C52,33.6193 53.1193,32.5 54.5,32.5C55.8807,32.5 57,33.6193 57,35V51.5C57,55.6421 53.6421,59 49.5,59H17.5C13.3579,59 10,55.6421 10,51.5V17.5C10,13.3579 13.3579,10 17.5,10H34ZM53.7287,16.9471C54.5538,16.0735 54.4089,14.5967 53.4051,13.6487C52.4012,12.7007 50.9186,12.6405 50.0936,13.5141L27.4648,37.4757C26.6398,38.3493 26.7847,39.8261 27.7885,40.774C28.7923,41.722 30.2749,41.7823 31.1,40.9086L53.7287,16.9471Z\"\n        android:fillType=\"evenOdd\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_ationbar_back.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"36dp\"\n    android:width=\"36dp\"\n    android:autoMirrored=\"true\"\n    android:viewportWidth=\"100.0\"\n    android:viewportHeight=\"100.0\">\n    <path\n        android:fillColor=\"@color/black\"\n        android:pathData=\"M22.689,48.654C22.228,49.115 21.998,49.719 22,50.323C21.993,50.933 22.223,51.546 22.688,52.011L39.654,68.977C40.572,69.895 42.06,69.895 42.978,68.977C43.896,68.059 43.896,66.571 42.978,65.653L30.351,53.025H76.526C77.907,53.025 79.026,51.906 79.026,50.525C79.026,49.145 77.907,48.025 76.526,48.025H29.965L42.978,35.013C43.896,34.095 43.896,32.606 42.978,31.688C42.06,30.771 40.572,30.771 39.654,31.688L22.689,48.654Z\"\n        android:fillType=\"evenOdd\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_audio_system.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"69px\"\n    android:height=\"60px\"\n    android:viewportWidth=\"69\"\n    android:viewportHeight=\"60\">\n    <path\n        android:fillColor=\"#80000000\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M55.5 33.8272v-7.6544c-3.759-1.3406-4.7705-1.4035-5.2972-2.6758-.5303-1.2757.1452-2.0457 1.8532-5.6402l-5.4127-5.4128c-3.5456 1.6852-4.354 2.387-5.642 1.8533-1.2723-.5285-1.344-1.5558-2.6723-5.2973h-7.6563c-1.337 3.752-1.4 4.7687-2.6757 5.2973-1.316.5477-2.1052-.175-5.6402-1.8533l-5.4128 5.4128c1.7098 3.5962 2.3835 4.3627 1.8533 5.642-.5286 1.2722-1.5418 1.337-5.2973 2.674v7.6562c3.7432 1.33 4.7687 1.4 5.2972 2.674.532 1.2845-.1417 2.0423-1.8532 5.6402l5.4127 5.4128c3.4983-1.6625 4.3225-2.4027 5.6403-1.8532 1.274.5284 1.337 1.54 2.6757 5.2972h7.6546c1.3264-3.7292 1.3982-4.7652 2.6897-5.3042 1.3037-.539 2.0755.1732 5.6262 1.8585l5.4128-5.4128c-1.7063-3.5875-2.3835-4.361-1.8533-5.6402.525-1.2706 1.54-1.3353 5.2973-2.674zm-8.5313 1.337c-1.0097 2.4396-.119 4.3016.854 6.2616l-1.897 1.897c-1.9127-.9503-3.7817-1.883-6.2527-.8576-2.443 1.0168-3.1325 2.9628-3.829 5.0348h-2.6845c-.6965-2.0737-1.3843-4.0198-3.8203-5.0313-2.4832-1.029-4.3872-.0787-6.2632.854l-1.8953-1.897c.9748-1.9564 1.8655-3.815.8523-6.265-1.0133-2.4342-2.9593-3.122-5.033-3.8184v-2.6828c2.0737-.6965 4.0198-1.3842 5.0313-3.822 1.0114-2.4395.119-4.3032-.854-6.2632l1.897-1.897c1.8934.9415 3.7834 1.8847 6.265.854 2.436-1.0098 3.1237-2.9575 3.8202-5.0313h2.6845c.6965 2.0738 1.386 4.0198 3.822 5.0313 2.4833 1.029 4.3855.0787 6.2633-.854l1.897 1.897c-.973 1.9617-1.8638 3.8272-.854 6.265 1.0097 2.4342 2.9557 3.122 5.0312 3.8202v2.6845c-2.079.6965-4.0285 1.3843-5.0347 3.8203zM34.5 24.75c2.8945 0 5.25 2.3555 5.25 5.25s-2.3555 5.25-5.25 5.25-5.25-2.3555-5.25-5.25 2.3555-5.25 5.25-5.25zm0-3.5c-4.8335 0-8.75 3.9165-8.75 8.75s3.9165 8.75 8.75 8.75 8.75-3.9165 8.75-8.75-3.9165-8.75-8.75-8.75z\"\n        android:strokeWidth=\"1\"\n        android:strokeAlpha=\"0.5\"\n        android:strokeColor=\"#00000000\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_cemiuiler_settings_v130.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"32dp\"\n    android:height=\"32dp\"\n    android:viewportWidth=\"270\"\n    android:viewportHeight=\"270\">\n    <path android:pathData=\"M72,0L198,0A72,72 0,0 1,270 72L270,198A72,72 0,0 1,198 270L72,270A72,72 0,0 1,0 198L0,72A72,72 0,0 1,72 0z\" />\n    <path\n        android:pathData=\"M60.7,84.99L115.18,59.58A23.19,23.19 110,0 1,146 70.8L171.45,125.36A23.19,23.19 110,0 1,160.23 156.18L105.74,181.59A23.19,23.19 110,0 1,74.92 170.37L49.48,115.8A23.19,23.19 110,0 1,60.7 84.99z\"\n        android:fillColor=\"#fc5b8d\" />\n    <path\n        android:pathData=\"M184.33,110.94a52.8,52.8 0,1 1,-63.62 83.72\"\n        android:strokeWidth=\"21\"\n        android:strokeColor=\"#fc5b8d\"\n        android:strokeLineCap=\"round\" />\n    <path\n        android:pathData=\"M187.8,71.54m-13.66,0a13.66,13.66 0,1 1,27.32 0a13.66,13.66 0,1 1,-27.32 0\"\n        android:fillColor=\"#fc5b8d\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_cemiuiler_settings_v140.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportWidth=\"270\"\n    android:viewportHeight=\"270\">\n    <path\n        android:pathData=\"M72,0L198,0A72,72 0,0 1,270 72L270,198A72,72 0,0 1,198 270L72,270A72,72 0,0 1,0 198L0,72A72,72 0,0 1,72 0z\"\n        android:fillColor=\"#fc5b8d\" />\n    <path\n        android:pathData=\"M60.7,84.99L115.18,59.58A23.19,23.19 110,0 1,146 70.8L171.45,125.36A23.19,23.19 110,0 1,160.23 156.18L105.74,181.59A23.19,23.19 110,0 1,74.92 170.37L49.48,115.8A23.19,23.19 110,0 1,60.7 84.99z\"\n        android:fillColor=\"#fff\" />\n    <path\n        android:pathData=\"M184.33,110.94a52.8,52.8 0,1 1,-63.62 83.72\"\n        android:strokeWidth=\"21\"\n        android:strokeColor=\"#fff\"\n        android:strokeLineCap=\"round\" />\n    <path\n        android:pathData=\"M187.8,71.54m-13.66,0a13.66,13.66 0,1 1,27.32 0a13.66,13.66 0,1 1,-27.32 0\"\n        android:fillColor=\"#fff\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_control_center_5g_toggle_off.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportWidth=\"30\"\n    android:viewportHeight=\"30\">\n    <path\n        android:fillColor=\"#ffffffff\"\n        android:pathData=\"M3.75 16.07L1.5 15.52l0.93-8.58h9.2v2.39H4.77L4.3 13.5c0.27-0.15 0.64-0.3 1.1-0.46 0.47-0.15 1.01-0.23 1.61-0.23 0.8 0 1.53 0.13 2.16 0.4 0.64 0.26 1.18 0.64 1.63 1.14 0.44 0.49 0.78 1.09 1.02 1.8 0.23 0.7 0.35 1.5 0.35 2.38 0 0.79-0.12 1.53-0.35 2.21-0.23 0.7-0.57 1.3-1.03 1.82-0.47 0.52-1.05 0.93-1.75 1.23-0.7 0.29-1.52 0.43-2.47 0.43-0.71 0-1.4-0.1-2.05-0.3-0.65-0.21-1.23-0.52-1.75-0.93-0.52-0.41-0.93-0.92-1.24-1.52-0.32-0.6-0.5-1.3-0.54-2.1h2.76c0.07 0.56 0.23 1.03 0.46 1.42 0.24 0.38 0.56 0.68 0.96 0.88 0.4 0.2 0.86 0.3 1.38 0.3 0.48 0 0.9-0.08 1.24-0.24 0.34-0.17 0.62-0.42 0.85-0.73 0.23-0.32 0.4-0.7 0.52-1.12 0.11-0.43 0.17-0.91 0.17-1.43 0-0.5-0.06-0.96-0.2-1.37C9.01 16.67 8.82 16.3 8.56 16c-0.25-0.3-0.57-0.54-0.95-0.7-0.38-0.18-0.82-0.26-1.32-0.26-0.68 0-1.2 0.1-1.55 0.29-0.35 0.2-0.68 0.44-0.99 0.73Zm24.23-0.79v6.52c-0.25 0.32-0.62 0.67-1.14 1.05-0.5 0.38-1.18 0.7-2.03 0.97-0.84 0.28-1.9 0.41-3.15 0.41-1.07 0-2.05-0.18-2.94-0.53-0.9-0.37-1.66-0.9-2.31-1.61-0.64-0.7-1.14-1.56-1.49-2.57-0.35-1.01-0.53-2.17-0.53-3.47v-1.18c0-1.29 0.16-2.44 0.48-3.44 0.33-1.02 0.8-1.88 1.41-2.58 0.61-0.7 1.34-1.24 2.2-1.6 0.87-0.36 1.85-0.55 2.95-0.55 1.4 0 2.55 0.24 3.46 0.7 0.93 0.47 1.64 1.1 2.14 1.93 0.5 0.82 0.81 1.76 0.95 2.81h-2.89c-0.09-0.6-0.27-1.12-0.55-1.6-0.26-0.46-0.65-0.83-1.15-1.1-0.49-0.27-1.13-0.4-1.92-0.4-0.68 0-1.27 0.12-1.79 0.38s-0.95 0.64-1.29 1.14c-0.34 0.5-0.59 1.1-0.76 1.83-0.17 0.72-0.26 1.54-0.26 2.46v1.2c0 0.94 0.1 1.77 0.3 2.5 0.2 0.73 0.49 1.34 0.86 1.84 0.38 0.5 0.85 0.88 1.4 1.14 0.54 0.25 1.16 0.37 1.85 0.37 0.67 0 1.22-0.05 1.65-0.16 0.43-0.12 0.77-0.26 1.02-0.41 0.26-0.17 0.46-0.32 0.6-0.47v-3.39H21.5v-2.19h6.48Z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_control_center_5g_toggle_on.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportWidth=\"30\"\n    android:viewportHeight=\"30\">\n    <path\n        android:fillColor=\"#ffffffff\"\n        android:pathData=\"M3.75 16.07L1.5 15.52l0.93-8.58h9.2v2.39H4.77L4.3 13.5c0.27-0.15 0.64-0.3 1.1-0.46 0.47-0.15 1.01-0.23 1.61-0.23 0.8 0 1.53 0.13 2.16 0.4 0.64 0.26 1.18 0.64 1.63 1.14 0.44 0.49 0.78 1.09 1.02 1.8 0.23 0.7 0.35 1.5 0.35 2.38 0 0.79-0.12 1.53-0.35 2.21-0.23 0.7-0.57 1.3-1.03 1.82-0.47 0.52-1.05 0.93-1.75 1.23-0.7 0.29-1.52 0.43-2.47 0.43-0.71 0-1.4-0.1-2.05-0.3-0.65-0.21-1.23-0.52-1.75-0.93-0.52-0.41-0.93-0.92-1.24-1.52-0.32-0.6-0.5-1.3-0.54-2.1h2.76c0.07 0.56 0.23 1.03 0.46 1.42 0.24 0.38 0.56 0.68 0.96 0.88 0.4 0.2 0.86 0.3 1.38 0.3 0.48 0 0.9-0.08 1.24-0.24 0.34-0.17 0.62-0.42 0.85-0.73 0.23-0.32 0.4-0.7 0.52-1.12 0.11-0.43 0.17-0.91 0.17-1.43 0-0.5-0.06-0.96-0.2-1.37C9.01 16.67 8.82 16.3 8.56 16c-0.25-0.3-0.57-0.54-0.95-0.7-0.38-0.18-0.82-0.26-1.32-0.26-0.68 0-1.2 0.1-1.55 0.29-0.35 0.2-0.68 0.44-0.99 0.73Zm24.23-0.79v6.52c-0.25 0.32-0.62 0.67-1.14 1.05-0.5 0.38-1.18 0.7-2.03 0.97-0.84 0.28-1.9 0.41-3.15 0.41-1.07 0-2.05-0.18-2.94-0.53-0.9-0.37-1.66-0.9-2.31-1.61-0.64-0.7-1.14-1.56-1.49-2.57-0.35-1.01-0.53-2.17-0.53-3.47v-1.18c0-1.29 0.16-2.44 0.48-3.44 0.33-1.02 0.8-1.88 1.41-2.58 0.61-0.7 1.34-1.24 2.2-1.6 0.87-0.36 1.85-0.55 2.95-0.55 1.4 0 2.55 0.24 3.46 0.7 0.93 0.47 1.64 1.1 2.14 1.93 0.5 0.82 0.81 1.76 0.95 2.81h-2.89c-0.09-0.6-0.27-1.12-0.55-1.6-0.26-0.46-0.65-0.83-1.15-1.1-0.49-0.27-1.13-0.4-1.92-0.4-0.68 0-1.27 0.12-1.79 0.38s-0.95 0.64-1.29 1.14c-0.34 0.5-0.59 1.1-0.76 1.83-0.17 0.72-0.26 1.54-0.26 2.46v1.2c0 0.94 0.1 1.77 0.3 2.5 0.2 0.73 0.49 1.34 0.86 1.84 0.38 0.5 0.85 0.88 1.4 1.14 0.54 0.25 1.16 0.37 1.85 0.37 0.67 0 1.22-0.05 1.65-0.16 0.43-0.12 0.77-0.26 1.02-0.41 0.26-0.17 0.46-0.32 0.6-0.47v-3.39H21.5v-2.19h6.48Z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_control_center_gms_toggle_off.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportWidth=\"1024\"\n    android:viewportHeight=\"1024\">\n    <path\n        android:fillColor=\"#ffffffff\"\n        android:pathData=\"M881,442.4H519.7v148.5h206.4c-8.9,48 -35.9,88.6 -76.6,115.8 -34.4,23 -78.3,36.6 -129.9,36.6 -99.9,0 -184.4,-67.5 -214.6,-158.2 -7.6,-23 -12,-47.6 -12,-72.9s4.4,-49.9 12,-72.9c30.3,-90.6 114.8,-158.1 214.7,-158.1 56.3,0 106.8,19.4 146.6,57.4l110,-110.1c-66.5,-62 -153.2,-100 -256.6,-100 -149.9,0 -279.6,86 -342.7,211.4 -26,51.8 -40.8,110.4 -40.8,172.4S151,632.8 177,684.6C240.1,810 369.8,896 519.7,896c103.6,0 190.4,-34.4 253.8,-93 72.5,-66.8 114.4,-165.2 114.4,-282.1 0,-27.2 -2.4,-53.3 -6.9,-78.5z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_control_center_gms_toggle_on.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportWidth=\"1024\"\n    android:viewportHeight=\"1024\">\n    <path\n        android:fillColor=\"#ffffffff\"\n        android:pathData=\"M881,442.4H519.7v148.5h206.4c-8.9,48 -35.9,88.6 -76.6,115.8 -34.4,23 -78.3,36.6 -129.9,36.6 -99.9,0 -184.4,-67.5 -214.6,-158.2 -7.6,-23 -12,-47.6 -12,-72.9s4.4,-49.9 12,-72.9c30.3,-90.6 114.8,-158.1 214.7,-158.1 56.3,0 106.8,19.4 146.6,57.4l110,-110.1c-66.5,-62 -153.2,-100 -256.6,-100 -149.9,0 -279.6,86 -342.7,211.4 -26,51.8 -40.8,110.4 -40.8,172.4S151,632.8 177,684.6C240.1,810 369.8,896 519.7,896c103.6,0 190.4,-34.4 253.8,-93 72.5,-66.8 114.4,-165.2 114.4,-282.1 0,-27.2 -2.4,-53.3 -6.9,-78.5z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_default_icon.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"165dp\"\n    android:height=\"165dp\"\n    android:autoMirrored=\"true\"\n    android:viewportWidth=\"30\"\n    android:viewportHeight=\"30\">\n    <path\n        android:fillColor=\"#FF14CEB7\"\n        android:pathData=\"M8,0L22,0A8,8 0,0 1,30 8L30,22A8,8 0,0 1,22 30L8,30A8,8 0,0 1,0 22L0,8A8,8 0,0 1,8 0z\" />\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:pathData=\"M9.74,21a2.073,2.073 0,0 1,-2.136 -2,1.813 1.813,0 0,1 0.042,-0.4 8.512,8.512 0,0 1,-0.042 -0.862,8.29 8.29,0 0,1 3.019,-6.476l-1.337,-1.384a0.9,0.9 0,0 1,0.023 -1.273,0.9 0.9,0 0,1 1.273,0.023l1.609,1.666a6.965,6.965 0,0 1,2.891 -0.628,6.961 6.961,0 0,1 2.841,0.605l1.587,-1.644a0.9,0.9 0,0 1,1.273 -0.023,0.9 0.9,0 0,1 0.022,1.273l-1.306,1.352a8.286,8.286 0,0 1,3.059 6.509,8.581 8.581,0 0,1 -0.043,0.863 1.866,1.866 0,0 1,0.043 0.4,2.074 2.074,0 0,1 -2.137,2ZM11,14.5a1,1 0,0 0,1 1,1 1,0 0,0 1,-1 1,1 0,0 0,-1 -1A1,1 0,0 0,11.004 14.5ZM17,14.5a1,1 0,0 0,1 1,1 1,0 0,0 1,-1 1,1 0,0 0,-1 -1A1,1 0,0 0,17.004 14.499Z\" />\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=\"200dp\"\n    android:height=\"200dp\"\n    android:viewportWidth=\"432\"\n    android:viewportHeight=\"432\">\n    <path\n        android:pathData=\"M141.7,165.99L196.19,140.58A23.19,23.19 110,0 1,227 151.79L252.45,206.36A23.19,23.19 110,0 1,241.23 237.18L186.75,262.59A23.19,23.19 110,0 1,155.93 251.37L130.48,196.8A23.19,23.19 110,0 1,141.7 165.99z\"\n        android:fillColor=\"#fff\" />\n    <path\n        android:pathData=\"M265.33,191.94a52.8,52.8 0,1 1,-63.62 83.72\"\n        android:strokeWidth=\"21\"\n        android:strokeColor=\"#fff\"\n        android:strokeLineCap=\"round\" />\n    <path\n        android:pathData=\"M268.8,152.54m-13.66,0a13.66,13.66 0,1 1,27.32 0a13.66,13.66 0,1 1,-27.32 0\"\n        android:fillColor=\"#fff\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_miui_volume_notification.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"23.719973dp\"\n    android:width=\"23.719973dp\"\n    android:viewportWidth=\"64.0\"\n    android:viewportHeight=\"64.0\">\n    <path\n        android:fillColor=\"#FFB3B3B3\"\n        android:pathData=\"M54.5,21C58.6421,21 62,17.6421 62,13.5C62,9.3579 58.6421,6 54.5,6C50.3579,6 47,9.3579 47,13.5C47,17.6421 50.3579,21 54.5,21ZM8,10C4.6863,10 2,12.6863 2,16V52C2,55.3137 4.6863,58 8,58H52C55.3137,58 58,55.3137 58,52V29H51V49C51,50.1046 50.1046,51 49,51H11C9.8954,51 9,50.1046 9,49V19C9,17.8954 9.8954,17 11,17H39V10H8Z\"\n        android:fillType=\"evenOdd\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_miui_volume_notification_mute.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"23.719973dp\"\n    android:width=\"23.719973dp\"\n    android:viewportWidth=\"65.0\"\n    android:viewportHeight=\"64.0\">\n    <path\n        android:fillColor=\"#FFB3B3B3\"\n        android:pathData=\"M13.1135,51H12C10.8954,51 10,50.1046 10,49V19C10,17.8954 10.8954,17 12,17H40V10H9C5.6863,10 3,12.6863 3,16V52C3,54.7796 4.8901,57.1177 7.4551,57.7992L13.1135,51ZM13.993,58H53C56.3137,58 59,55.3137 59,52V29H52V49C52,50.1046 51.1046,51 50,51H19.8185L13.993,58ZM48.5919,16.4253C49.7319,19.114 52.3957,21 55.5,21C59.6421,21 63,17.6421 63,13.5C63,9.9147 60.4842,6.9169 57.1217,6.1758L48.5919,16.4253Z\"\n        android:fillType=\"evenOdd\" />\n    <path\n        android:fillColor=\"#FFB3B3B3\"\n        android:pathData=\"M49.0678,3.6704L49.0678,3.6704A2.7315,2.7315 84.7676,0 1,49.4201 7.5172L5.8028,59.9285A2.7315,2.7315 84.7676,0 1,1.956 60.2808L1.956,60.2808A2.7315,2.7315 84.7676,0 1,1.6037 56.434L45.221,4.0226A2.7315,2.7315 84.7676,0 1,49.0678 3.6704z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_packageinstaller_background_dark.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <corners android:radius=\"20dp\" />\n    <solid android:color=\"#1E1E1E\" />\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/ic_packageinstaller_background_light.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <corners android:radius=\"20dp\" />\n    <solid android:color=\"#F0F0F0\" />\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/ic_qs_tile_bg_disabled.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"65dp\"\n    android:height=\"65dp\"\n    android:viewportWidth=\"65\"\n    android:viewportHeight=\"65\">\n    <path\n        android:fillColor=\"#26ffffff\"\n        android:pathData=\"M0 18c0-9.94 8.06-18 18-18h29c9.94 0 18 8.06 18 18v29c0 9.94-8.06 18-18 18h-29c-9.94 0-18-8.06-18-18z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_qs_tile_bg_enabled.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"65dp\"\n    android:height=\"65dp\"\n    android:viewportWidth=\"65\"\n    android:viewportHeight=\"65\">\n    <path\n        android:fillColor=\"#ff3d84ff\"\n        android:pathData=\"M0 18c0-9.94 8.06-18 18-18h29c9.94 0 18 8.06 18 18v29c0 9.94-8.06 18-18 18h-29c-9.94 0-18-8.06-18-18z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_qs_tile_bg_warning.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"65dp\"\n    android:height=\"65dp\"\n    android:viewportWidth=\"65\"\n    android:viewportHeight=\"65\">\n    <path\n        android:fillColor=\"#ffffa133\"\n        android:pathData=\"M0 18c0-9.94 8.06-18 18-18h29c9.94 0 18 8.06 18 18v29c0 9.94-8.06 18-18 18h-29c-9.94 0-18-8.06-18-18z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_reboot_small.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"25dp\"\n    android:height=\"25dp\"\n    android:viewportWidth=\"1024\"\n    android:viewportHeight=\"1024\">\n    <path\n        android:fillColor=\"?rebootIconColor\"\n        android:pathData=\"M645.6,385.2c6.6,6.6 14.9,10.1 22.2,10.1 5.4,0 10.3,-1.8 14,-5.5l121,-120.9c8.8,-8.8 6.7,-24.8 -4.7,-36.3l-14.2,-14.2c-11.4,-11.4 -27.4,-13.5 -36.3,-4.7L626.7,334.5c-8.8,8.8 -6.9,24.8 4.7,36.3l14.2,14.4zM889.6,467.8H718.5c-12.5,0 -22.5,12.8 -22.5,29v20.1c0,16.2 9.8,29 22.5,29h170.9c12.5,0 22.5,-12.8 22.5,-29v-20.1c0,-16.3 -9.8,-29 -22.3,-29zM689.3,626.8c-3.6,-3.6 -8.6,-5.5 -14.1,-5.5 -7.6,0 -15.7,3.7 -22.2,10.2l-14.2,14.2c-11.4,11.4 -13.5,27.4 -4.5,36.3l120.9,120.9c3.7,3.7 8.7,5.5 14,5.5 7.4,0 15.6,-3.4 22.2,-10.1l14.2,-14.2c11.4,-11.4 13.5,-27.4 4.7,-36.3l-121,-121zM527.3,696.3h-20.1c-16.2,0 -29,9.8 -29,22.3v170.9c0,12.5 12.6,22.5 29,22.5h20.1c16.2,0 29,-9.8 29,-22.5V718.6c-0.1,-12.5 -12.8,-22.3 -29,-22.3zM378.2,638.8c-11.4,-11.4 -27.4,-13.4 -36.3,-4.7L220.9,755c-8.8,8.8 -6.7,24.8 4.7,36.3l14.2,14.2c4.9,4.9 10.8,8.2 16.8,9.6 1.8,0.4 3.7,0.6 5.4,0.6 5.5,0 10.4,-2 14.1,-5.5L397,689.4c3.6,-3.6 5.6,-8.6 5.6,-14 0,-7.6 -3.7,-15.7 -10.2,-22.2l-14.2,-14.4zM327.8,527.4v-20.1c0,-16.2 -9.8,-29 -22.5,-29H134.4c-12.5,0 -22.3,12.8 -22.3,29v20.1c0,16.2 9.8,29 22.3,29h170.9c12.6,-0.2 22.5,-12.8 22.5,-29zM334.5,397.2c3.6,3.6 8.1,5.4 14.1,5.6 7.6,0 15.7,-3.7 22.2,-10.2l14.2,-14.2c11.4,-11.4 13.5,-27.4 4.5,-36.3L268.8,221.2c-8.8,-8.8 -24.8,-6.9 -36.3,4.7l-14.2,14.2c-11.4,11.4 -13.5,27.4 -4.5,36.3l120.7,120.8zM516.8,327.7v0.1c16.2,0 29,-9.8 29,-22.3v-171c0,-12.5 -12.6,-22.5 -29,-22.5h-20.1c-16.2,0 -29,9.8 -29,22.5v170.9c0,12.5 12.6,22.3 29,22.3h20.1z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_settings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"36dp\"\n    android:width=\"36dp\"\n    android:viewportWidth=\"100.0\"\n    android:viewportHeight=\"100.0\">\n    <path\n        android:fillColor=\"@color/black\"\n        android:pathData=\"M25,42.542C25,40.152 25,38.957 25.351,37.891C25.662,36.947 26.17,36.081 26.841,35.348C27.6,34.521 28.643,33.937 30.728,32.77L30.728,32.77L44.528,25.042L44.528,25.042C46.524,23.924 47.522,23.365 48.581,23.145C49.517,22.951 50.483,22.951 51.419,23.145C52.478,23.365 53.476,23.924 55.472,25.042L69.272,32.77C71.357,33.937 72.4,34.521 73.159,35.348C73.83,36.081 74.338,36.947 74.649,37.891C75,38.957 75,40.152 75,42.542V57.412C75,59.802 75,60.997 74.649,62.064C74.338,63.007 73.83,63.874 73.159,64.606C72.4,65.433 71.357,66.017 69.272,67.185L69.272,67.185L55.472,74.913L55.472,74.913C53.476,76.031 52.478,76.59 51.419,76.809C50.483,77.003 49.517,77.003 48.581,76.809C47.522,76.59 46.524,76.031 44.528,74.913L44.528,74.913L44.528,74.913L30.728,67.185C28.643,66.017 27.6,65.433 26.841,64.606C26.17,63.874 25.662,63.007 25.351,62.064C25,60.997 25,59.802 25,57.412V42.542ZM30,40.869C30,40.181 30,39.836 30.102,39.53C30.192,39.258 30.339,39.01 30.533,38.8C30.753,38.563 31.055,38.397 31.658,38.065L48.458,28.825C49.021,28.516 49.303,28.361 49.6,28.3C49.864,28.246 50.136,28.246 50.4,28.3C50.697,28.361 50.979,28.516 51.542,28.825L68.342,38.065C68.945,38.397 69.247,38.563 69.467,38.8C69.661,39.01 69.808,39.258 69.898,39.53C70,39.836 70,40.181 70,40.869V59.085C70,59.773 70,60.118 69.898,60.424C69.808,60.696 69.661,60.945 69.467,61.154C69.247,61.391 68.945,61.557 68.342,61.889L51.542,71.129L51.542,71.129C50.979,71.439 50.697,71.593 50.4,71.654C50.136,71.708 49.864,71.708 49.6,71.654C49.303,71.593 49.021,71.439 48.458,71.129L48.458,71.129L31.658,61.889C31.055,61.557 30.753,61.391 30.533,61.154C30.339,60.945 30.192,60.696 30.102,60.424C30,60.118 30,59.773 30,59.085V40.869ZM62,49.977C62,56.604 56.627,61.977 50,61.977C43.373,61.977 38,56.604 38,49.977C38,43.35 43.373,37.977 50,37.977C56.627,37.977 62,43.35 62,49.977ZM57,49.977C57,53.843 53.866,56.977 50,56.977C46.134,56.977 43,53.843 43,49.977C43,46.111 46.134,42.977 50,42.977C53.866,42.977 57,46.111 57,49.977Z\"\n        android:fillType=\"evenOdd\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_small_window.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"30.539982dp\"\n    android:width=\"36.359989dp\"\n    android:viewportWidth=\"100.0\"\n    android:viewportHeight=\"84.0\">\n    <path\n        android:fillColor=\"@color/ic_small_window_color\"\n        android:pathData=\"M28,26m-22,0a22,22 0,1 1,44 0a22,22 0,1 1,-44 0\" />\n    <path\n        android:fillColor=\"@color/ic_small_window_color2\"\n        android:pathData=\"M78,32m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0\" />\n    <path\n\n        android:fillColor=\"@color/ic_small_window_color3\"\n        android:pathData=\"M78,32m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0\" />\n    <path\n        android:fillColor=\"@color/ic_small_window_color4\"\n        android:pathData=\"M52.5,65.5m-13.5,0a13.5,13.5 0,1 1,27 0a13.5,13.5 0,1 1,-27 0\" />\n    <path\n        android:fillColor=\"@color/ic_small_window_color5\"\n        android:pathData=\"M52.5,65.5m-13.5,0a13.5,13.5 0,1 1,27 0a13.5,13.5 0,1 1,-27 0\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/ic_system_framework_new.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"30dp\"\n    android:width=\"30dp\"\n    android:viewportWidth=\"30.0\"\n    android:viewportHeight=\"30.0\">\n    <path\n        android:fillColor=\"#FF0C9BFF\"\n        android:pathData=\"M8,30L22,30A8,8 0,0 0,30 22L30,8A8,8 0,0 0,22 0L8,0A8,8 0,0 0,0 8L0,22A8,8 0,0 0,8 30z\" />\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:pathData=\"M5.7531,16.3598L13.6401,24.2468A1.9231,1.9231 0,0 0,16.3597 24.2468L24.2467,16.3598A1.9231,1.9231 0,0 0,24.2467 13.6402L16.3597,5.7532A1.9231,1.9231 0,0 0,13.6401 5.7532L5.7531,13.6402A1.9231,1.9231 0,0 0,5.7531 16.3598z\" />\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:pathData=\"M9.4231,22.5L20.5769,22.5A1.9231,1.9231 0,0 0,22.5 20.5769L22.5,9.4231A1.9231,1.9231 0,0 0,20.5769 7.5L9.4231,7.5A1.9231,1.9231 0,0 0,7.5 9.4231L7.5,20.5769A1.9231,1.9231 0,0 0,9.4231 22.5z\" />\n    <path\n        android:fillColor=\"#FF0C9BFF\"\n        android:pathData=\"M12.1155,15.0002C12.1155,16.5933 13.407,17.8848 15.0001,17.8848C16.5932,17.8848 17.8847,16.5933 17.8847,15.0002C17.8847,13.407 16.5932,12.1155 15.0001,12.1155C13.407,12.1155 12.1155,13.407 12.1155,15.0002Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_system_ui_new.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"30dp\"\n    android:width=\"30dp\"\n    android:viewportWidth=\"30.0\"\n    android:viewportHeight=\"30.0\">\n    <path\n        android:fillColor=\"#FF0C9BFF\"\n        android:pathData=\"M8,0L22,0A8,8 0,0 1,30 8L30,22A8,8 0,0 1,22 30L8,30A8,8 0,0 1,0 22L0,8A8,8 0,0 1,8 0z\" />\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:pathData=\"M9.9231,5.5696L20.0769,5.5696A1.9231,1.9231 0,0 1,22 7.4927L22,22.6465A1.9231,1.9231 0,0 1,20.0769 24.5696L9.9231,24.5696A1.9231,1.9231 0,0 1,8 22.6465L8,7.4927A1.9231,1.9231 0,0 1,9.9231 5.5696z\" />\n    <path\n        android:fillColor=\"#FF0A9AFF\"\n        android:pathData=\"M12.5001,20.7695L17.5001,20.7695A0.9615,0.9615 0,0 1,18.4617 21.731L18.4617,21.731A0.9615,0.9615 0,0 1,17.5001 22.6926L12.5001,22.6926A0.9615,0.9615 0,0 1,11.5386 21.731L11.5386,21.731A0.9615,0.9615 0,0 1,12.5001 20.7695z\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M8,0.0962L22,0.0962A7.9039,7.9039 0,0 1,29.9039 8L29.9039,22A7.9039,7.9039 0,0 1,22 29.9039L8,29.9039A7.9039,7.9039 0,0 1,0.0962 22L0.0962,8A7.9039,7.9039 0,0 1,8 0.0962z\"\n        android:strokeColor=\"#FFFFFFFF\"\n        android:strokeWidth=\"0.192308\"\n        android:strokeAlpha=\"0.1\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_various.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"30dp\"\n    android:width=\"30dp\"\n    android:viewportWidth=\"30.0\"\n    android:viewportHeight=\"30.0\">\n    <path\n        android:fillColor=\"#FF93A9B9\"\n        android:pathData=\"M8,0L22,0A8,8 0,0 1,30 8L30,22A8,8 0,0 1,22 30L8,30A8,8 0,0 1,0 22L0,8A8,8 0,0 1,8 0z\" />\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:pathData=\"M14.9999,24.6154C20.3103,24.6154 24.6153,20.3105 24.6153,15C24.6153,9.6896 20.3103,5.3846 14.9999,5.3846C9.6895,5.3846 5.3845,9.6896 5.3845,15C5.3845,20.3105 9.6895,24.6154 14.9999,24.6154ZM10.3847,13.6543C11.1282,13.6543 11.7309,14.2569 11.7309,15.0004C11.7309,15.7439 11.1282,16.3466 10.3847,16.3466C9.6413,16.3466 9.0386,15.7439 9.0386,15.0004C9.0386,14.2569 9.6413,13.6543 10.3847,13.6543ZM16.3461,15.0004C16.3461,14.2569 15.7434,13.6543 15,13.6543C14.2565,13.6543 13.6538,14.2569 13.6538,15.0004C13.6538,15.7439 14.2565,16.3466 15,16.3466C15.7434,16.3466 16.3461,15.7439 16.3461,15.0004ZM19.6154,13.6543C20.3589,13.6543 20.9616,14.2569 20.9616,15.0004C20.9616,15.7439 20.3589,16.3466 19.6154,16.3466C18.872,16.3466 18.2693,15.7439 18.2693,15.0004C18.2693,14.2569 18.872,13.6543 19.6154,13.6543Z\"\n        android:fillType=\"evenOdd\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/shutdown_progress.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:height=\"132dp\"\n    android:width=\"132dp\"\n    android:viewportWidth=\"60.0\"\n    android:viewportHeight=\"60.0\">\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M30,60C46.5685,60 60,46.5685 60,30C60,13.4315 46.5685,0 30,0C13.4315,0 0,13.4315 0,30C0,46.5685 13.4315,60 30,60ZM30.0781,54.0098C43.333,54.0098 54.0781,43.2646 54.0781,30.0098C54.0781,16.7549 43.333,6.0098 30.0781,6.0098C16.8233,6.0098 6.0781,16.7549 6.0781,30.0098C6.0781,43.2646 16.8233,54.0098 30.0781,54.0098Z\"\n        android:fillType=\"evenOdd\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M18.1562,30.0195m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0\"\n        android:strokeAlpha=\"0.8\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_0.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_0_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_0_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_0_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_0_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_0_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_1.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_1_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_1_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_1_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_1_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_1_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_2.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_2_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_2_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_2_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_2_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_2_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_3.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_3_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_3_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_3_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_3_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_3_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_4.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_4_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_4_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_4_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_4_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_4_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_5.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_5_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_5_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_5_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_5_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 26c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v4c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 22c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v8c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M36 18c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v12c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M51 14c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v16c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_1_5_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 24c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v6c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 20c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v10c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M34 16c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v14c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M50 12c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v18c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_0.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_0_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_0_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_0_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_0_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_0_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_1.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_1_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_1_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_1_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_1_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_1_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_2.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_2_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_2_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_2_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_2_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_2_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_3.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_3_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_3_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_3_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_transparent_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_3_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_3_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#66000000\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_4.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_4_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_4_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_4_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_4_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_4_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_5.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_5_dark.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_5_dark_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/dark_mode_icon_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_5_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"@color/light_mode_icon_color_single_tone\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_5_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M6 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M21 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M36 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M51 40c0-1.66 1.34-3 3-3h2c1.66 0 3 1.34 3 3v2c0 1.66-1.34 3-3 3h-2c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable/statusbar_signal_2_5_tint_thick.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"60\"\n    android:viewportHeight=\"56\"\n    android:width=\"60dp\"\n    android:height=\"56dp\">\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M4 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M19 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M34 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n    <path\n        android:fillColor=\"#ff000000\"\n        android:pathData=\"M50 40c0-1.66 1.34-3 3-3h3c1.66 0 3 1.34 3 3v3c0 1.66-1.34 3-3 3h-3c-1.66 0-3-1.34-3-3z\" />\n</vector>"
  },
  {
    "path": "app/src/main/res/drawable-v31/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"200dp\"\n    android:height=\"200dp\"\n    android:viewportWidth=\"432\"\n    android:viewportHeight=\"432\">\n    <path\n        android:pathData=\"M141.7,165.99L196.19,140.58A23.19,23.19 110,0 1,227 151.79L252.45,206.36A23.19,23.19 110,0 1,241.23 237.18L186.75,262.59A23.19,23.19 110,0 1,155.93 251.37L130.48,196.8A23.19,23.19 110,0 1,141.7 165.99z\"\n        android:fillColor=\"@color/ic_launcher_foreground\" />\n    <path\n        android:pathData=\"M265.33,191.94a52.8,52.8 0,1 1,-63.62 83.72\"\n        android:strokeWidth=\"21\"\n        android:strokeColor=\"@color/ic_launcher_foreground\"\n        android:strokeLineCap=\"round\" />\n    <path\n        android:pathData=\"M268.8,152.54m-13.66,0a13.66,13.66 0,1 1,27.32 0a13.66,13.66 0,1 1,-27.32 0\"\n        android:fillColor=\"@color/ic_launcher_foreground\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_about.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:gravity=\"center\"\n    android:background=\"#00000000\"\n    android:layout_gravity=\"center\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingVertical=\"30dp\">\n\n    <ImageView\n        android:background=\"@drawable/ic_cemiuiler_settings_v140\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\" />\n\n    <TextView\n        android:textAppearance=\"@style/TextAppearance.List\"\n        android:paddingTop=\"3dp\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/app_name\" />\n\n    <TextView\n        android:textAppearance=\"@style/TextAppearance.List.Secondary\"\n        android:textSize=\"16sp\"\n        android:id=\"@android:id/summary\"\n        android:paddingTop=\"10dp\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\" />\n\n    <TextView\n        android:textAppearance=\"@style/TextAppearance.List.Secondary\"\n        android:textSize=\"16sp\"\n        android:id=\"@android:id/title\"\n        android:paddingTop=\"10dp\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\" />\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_custom_hook.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\" />\n\n    </LinearLayout>\n\n    <Button\n        android:id=\"@+id/add_config\"\n\n        android:layout_width=\"68dp\"\n        android:layout_height=\"68dp\"\n        android:layout_gravity=\"bottom|end\"\n        android:layout_marginBottom=\"15dp\"\n        android:layout_marginEnd=\"15dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_custom_hook_config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <TextView\n        android:text=\"@string/custom_hook_new\"\n        android:textSize=\"20sp\"\n        android:layout_gravity=\"center\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:paddingVertical=\"10dp\" />\n\n    <LinearLayout\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:paddingHorizontal=\"30dp\">\n\n        <LinearLayout\n            android:orientation=\"horizontal\"\n            android:gravity=\"center\"\n            android:layout_gravity=\"center\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:paddingVertical=\"10dp\">\n\n            <TextView\n                android:text=\"@string/custom_hook_mode\"\n                android:textSize=\"18sp\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\" />\n\n            <moralnorm.appcompat.widget.Spinner\n                android:entries=\"@array/app_sort\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\" />\n\n        </LinearLayout>\n\n        <LinearLayout\n            android:orientation=\"vertical\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\">\n\n            <EditText\n                android:layout_marginVertical=\"5dp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\" />\n\n            <EditText\n                android:layout_marginVertical=\"5dp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\" />\n\n            <EditText\n                android:layout_marginVertical=\"5dp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\" />\n\n            <EditText\n                android:layout_marginVertical=\"5dp\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\" />\n\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_location.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <moralnorm.springback.view.SpringBackLayout\n        app:scrollableView=\"@id/list_location\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <ListView\n            android:id=\"@+id/list_location\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:textFilterEnabled=\"true\" />\n\n    </moralnorm.springback.view.SpringBackLayout>\n\n    <Button\n        android:id=\"@+id/location_add\"\n        android:layout_gravity=\"end|bottom\"\n        android:layout_width=\"68dp\"\n        android:layout_height=\"68dp\"\n        android:layout_margin=\"20dp\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_app_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/fields\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:animateLayoutChanges=\"true\">\n\n    <moralnorm.springback.view.SpringBackLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        app:scrollableView=\"@id/app_list_rv\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:id=\"@+id/app_list_rv\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:overScrollMode=\"never\"\n            android:scrollbars=\"vertical\" />\n\n    </moralnorm.springback.view.SpringBackLayout>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_centerInParent=\"true\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\">\n\n        <ProgressBar\n            android:id=\"@+id/am_progressBar\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\" />\n\n    </LinearLayout>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_common_padded.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/container\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />"
  },
  {
    "path": "app/src/main/res/layout/frame_content.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/frame_content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />"
  },
  {
    "path": "app/src/main/res/layout/item_app_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    android:paddingHorizontal=\"25dp\"\n    android:paddingVertical=\"10dp\"\n    android:descendantFocusability=\"blocksDescendants\"\n    android:background=\"?android:attr/listChoiceBackgroundIndicator\">\n\n    <ImageView\n        android:id=\"@android:id/icon\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center_vertical\" />\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:orientation=\"horizontal\">\n\n        <LinearLayout\n            android:id=\"@+id/container\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_marginStart=\"15dp\"\n            android:layout_marginEnd=\"15dp\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:id=\"@android:id/title\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:singleLine=\"true\"\n                android:textSize=\"18sp\" />\n\n            <TextView\n                android:id=\"@android:id/summary\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:singleLine=\"true\"\n                android:textSize=\"18sp\"\n                android:visibility=\"gone\" />\n\n        </LinearLayout>\n\n        <ImageView\n            android:id=\"@+id/icon_dual\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:layout_marginStart=\"5dp\"\n            android:layout_marginEnd=\"5dp\"\n            android:visibility=\"gone\" />\n\n        <ImageView\n            android:id=\"@+id/icon_disable\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:layout_marginStart=\"5dp\"\n            android:layout_marginEnd=\"5dp\"\n            android:visibility=\"gone\" />\n\n        <CheckBox\n            android:id=\"@android:id/checkbox\"\n            android:clickable=\"false\"\n            android:focusable=\"false\"\n            android:focusableInTouchMode=\"false\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:layout_marginStart=\"5dp\"\n            android:visibility=\"gone\" />\n\n        <ImageView\n            android:id=\"@android:id/selectedIcon\"\n            android:layout_width=\"30dp\"\n            android:layout_height=\"30dp\"\n            android:visibility=\"gone\" />\n    </LinearLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_location.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingVertical=\"10dp\"\n    android:paddingStart=\"?android:attr/listPreferredItemPaddingStart\"\n    android:paddingEnd=\"?android:attr/listPreferredItemPaddingEnd\"\n    android:minHeight=\"?android:listPreferredItemHeight\">\n\n    <TextView\n        android:id=\"@android:id/title\"\n        android:textSize=\"18sp\"\n        android:textColor=\"@android:color/black\"\n        android:ellipsize=\"end\"\n        android:gravity=\"start\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:maxLines=\"3\" />\n\n    <LinearLayout\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <TextView\n            android:id=\"@+id/region_code\"\n            android:textSize=\"13sp\"\n            android:textColor=\"@android:color/secondary_text_light\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:id=\"@+id/base_station\"\n            android:textSize=\"13sp\"\n            android:textColor=\"@android:color/secondary_text_light\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:id=\"@+id/longitude_latitude\"\n            android:textSize=\"13sp\"\n            android:textColor=\"@android:color/secondary_text_light\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:id=\"@android:id/summary\"\n            android:textSize=\"13sp\"\n            android:textColor=\"@android:color/secondary_text_light\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n    </LinearLayout>\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_mutiplechoice.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<moralnorm.appcompat.widget.CheckedTextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@android:id/text1\"\n    android:gravity=\"center_vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:singleLine=\"true\"\n    android:textDirection=\"locale\"\n    android:paddingStart=\"@dimen/appcompat_dialog_list_item_padding_start\"\n    android:paddingEnd=\"@dimen/appcompat_dialog_list_item_padding_end\"\n    android:minHeight=\"@dimen/appcompat_dialog_list_preferred_item_height\"\n    style=\"@style/Widget.AlertDialogListItem.MultiChoice\" />"
  },
  {
    "path": "app/src/main/res/layout/item_search_result.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"horizontal\"\n    android:paddingHorizontal=\"25dp\"\n    android:paddingVertical=\"10dp\"\n    android:descendantFocusability=\"blocksDescendants\"\n    android:background=\"?android:selectableItemBackground\">\n\n    <ImageView\n        android:id=\"@android:id/icon\"\n        android:visibility=\"gone\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center_vertical\" />\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:orientation=\"horizontal\">\n\n        <LinearLayout\n            android:id=\"@+id/container\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:layout_gravity=\"center_vertical\"\n            android:layout_marginStart=\"15dp\"\n            android:layout_marginEnd=\"15dp\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:id=\"@android:id/title\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:singleLine=\"true\"\n                android:textSize=\"18sp\"\n                android:textAppearance=\"@style/TextAppearance.List\"/>\n\n            <TextView\n                android:id=\"@android:id/summary\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_vertical\"\n                android:singleLine=\"true\"\n                android:textSize=\"14.5sp\"\n                android:textAppearance=\"@style/TextAppearance.List.Secondary\"/>\n\n        </LinearLayout>\n    </LinearLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/location_edit_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingStart=\"?android:attr/listPreferredItemPaddingStart\"\n    android:paddingEnd=\"?android:attr/listPreferredItemPaddingEnd\">\n\n    <EditText\n        android:id=\"@+id/title\"\n        android:hint=\"@string/location_simulation_work_title\"\n        android:layout_marginVertical=\"5dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <EditText\n        android:id=\"@+id/offset\"\n        android:hint=\"@string/location_simulation_work_offset\"\n        android:layout_marginVertical=\"5dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <EditText\n        android:id=\"@+id/base_station\"\n        android:hint=\"@string/location_simulation_work_base_station\"\n        android:layout_marginVertical=\"5dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <EditText\n        android:id=\"@+id/longitude_latitude\"\n        android:hint=\"@string/location_simulation_work_longitude_latitude\"\n        android:layout_marginVertical=\"5dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <EditText\n        android:id=\"@+id/remarks\"\n        android:hint=\"@string/location_simulation_work_remarks\"\n        android:layout_marginVertical=\"5dp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/preference_custom_blur_dark_mode.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <ImageView\n        android:id=\"@+id/image_view\"\n        android:layout_width=\"168.7272dp\"\n        android:layout_height=\"365.08594dp\"\n        android:contentDescription=\"@string/cemiuiler_notice\"\n        android:importantForAccessibility=\"yes\"\n        android:src=\"@drawable/ic_launcher_foreground\" />\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/preference_custom_blur_light_mode.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <ImageView\n        android:id=\"@+id/image_view\"\n        android:layout_width=\"160dp\"\n        android:layout_height=\"100dp\"\n        android:contentDescription=\"@string/cemiuiler_notice\"\n        android:importantForAccessibility=\"yes\"\n        android:src=\"@drawable/ic_launcher_foreground\" />\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/preference_dialog_edittext.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:layout_marginTop=\"48dp\"\n    android:layout_marginBottom=\"48dp\"\n    android:overScrollMode=\"ifContentScrolls\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:id=\"@android:id/message\"\n            style=\"?android:attr/textAppearanceSmall\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"24dp\"\n            android:layout_marginLeft=\"24dp\"\n            android:layout_marginEnd=\"24dp\"\n            android:layout_marginRight=\"24dp\"\n            android:layout_marginBottom=\"48dp\"\n            android:textColor=\"?android:attr/textColorSecondary\" />\n\n        <EditText\n            android:id=\"@android:id/edit\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginHorizontal=\"@dimen/miuix_appcompat_edit_text_padding_horizontal\"\n            android:layout_marginLeft=\"20dp\"\n            android:layout_marginRight=\"20dp\"\n            android:inputType=\"textMultiLine\"\n            android:minHeight=\"48dp\" />\n    </LinearLayout>\n</ScrollView>"
  },
  {
    "path": "app/src/main/res/layout/preference_divider.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:padding=\"30dp\">\n\n    <ImageView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"#27000000\"\n        android:layout_gravity=\"center\" />\n\n</FrameLayout>"
  },
  {
    "path": "app/src/main/res/layout/preference_header.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:clipChildren=\"false\"\n    android:gravity=\"center_vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"center_vertical\"\n    android:minHeight=\"?android:attr/listPreferredItemHeight\"\n    android:background=\"?attr/preferenceItemBackground\">\n\n    <LinearLayout\n        android:id=\"@+id/icon_frame\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:minWidth=\"@dimen/preference_icon_minWidth\">\n\n        <ImageView\n            android:id=\"@android:id/icon\"\n            android:gravity=\"center\"\n            android:scaleType=\"fitCenter\"\n            android:adjustViewBounds=\"true\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:maxWidth=\"54dp\"\n            android:paddingEnd=\"@dimen/preference_icon_padding_end\"\n            android:layout_marginTop=\"@dimen/preference_item_padding_inner\"\n            android:layout_marginBottom=\"@dimen/preference_item_padding_inner\"\n            style=\"@style/Widget.PreferenceIcon\"/>\n    </LinearLayout>\n\n    <RelativeLayout\n        android:gravity=\"center_vertical\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_weight=\"1.0\"\n        style=\"@style/Widget.PreferenceItem\">\n\n        <TextView\n            android:id=\"@android:id/title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:ellipsize=\"end\"\n            android:fadingEdge=\"horizontal\"\n            android:maxLines=\"2\"\n            android:textAlignment=\"viewStart\"\n            android:textAppearance=\"@style/TextAppearance.PreferenceList\" />\n\n        <TextView\n            android:id=\"@android:id/summary\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@android:id/title\"\n            android:layout_alignStart=\"@android:id/title\"\n            android:layout_marginTop=\"@dimen/preference_summary_margin_top\"\n            android:scrollbars=\"none\"\n            android:textAlignment=\"viewStart\"\n            android:textAppearance=\"@style/TextAppearance.PreferenceList.Secondary\" />\n    </RelativeLayout>\n\n    <!-- Preference should place its actual preference widget here. -->\n    <LinearLayout\n        android:id=\"@android:id/widget_frame\"\n        android:gravity=\"center\"\n        android:clipChildren=\"false\"\n        android:orientation=\"vertical\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:minWidth=\"@dimen/preference_widget_minWidth\" />\n\n    <ImageView\n        android:id=\"@+id/arrow_right\"\n        android:gravity=\"center\"\n        android:layout_gravity=\"center|end\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/ic_preference_arrow_right\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/preference_round_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ Copyright (C) 2015 The Android Open Source Project\n  ~\n  ~ Licensed under the Apache License, Version 2.0 (the \"License\");\n  ~ you may not use this file except in compliance with the License.\n  ~ You may obtain a copy of the License at\n  ~\n  ~      http://www.apache.org/licenses/LICENSE-2.0\n  ~\n  ~ Unless required by applicable law or agreed to in writing, software\n  ~ distributed under the License is distributed on an \"AS IS\" BASIS,\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  ~ See the License for the specific language governing permissions and\n  ~ limitations under the License\n  -->\n\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"center_vertical\"\n    android:background=\"?preferenceItemBackground\"\n    android:clipChildren=\"false\"\n    android:gravity=\"center_vertical\"\n    tools:ignore=\"PrivateResource\">\n\n    <FrameLayout\n        android:id=\"@+id/icon_frame\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:minWidth=\"@dimen/preference_icon_minWidth\"\n        android:paddingTop=\"@dimen/preference_item_padding_inner\"\n        android:paddingEnd=\"@dimen/preference_icon_padding_end\"\n        android:paddingBottom=\"@dimen/preference_item_padding_inner\"\n        tools:ignore=\"PrivateResource,RtlSymmetry\">\n\n        <com.sevtinge.cemiuiler.view.CircleImageView\n            android:id=\"@android:id/icon\"\n            android:layout_width=\"60dp\"\n            android:layout_height=\"60dp\"\n            android:layout_gravity=\"center\" />\n\n    </FrameLayout>\n\n    <RelativeLayout\n        style=\"@style/Widget.PreferenceItem\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_weight=\"1\"\n        android:gravity=\"center_vertical\"\n        tools:ignore=\"InefficientWeight\">\n\n        <TextView\n            android:id=\"@android:id/title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:ellipsize=\"end\"\n            android:fadingEdge=\"horizontal\"\n            android:maxLines=\"2\"\n            android:textAlignment=\"viewStart\"\n            android:textAppearance=\"@style/TextAppearance.List\" />\n\n        <TextView\n            android:id=\"@android:id/summary\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@android:id/title\"\n            android:layout_alignStart=\"@android:id/title\"\n            android:layout_marginTop=\"@dimen/preference_summary_margin_top\"\n            android:textAlignment=\"viewStart\"\n            android:textAppearance=\"@style/TextAppearance.List.Secondary\"\n            tools:ignore=\"PrivateResource\" />\n\n    </RelativeLayout>\n\n    <!-- Preference should place its actual preference widget here. -->\n    <LinearLayout\n        android:id=\"@android:id/widget_frame\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:clipChildren=\"false\"\n        android:gravity=\"center\"\n        android:minWidth=\"@dimen/preference_widget_minWidth\"\n        android:orientation=\"vertical\"\n        tools:ignore=\"PrivateResource\" />\n\n    <ImageView\n        android:id=\"@+id/arrow_right\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center|end\"\n        android:gravity=\"center\"\n        android:src=\"@drawable/ic_preference_arrow_right\"\n        tools:ignore=\"ContentDescription,PrivateResource\" />\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/preference_seekbar_no_padding.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- Copyright (C) 2016 The Android Open Source Project\n\n     Licensed under the Apache License, Version 2.0 (the \"License\");\n     you may not use this file except in compliance with the License.\n     You may obtain a copy of the License at\n\n          http://www.apache.org/licenses/LICENSE-2.0\n\n     Unless required by applicable law or agreed to in writing, software\n     distributed under the License is distributed on an \"AS IS\" BASIS,\n     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     See the License for the specific language governing permissions and\n     limitations under the License.\n-->\n\n<!-- Layout used by SeekBarPreference for the seekbar widget style. -->\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:clipChildren=\"false\"\n    android:gravity=\"center_vertical\"\n    android:orientation=\"horizontal\"\n    android:layout_gravity=\"center_vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"?preferenceItemBackground\">\n\n    <include layout=\"@layout/image_frame\" />\n\n    <LinearLayout\n        android:orientation=\"vertical\"\n        android:gravity=\"center_vertical\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <RelativeLayout\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\">\n\n                <TextView\n                    android:id=\"@android:id/title\"\n                    android:textAlignment=\"viewStart\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:ellipsize=\"end\"\n                    android:fadingEdge=\"horizontal\"\n                    android:maxLines=\"2\"\n                    android:textAppearance=\"@style/TextAppearance.List\" />\n\n                <TextView\n                    android:id=\"@android:id/summary\"\n                    android:textAlignment=\"viewStart\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_below=\"@android:id/title\"\n                    android:layout_alignStart=\"@android:id/title\"\n                    android:layout_alignLeft=\"@android:id/title\"\n                    android:layout_marginTop=\"@dimen/preference_summary_margin_top\"\n                    android:textAppearance=\"@style/TextAppearance.List.Secondary\" />\n\n            </RelativeLayout>\n\n            <ImageView\n                android:id=\"@+id/arrow_edit\"\n                android:gravity=\"center\"\n                android:layout_gravity=\"center|end\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:src=\"@drawable/ic_arrow_edit\"\n                android:visibility=\"gone\" />\n\n        </LinearLayout>\n\n        <LinearLayout\n            android:clipChildren=\"false\"\n            android:clipToPadding=\"false\"\n            android:orientation=\"horizontal\"\n            android:gravity=\"center\"\n            android:layout_gravity=\"center\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <SeekBar\n                android:id=\"@+id/seekbar\"\n                android:layout_width=\"0dp\"\n                android:layout_weight=\"1\"\n                android:layout_height=\"wrap_content\"\n                android:focusable=\"false\"\n                android:clickable=\"false\"\n                android:background=\"@null\" />\n\n            <FrameLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\">\n\n                <TextView\n                    android:id=\"@+id/seekbar_value\"\n                    android:textAlignment=\"center\"\n                    android:singleLine=\"true\"\n                    android:ellipsize=\"marquee\"\n                    android:fadingEdge=\"horizontal\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:minWidth=\"@dimen/preference_seekbar_value_min_width\"\n                    android:textAppearance=\"@style/TextAppearance.List.Secondary\" />\n\n            </FrameLayout>\n\n        </LinearLayout>\n\n    </LinearLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/preference_text.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Copyright (C) 2015 The Android Open Source Project\n  ~\n  ~ Licensed under the Apache License, Version 2.0 (the \"License\");\n  ~ you may not use this file except in compliance with the License.\n  ~ You may obtain a copy of the License at\n  ~\n  ~      http://www.apache.org/licenses/LICENSE-2.0\n  ~\n  ~ Unless required by applicable law or agreed to in writing, software\n  ~ distributed under the License is distributed on an \"AS IS\" BASIS,\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  ~ See the License for the specific language governing permissions and\n  ~ limitations under the License\n  -->\n\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:clickable=\"false\"\n    android:clipChildren=\"false\"\n    android:gravity=\"center_vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"center_vertical\"\n    android:paddingStart=\"@dimen/preference_item_padding_start\"\n    android:paddingEnd=\"@dimen/preference_item_padding_end\"\n    android:paddingBottom=\"@dimen/preference_item_padding_inner\">\n\n    <include layout=\"@layout/image_frame\" />\n\n    <RelativeLayout\n        android:gravity=\"center_vertical\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_weight=\"1.0\">\n\n        <TextView\n            android:id=\"@android:id/title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:ellipsize=\"end\"\n            android:fadingEdge=\"horizontal\"\n            android:maxLines=\"2\"\n            android:textAlignment=\"viewStart\"\n            android:textAppearance=\"@style/TextAppearance.PreferenceList\" />\n\n        <TextView\n            android:id=\"@android:id/summary\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@android:id/title\"\n            android:layout_alignStart=\"@android:id/title\"\n            android:layout_marginTop=\"@dimen/preference_summary_margin_top\"\n            android:scrollbars=\"none\"\n            android:textAlignment=\"viewStart\"\n            android:textAppearance=\"@style/TextAppearance.PreferenceList.Secondary\" />\n    </RelativeLayout>\n\n    <!-- Preference should place its actual preference widget here. -->\n    <LinearLayout\n        android:id=\"@android:id/widget_frame\"\n        android:gravity=\"center\"\n        android:clipChildren=\"false\"\n        android:orientation=\"vertical\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:minWidth=\"@dimen/preference_widget_minWidth\" />\n\n    <ImageView\n        android:id=\"@+id/arrow_right\"\n        android:gravity=\"center\"\n        android:layout_gravity=\"center|end\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/ic_preference_arrow_right\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/settings_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <include\n        android:id=\"@+id/search_view\"\n        layout=\"@layout/miuix_appcompat_search_stub\" />\n\n    <include layout=\"@layout/frame_content\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/search_result_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/statusbar_text_icon.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.android.systemui.statusbar.views.NetworkSpeedView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:tag=\"slot_text_icon\"\n    android:gravity=\"end|center_vertical\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"match_parent\"\n    android:singleLine=\"false\"\n    tools:ignore=\"MissingClass\" />\n"
  },
  {
    "path": "app/src/main/res/layout/view_mutiplechoice.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    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <moralnorm.springback.view.SpringBackLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        app:scrollableView=\"@android:id/list\"\n        android:layout_weight=\"1\">\n\n        <androidx.recyclerview.widget.RecyclerView\n            android:id=\"@android:id/list\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n    </moralnorm.springback.view.SpringBackLayout>\n\n    <moralnorm.appcompat.internal.widget.DialogButtonPanel\n        style=\"?android:buttonBarStyle\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:measureWithLargestChild=\"true\"\n        android:paddingStart=\"@dimen/appcompat_dialog_button_panel_margin_horizontal\"\n        android:paddingEnd=\"@dimen/appcompat_dialog_button_panel_margin_horizontal\"\n        android:paddingTop=\"20dp\">\n\n        <Button\n            android:id=\"@android:id/button2\"\n            android:gravity=\"center\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:maxLines=\"2\"\n            android:layout_weight=\"1\"\n            style=\"?android:buttonBarNegativeButtonStyle\" />\n\n        <Button\n            android:id=\"@android:id/button1\"\n            android:text=\"@android:string/ok\"\n            android:gravity=\"center\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:maxLines=\"2\"\n            android:layout_weight=\"1\"\n            style=\"?android:buttonBarPositiveButtonStyle\" />\n\n    </moralnorm.appcompat.internal.widget.DialogButtonPanel>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/menu/menu_location.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/location_add\"\n        android:title=\"@string/location_add\" />\n\n    <item\n        android:id=\"@+id/location_delete\"\n        android:title=\"@string/location_delete\" />\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/menu_location_simulation.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/location_simulation_data\"\n        android:title=\"@string/location_data_title\" />\n</menu>"
  },
  {
    "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\n    <item\n        android:id=\"@+id/restart\"\n        android:title=\"@string/cemiuiler_restart_quick\" />\n\n    <item\n        android:id=\"@+id/settings\"\n        android:title=\"@string/settings\" />\n\n    <item\n        android:id=\"@+id/about\"\n        android:title=\"@string/about\" />\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/menu_system_framework_other.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <group>\n\n        <item\n            android:id=\"@+id/system_framework_share_menu_test\"\n            android:title=\"@string/system_framework_share_menu_test\" />\n\n        <item\n            android:id=\"@+id/system_framework_open_with_menu_test\"\n            android:title=\"@string/system_framework_open_with_menu_test\" />\n    </group>\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/resources.properties",
    "content": "unqualifiedResLocale=en-US\n"
  },
  {
    "path": "app/src/main/res/values/arrays.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string-array name=\"xposed_scope\">\n        <item>android</item>\n        <item>com.android.browser</item>\n        <item>com.android.camera</item>\n        <item>com.android.deskclock</item>\n        <item>com.android.externalstorage</item>\n        <item>com.android.fileexplorer</item>\n        <item>com.android.incallui</item>\n        <item>com.android.mms</item>\n        <item>com.android.nfc</item>\n        <item>com.android.phone</item>\n        <item>com.android.providers.downloads</item>\n        <item>com.android.providers.downloads.ui</item>\n        <item>com.android.systemui</item>\n        <item>com.android.settings</item>\n        <item>com.android.thememanager</item>\n        <item>com.android.updater</item>\n        <item>com.baidu.input_mi</item>\n        <item>com.iflytek.inputmethod.miui</item>\n        <item>com.lbe.security.miui</item>\n        <item>com.milink.service</item>\n        <item>com.miui.aod</item>\n        <item>com.miui.cleanmaster</item>\n        <item>com.miui.cloudservice</item>\n        <item>com.miui.contentextension</item>\n        <item>com.miui.creation</item>\n        <item>com.miui.gallery</item>\n        <item>com.miui.guardprovider</item>\n        <item>com.miui.home</item>\n        <item>com.miui.mediaeditor</item>\n        <item>com.miui.mishare.connectivity</item>\n        <item>com.miui.miwallpaper</item>\n        <item>com.miui.notes</item>\n        <item>com.miui.packageinstaller</item>\n        <item>com.miui.personalassistant</item>\n        <item>com.miui.player</item>\n        <item>com.miui.powerkeeper</item>\n        <item>com.miui.rom</item>\n        <item>com.miui.screenrecorder</item>\n        <item>com.miui.screenshot</item>\n        <item>com.miui.securityadd</item>\n        <item>com.miui.securitycenter</item>\n        <item>com.miui.tsmclient</item>\n        <item>com.miui.voiceassist</item>\n        <item>com.miui.weather2</item>\n        <item>com.sohu.inputmethod.sogou.xiaomi</item>\n        <item>com.xiaomi.aiasst.vision</item>\n        <item>com.xiaomi.barrage</item>\n        <item>com.xiaomi.joyose</item>\n        <item>com.xiaomi.market</item>\n        <item>com.xiaomi.mirror</item>\n        <item>com.xiaomi.misettings</item>\n        <item>com.xiaomi.mtb</item>\n        <item>com.xiaomi.NetworkBoost</item>\n        <item>com.xiaomi.scanner</item>\n    </string-array>\n\n    <string-array name=\"app_module_support\">\n        <item>@string/system_framework</item>\n        <item>@string/system_ui</item>\n        <item>@string/home</item>\n        <item>@string/security_center</item>\n        <item>@string/various</item>\n    </string-array>\n\n    <string-array name=\"restart_apps_name\">\n        <item>@string/system_ui</item>\n        <item>@string/home</item>\n        <item>@string/security_center</item>\n        <item>@string/personal_assistant</item>\n        <item>@string/notes</item>\n        <item>@string/powerkeeper</item>\n        <item>@string/joyose</item>\n        <item>@string/networkboost</item>\n    </string-array>\n\n    <string-array name=\"restart_apps_packagename\">\n        <item>com.android.systemui</item>\n        <item>com.miui.home</item>\n        <item>com.miui.securitycenter</item>\n        <item>com.miui.personalassistant</item>\n        <item>com.miui.notes</item>\n        <item>com.miui.powerkeeper</item>\n        <item>com.xiaomi.joyose</item>\n        <item>com.xiaomi.NetworkBoost</item>\n    </string-array>\n\n    <string-array name=\"miui_core_app_package_name\">\n        <item>com.lbe.security.miui</item>\n        <item>com.miui.packageinstaller</item>\n    </string-array>\n\n    <string-array name=\"default_bubble_apps\">\n        <item>com.tencent.mm</item>\n        <item>com.tencent.mobileqq</item>\n        <item>com.alibaba.android.rimet</item>\n        <item>com.tencent.wemeet.app</item>\n        <item>com.tencent.wework</item>\n        <item>com.ss.android.lark</item>\n        <item>com.ss.android.lark.kami</item>\n        <item>nekox.messenger</item>\n        <item>tw.nekomimi.nekogram</item>\n        <item>org.telegram.messenger</item>\n    </string-array>\n\n    <array name=\"miui_freeform_black_list\">\n        <item>ab.cd.xyz</item>\n    </array>\n\n    <string-array name=\"settings_icon\">\n        <item>@string/settings_icon_disable</item>\n        <item>@string/settings_icon_top</item>\n        <item>@string/settings_icon_medium</item>\n        <item>@string/settings_icon_down</item>\n    </string-array>\n\n    <string-array name=\"settings_icon_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"settings_icon_mode\">\n        <item>@string/settings_icon_miui_14</item>\n        <item>@string/settings_icon_miui_13</item>\n    </string-array>\n\n    <string-array name=\"settings_icon_mode_value\">\n        <item>0</item>\n        <item>1</item>\n    </string-array>\n\n    <array name=\"miui_volume_timer_segments\">\n        <item>@null</item>\n        <item>1800</item>\n        <item>3600</item>\n        <item>7200</item>\n        <item>10800</item>\n        <item>14400</item>\n        <item>18000</item>\n        <item>21600</item>\n        <item>28800</item>\n        <item>36000</item>\n        <item>43200</item>\n    </array>\n\n    <string-array name=\"default_volume_stream\">\n        <item>@string/array_default</item>\n        <item>@string/default_volume_stream_ring</item>\n        <item>@string/default_volume_stream_media</item>\n        <item>@string/default_volume_stream_tip</item>\n    </string-array>\n\n    <string-array name=\"default_volume_streame_value\">\n        <item>0</item>\n        <item>2</item>\n        <item>3</item>\n        <item>5</item>\n    </string-array>\n\n    <string-array name=\"open_with_test\">\n        <item>@string/open_with_test_picture</item>\n        <item>@string/open_with_test_audio</item>\n        <item>@string/open_with_test_media</item>\n        <item>@string/open_with_test_doc</item>\n        <item>@string/open_with_test_zip</item>\n        <item>@string/open_with_test_all</item>\n    </string-array>\n\n    <string-array name=\"charge_animation_entries\">\n        <item>@string/array_default</item>\n        <item>@string/charge_animation_entries_disable</item>\n        <item>@string/charge_animation_entries_aura</item>\n        <item>@string/charge_animation_entries_stream</item>\n        <item>@string/charge_animation_entries_alpha</item>\n    </string-array>\n\n    <string-array name=\"charge_animation_values\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n        <item>4</item>\n    </string-array>\n\n\n    <string-array name=\"status_bar_icon_mode\">\n        <item>@string/status_bar_icon_mode_default</item>\n        <item>@string/status_bar_icon_mode_on</item>\n        <item>@string/status_bar_icon_mode_off</item>\n    </string-array>\n\n    <string-array name=\"control_center_sunshine_mode\">\n        <item>@string/control_center_sunshine_mode_default</item>\n        <item>@string/control_center_sunshine_mode_one</item>\n        <item>@string/control_center_sunshine_mode_two</item>\n    </string-array>\n\n    <string-array name=\"status_bar_icon_mode_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"status_bar_icon_mobile_network_type\">\n        <item>@string/status_bar_icon_mode_default</item>\n        <item>@string/status_bar_icon_mode_on</item>\n        <item>@string/status_bar_icon_mode_off</item>\n        <item>@string/status_bar_icon_mode_off_unconnect</item>\n    </string-array>\n\n    <string-array name=\"status_bar_icon_mobile_network_type_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"status_bar_icon_alarm_clock\">\n        <item>@string/status_bar_icon_mode_default</item>\n        <item>@string/status_bar_icon_mode_on</item>\n        <item>@string/status_bar_icon_mode_off</item>\n        <item>@string/status_bar_icon_mode_on_beforering</item>\n    </string-array>\n\n    <string-array name=\"status_bar_icon_alarm_clock_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"status_bar_icon_bluetooth\">\n        <item>@string/status_bar_icon_mode_default</item>\n        <item>@string/status_bar_icon_mode_on</item>\n        <item>@string/status_bar_icon_mode_off</item>\n        <item>@string/status_bar_icon_mode_off_unconnect</item>\n    </string-array>\n\n    <string-array name=\"status_bar_icon_bluetooth_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"folder_shade\">\n        <item>@string/array_default</item>\n        <item>@string/home_folder_shade_solid</item>\n        <item>@string/home_folder_shade_gradient</item>\n    </string-array>\n\n\n    <string-array name=\"battery_indicator_align\">\n        <item>@string/array_align_top</item>\n        <item>@string/array_align_bottom</item>\n    </string-array>\n    <string-array name=\"battery_indicator_align_value\">\n        <item>0</item>\n        <item>1</item>\n    </string-array>\n\n    <string-array name=\"battery_indicator_color\">\n        <item>@string/array_discrete</item>\n        <item>@string/array_gradual</item>\n        <item>@string/array_rainbow</item>\n    </string-array>\n    <string-array name=\"battery_indicator_color_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n\n    <string-array name=\"folder_shade_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"home_mode\">\n        <item>@string/array_default</item>\n        <item>@string/home_mode_day</item>\n        <item>@string/home_mode_dark</item>\n    </string-array>\n\n    <string-array name=\"home_mode_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"seek_points\">\n        <item>@string/array_default</item>\n        <item>@string/seek_points_roll</item>\n        <item>@string/seek_points_edit</item>\n    </string-array>\n\n    <string-array name=\"seek_points_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n\n    <string-array name=\"app_sort\">\n        <item>@string/app_sort_running</item>\n        <item>@string/app_sort_name</item>\n        <item>@string/app_sort_frequency</item>\n        <item>@string/app_sort_storage</item>\n        <item>@string/app_sort_install</item>\n    </string-array>\n\n    <string-array name=\"app_sort_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n        <item>4</item>\n    </string-array>\n\n    <string-array name=\"dialog_gravity\">\n        <item>@string/array_default</item>\n        <item>@string/dialog_gravity_medium</item>\n        <item>@string/dialog_gravity_down</item>\n    </string-array>\n\n    <string-array name=\"dialog_gravity_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"collapse_miui_title\">\n        <item>@string/array_default</item>\n        <item>@string/collapse_miui_title_off</item>\n        <item>@string/collapse_miui_title_on</item>\n        <item>@string/collapse_miui_title_off_always</item>\n        <item>@string/collapse_miui_title_on_always</item>\n    </string-array>\n\n    <string-array name=\"collapse_miui_title_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n        <item>4</item>\n    </string-array>\n\n\n    <string-array name=\"location\">\n        <item>@string/array_default</item>\n        <item>@string/location_custom</item>\n    </string-array>\n\n    <string-array name=\"location_value\">\n        <item>0</item>\n        <item>1</item>\n    </string-array>\n\n    <string-array name=\"operator_fix\">\n        <item>@string/operator_fix_none</item>\n        <item>@string/operator_fix_1</item>\n        <item>@string/operator_fix_2</item>\n    </string-array>\n\n    <string-array name=\"operator_fix_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"weather_device_level\">\n        <item>@string/array_default</item>\n        <item>@string/weather_device_level_title_low</item>\n        <item>@string/weather_device_level_title_middle</item>\n        <item>@string/weather_device_level_title_high</item>\n    </string-array>\n\n    <string-array name=\"weather_device_level_value\">\n        <item>3</item>\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"home_recent_blur\">\n        <item>@string/array_default</item>\n        <item>@string/home_recent_complete_blur_plus</item>\n        <item>@string/home_recent_complete_blur</item>\n        <item>@string/home_recent_test_blur</item>\n        <item>@string/home_recent_simple_blur</item>\n        <item>@string/home_recent_none_blur</item>\n        <item>@string/home_recent_none_blur_simple_anim</item>\n    </string-array>\n\n    <string-array name=\"home_recent_blur_value\">\n        <item>6</item>\n        <item>5</item>\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n        <item>4</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_horizontal_align\">\n        <item>@string/array_default</item>\n        <item>@string/array_align_left</item>\n        <item>@string/array_align_center</item>\n        <item>@string/array_align_right</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_horizontal_align_value\">\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n        <item>4</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_network_icon\">\n        <item>@string/array_netspeedicons_no</item>\n        <item>@string/array_netspeedicons_arrows</item>\n        <item>@string/array_netspeedicons_arrows_small</item>\n        <item>@string/array_netspeedicons_bullets</item>\n        <item>@string/array_netspeedicons_arrows_long1</item>\n        <item>@string/array_netspeedicons_arrows_long2</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_network_icon_value\">\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n        <item>4</item>\n        <item>5</item>\n        <item>6</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_clock_mode\">\n        <item>@string/array_close</item>\n        <item>@string/array_clock_default</item>\n        <item>@string/array_clock_geek</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_clock_mode_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_clock_double_mode\">\n        <item>@string/array_default</item>\n        <item>@string/array_align_center</item>\n        <item>@string/array_align_right</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_clock_double_mode_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_battery_show\">\n        <item>@string/array_battery_both</item>\n        <item>@string/array_battery_power</item>\n        <item>@string/array_battery_current</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_battery_show_value\">\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_battery_disable\">\n        <item>@string/array_default</item>\n        <item>@string/array_battery_both</item>\n        <item>@string/array_battery_power</item>\n        <item>@string/array_battery_current</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_battery_disable_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_layout_mode\">\n        <item>@string/array_default</item>\n        <item>@string/array_clock_center</item>\n        <item>@string/array_clock_right</item>\n        <item>@string/array_clock_center_and_icon_left</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_layout_mode_value\">\n        <item>0</item>\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_device_temp_details\">\n        <item>@string/array_battery_both</item>\n        <item>@string/array_battery_temp</item>\n        <item>@string/array_cpu_temp</item>\n    </string-array>\n\n    <string-array name=\"market_device_modify_list\">\n        <item>@string/array_default</item>\n        <item>Xiaomi 14 Pro</item>\n        <item>Xiaomi 14</item>\n        <item>Xiaomi 13 Ultra</item>\n        <item>Xiaomi CIVI 3</item>\n        <item>Xiaomi MIX Fold 3</item>\n        <item>Xiaomi MIX Alpha (Avenger)</item>\n        <item>Xiaomi MIX Alpha (Draco)</item>\n        <item>Xiaomi Pad 6 Max 14</item>\n        <item>Redmi K60 Ultra</item>\n        <item>Redmi K70 Pro</item>\n        <item>Redmi K70E</item>\n        <item>Redmi Note 13 Pro+</item>\n    </string-array>\n\n    <string-array name=\"market_device_modify_value\">\n        <item>0</item>\n        <item>102</item>\n        <item>103</item>\n        <item>101</item>\n        <item>153</item>\n        <item>223</item>\n        <item>190</item>\n        <item>191</item>\n        <item>208</item>\n        <item>307</item>\n        <item>309</item>\n        <item>351</item>\n        <item>334</item>\n    </string-array>\n\n    <string-array name=\"link_open_mode\">\n        <item>@string/link_open_mode_default</item>\n        <item>@string/link_open_mode_mi</item>\n    </string-array>\n\n    <string-array name=\"link_open_mode_value\">\n        <item>0</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_network_icon_style\">\n        <item>@string/array_default</item>\n        <item>@string/array_bold</item>\n        <item>@string/array_theme</item>\n    </string-array>\n\n    <string-array name=\"system_ui_status_bar_network_icon_style_value\">\n        <item />\n        <item>thick</item>\n        <item>theme</item>\n    </string-array>\n\n    <string-array name=\"control_center_cc_bluetooth_tile_style\">\n        <item>@string/array_default</item>\n        <item>@string/array_bluetooth_tile_style_2rows2cols</item>\n        <item>@string/array_bluetooth_tile_style_3rows</item>\n    </string-array>\n\n    <string-array name=\"control_center_cc_bluetooth_tile_style_value\">\n        <item>1</item>\n        <item>2</item>\n        <item>3</item>\n    </string-array>\n\n    <string-array name=\"mipad_input_bluetooth_version\">\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"mipad_input_bluetooth_version_value\">\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"personal_assistant_blur\">\n        <item>@string/array_pa_blur_official</item>\n        <item>@string/array_bpa_blur_customize</item>\n    </string-array>\n\n    <string-array name=\"personal_assistant_blur_value\">\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n\n    <string-array name=\"updater_version_mode\">\n        <item>MIUI</item>\n        <item>Xiaomi HyperOS</item>\n    </string-array>\n\n    <string-array name=\"updater_version_mode_value\">\n        <item>1</item>\n        <item>2</item>\n    </string-array>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <attr name=\"rebootIconColor\" format=\"color\" />\n\n    <declare-styleable name=\"MagicBubbleSeekBar\">\n        <attr name=\"empty_color\" format=\"color\" />\n        <attr name=\"fill_color\" format=\"color\" />\n        <attr name=\"slider_color\" format=\"color\" />\n        <attr name=\"max_progress\" format=\"integer\" />\n        <attr name=\"min_progress\" format=\"integer\" />\n        <attr name=\"slider_width\" format=\"dimension\" />\n        <attr name=\"current_progress\" format=\"float\" />\n        <attr name=\"empty_progress_height\" format=\"dimension\" />\n        <attr name=\"empty_progress_width\" format=\"dimension\" />\n        <attr name=\"fill_progress_height\" format=\"dimension\" />\n        <attr name=\"hide_bubble\" format=\"boolean\" />\n        <attr name=\"slider_enlarge_hide\" format=\"boolean\" />\n        <attr name=\"normal_width\" format=\"dimension\" />\n        <attr name=\"visibility_height\" format=\"dimension\" />\n        <attr name=\"visibility_width\" format=\"dimension\" />\n        <attr name=\"bubble_seekbar_distance\" format=\"dimension\" />\n    </declare-styleable>\n\n    <!--<declare-styleable name=\"SeekBarPreference\">\n        <attr name=\"android:defaultValue\" />\n        <attr name=\"minValue\" format=\"integer\" />\n        <attr name=\"maxValue\" format=\"integer\" />\n        <attr name=\"stepValue\" format=\"integer\" />\n        <attr name=\"displayDividerValue\" format=\"integer\" />\n        <attr name=\"negativeShift\" format=\"integer\" />\n        <attr name=\"showplus\" format=\"boolean\" />\n        <attr name=\"format\" format=\"string\" />\n        <attr name=\"note\" format=\"string\" />\n        <attr name=\"offtext\" format=\"string\" />\n        <attr name=\"dynamic\" format=\"boolean\" />\n        <attr name=\"child\" format=\"boolean\" />\n    </declare-styleable>-->\n\n    <declare-styleable name=\"CircleImageView\">\n        <attr name=\"border_width\" format=\"dimension\" />\n        <attr name=\"border_color\" format=\"color\" />\n        <attr name=\"border_overlay\" format=\"boolean\" />\n        <attr name=\"fill_color1\" format=\"color\" />\n    </declare-styleable>\n\n    <declare-styleable name=\"VisualCheckBoxPreference\">\n        <attr name=\"positiveContent\" format=\"reference\" />\n        <attr name=\"positiveTitle\" format=\"string\" />\n        <attr name=\"positiveDescription\" format=\"string\" />\n\n        <attr name=\"negativeContent\" format=\"reference\" />\n        <attr name=\"negativeTitle\" format=\"string\" />\n        <attr name=\"negativeDescription\" format=\"string\" />\n    </declare-styleable>\n\n    <!-- Default style for seekbar preferences. -->\n    <attr name=\"seekBarPreferenceExStyle\" format=\"reference\" />\n\n    <declare-styleable name=\"SeekBarPreferenceEx\">\n        <attr name=\"note\" format=\"string\" />\n        <attr name=\"format\" format=\"string\" />\n        <attr name=\"minValue\" format=\"integer\" />\n        <attr name=\"maxValue\" format=\"integer\" />\n        <attr name=\"stepValue\" format=\"integer\" />\n        <attr name=\"showPlus\" format=\"boolean\" />\n        <attr name=\"negativeShift\" format=\"integer\" />\n\n        <attr name=\"dialogEnabled\" format=\"boolean\" />\n        <attr name=\"saveDisplayValue\" format=\"boolean\" />\n        <attr name=\"defaultValueText\" format=\"string\" />\n        <attr name=\"displayDividerValue\" format=\"integer\" />\n\n        <!-- Flag indicating whether the TextView next to the seekbar that shows the current seekbar\n        value will be displayed. If true, the view is VISIBLE; if false, the view will be GONE.\n        By default, this view is GONE. -->\n        <attr name=\"showSeekBarValue\" format=\"boolean\" />\n\n        <attr name=\"android:layout\" />\n        <attr name=\"android:format\" />\n        <attr name=\"android:defaultValue\" />\n        <!--Attribute controlling the amount to increment or decrement the seekbar when the user\n        presses the arrow keys-->\n        <attr name=\"seekBarIncrement\" format=\"integer\" />\n        <!-- Attribute indicating whether the slider within this preference can be adjusted, that is\n        pressing left/right keys when this preference is focused will move the slider accordingly\n        (e.g. inline adjustable preferences). False, if the slider within the preference is\n        read-only and cannot be adjusted. By default, the seekbar is adjustable. -->\n        <attr name=\"adjustable\" format=\"boolean\" />\n        <!-- Flag indicating whether the SeekBarPreference should continuously save the Seekbar\n        value while the Seekbar is being dragged. If true, the SeekBarPreference should continuously\n        save the Seekbar value while it is being dragged. If false, the Seekbar value is only saved\n        when released. By default, this boolean is false. -->\n        <attr name=\"updatesContinuously\" format=\"boolean\" />\n    </declare-styleable>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/bools.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <bool name=\"config_is_n1_supported\">true</bool>\n    <bool name=\"config_is_n28_supported\">true</bool>\n    <bool name=\"config_is_n5_supported\">true</bool>\n    <bool name=\"config_is_n8_supported\">true</bool>\n    <bool name=\"config_dual_nr_supported\">true</bool>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"purple_200\">#FFBB86FC</color>\n    <color name=\"purple_500\">#FF6200EE</color>\n    <color name=\"purple_700\">#FF3700B3</color>\n    <color name=\"teal_200\">#FF03DAC5</color>\n    <color name=\"teal_700\">#FF018786</color>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n\n    <color name=\"miuix_blurdrawable_view_fg_dark\">#80000000</color>\n    <color name=\"miuix_blurdrawable_view_fg_light\">#ccffffff</color>\n\n    <color name=\"light_mode_icon_color_single_tone\">#e6ffffff</color>\n    <color name=\"light_mode_icon_transparent_color_single_tone\">#5cffffff</color>\n    <color name=\"dark_mode_icon_color_single_tone\">#bf000000</color>\n    <color name=\"dark_mode_icon_transparent_color_single_tone\">#4c000000</color>\n\n    <color name=\"ic_launcher_background\">#FC5B8D</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <dimen name=\"header_icon_size\">30dp</dimen>\n\n    <dimen name=\"magic_px_50\">18.179993dp</dimen>\n    <dimen name=\"magic_px_100\">36.75998dp</dimen>\n    <dimen name=\"magic_seek_bar_bubble_shape_bg_solid_radius\">65.44998dp</dimen>\n    <dimen name=\"magic_bubble_seek_bar_slider_to_fill_gap_highlight\">3.5dp</dimen>\n    <dimen name=\"magic_bubble_seek_bar_slider_to_fill_gap_normal\">2.1799927dp</dimen>\n\n    <dimen name=\"magic_text_size_50\">18.179993dp</dimen>\n\n    <dimen name=\"preference_item_child_padding\">25dp</dimen>\n\n    <dimen name=\"preference_margin_vertical\">15dp</dimen>\n    <dimen name=\"preference_border_padding_inside\">5dp</dimen>\n    <dimen name=\"preference_checkbox_title_text_size\">15.272675sp</dimen>\n    <dimen name=\"preference_checkbox_title_margin_top\">7.2726746dp</dimen>\n    <dimen name=\"preference_checkbox_text_max_width\">100dp</dimen>\n    <dimen name=\"preference_checkbox_title_line_height\">20.363586sp</dimen>\n\n    <dimen name=\"preference_checkbox_desc_text_size\">12.090881sp</dimen>\n    <dimen name=\"preference_checkbox_desc_margin_top\">2.9089966dp</dimen>\n    <dimen name=\"preference_checkbox_desc_line_height\">17.454498sp</dimen>\n\n    <dimen name=\"miui_volume_content_width_expanded\">283.625dp</dimen>\n    <dimen name=\"miui_volume_ringer_layout_width_expanded\">@dimen/miui_volume_content_width_expanded</dimen>\n    <dimen name=\"miui_volume_column_width_expanded\">56dp</dimen>\n    <dimen name=\"miui_volume_column_margin_horizontal_expanded\">19.5dp</dimen>\n    <dimen name=\"miui_notification_modal_menu_icon_size\">26dp</dimen>\n    <dimen name=\"miui_notification_modal_menu_icon_bg_size\">50dp</dimen>\n\n</resources>"
  },
  {
    "path": "app/src/main/res/values/integer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <integer name=\"miui_volume_dialog_large_display_orientation\">1</integer>\n\n    <integer name=\"quick_settings_num_columns_3\">3</integer>\n    <integer name=\"quick_settings_num_columns_4\">4</integer>\n    <integer name=\"quick_settings_num_columns_5\">5</integer>\n    <integer name=\"quick_settings_num_columns_6\">6</integer>\n    <integer name=\"quick_settings_num_columns_7\">7</integer>\n\n    <integer name=\"quick_settings_num_rows_2\">2</integer>\n    <integer name=\"quick_settings_num_rows_3\">3</integer>\n    <integer name=\"quick_settings_num_rows_4\">4</integer>\n    <integer name=\"quick_settings_num_rows_5\">5</integer>\n\n    <integer name=\"quick_quick_settings_num_rows_3\">3</integer>\n    <integer name=\"quick_quick_settings_num_rows_4\">4</integer>\n    <integer name=\"quick_quick_settings_num_rows_5\">5</integer>\n    <integer name=\"quick_quick_settings_num_rows_6\">6</integer>\n    <integer name=\"quick_quick_settings_num_rows_7\">7</integer>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"app_name\" translatable=\"false\">Cemiuiler</string>\n    <string name=\"system_ui_status_bar_icon_nfc\" translatable=\"false\">NFC</string>\n    <string name=\"system_ui_status_bar_icon_vpn\" translatable=\"false\">VPN</string>\n    <string name=\"location_simulation_gps\" translatable=\"false\">GPS</string>\n    <string name=\"system_ui_statusbar_network_speed_speedunits\" translatable=\"false\">KMG</string>\n    <string name=\"array_netspeedicons_arrows\" translatable=\"false\">△▽ (▲▼)</string>\n    <string name=\"array_netspeedicons_bullets\" translatable=\"false\">☖ ⛉ ( ☗ ⛊ )</string>\n    <string name=\"array_netspeedicons_arrows_small\" translatable=\"false\">▵ ▿ ( ▴ ▾ )</string>\n    <string name=\"array_netspeedicons_arrows_long1\" translatable=\"false\">↑ ↓</string>\n    <string name=\"array_netspeedicons_arrows_long2\" translatable=\"false\">⇧ ⇩</string>\n    <string name=\"system_ui_display_toast_title\" translatable=\"false\">Toast</string>\n    <string name=\"summary_collapsed_preference_list\" translatable=\"false\">%1$s%2$s</string>\n    <string name=\"networkboost\" translatable=\"false\">NetworkBoost</string>\n\n    <string name=\"home_title_custom_anim_param_1_title\" translatable=\"false\">BREAK_OPEN</string>\n    <string name=\"home_title_custom_anim_param_2_title\" translatable=\"false\">OPEN_FROM_HOME</string>\n    <string name=\"home_title_custom_anim_param_3_title\" translatable=\"false\">OPEN_FROM_RECENTS</string>\n    <string name=\"home_title_custom_anim_param_4_title\" translatable=\"false\">CLOSE_TO_RECENTS</string>\n    <string name=\"home_title_custom_anim_param_5_title\" translatable=\"false\">CLOSE_TO_HOME</string>\n    <string name=\"home_title_custom_anim_param_6_title\" translatable=\"false\">CLOSE_FROM_FEED</string>\n    <string name=\"home_title_custom_anim_param_7_title\" translatable=\"false\">APP_TO_APP</string>\n    <string name=\"home_title_custom_anim_param_8_title\" translatable=\"false\">START_FIRST_TASK</string>\n    <string name=\"home_title_custom_anim_param_RECT_CENTERX_title\" translatable=\"false\">RECT_CENTERX</string>\n    <string name=\"home_title_custom_anim_param_RECT_CENTERY_title\" translatable=\"false\">RECT_CENTERY</string>\n    <string name=\"home_title_custom_anim_param_RECT_WIDTH_title\" translatable=\"false\">RECT_WIDTH</string>\n    <string name=\"home_title_custom_anim_param_RECT_RATIO_title\" translatable=\"false\">RECT_RATIO</string>\n    <string name=\"home_title_custom_anim_param_RADIUS_title\" translatable=\"false\">RADIUS</string>\n    <string name=\"home_title_custom_anim_param_ALPHA_title\" translatable=\"false\">ALPHA</string>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">Make MIUI Great Again!</string>\n\n    <string name=\"new_permission_wifi_state_desc\">add and delete files on device\\'s internal storage</string>\n    <string name=\"new_permission_location_desc\">used to provide services such as latitude and longitude</string>\n    <string name=\"new_cta_agree_desc\">During use, in order to provide you with more features, we may apply for Root/Su permission from you. You can go to Permission Management at any time to adjust the authorization status of all permissions, and please go to your Root/Su manager for Root/Su permissions.</string>\n    <string name=\"new_cta_app_main_purpose\">modify system applications</string>\n    <string name=\"new_cta_app_all_purpose_title\">Welcome to Cemiuiler, this application runs on the Xposed framework, you can use this application to hijack and modify other supported applications to achieve MIUI enhancements. During use, in order to provide you with more features, we may apply for Root/Su permission from you. You can go to your Root/Su manager for Root/Su permissions.</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">English</string>\n    <string name=\"translator\">Ling Qiqi</string>\n    <string name=\"translator_url\">https://github.com/mu7220</string>\n    <string name=\"settings\">Settings</string>\n    <string name=\"about\">About</string>\n    <string name=\"about_use\">Quote</string>\n    <string name=\"about_use_desc\">Cemiuiler uses some or all of the following open source projects, thanks to the developers of these projects for their support (in no particular order)</string>\n    <string name=\"about_contributer\">Contributor</string>\n    <string name=\"about_contributer_desc\">Thanks to the following contributors for their help in the development of Cemiuiler (in no particular order)</string>\n    <string name=\"about_donation\">Sponsor</string>\n    <string name=\"about_donation_desc\">You can support us by donating here</string>\n    <string name=\"about_privacy\">Privacy Policy</string>\n    <string name=\"about_protocol\">User Agreement</string>\n    <string name=\"settings_data_title\">Backup and Restore</string>\n    <string name=\"settings_bug_title\">Troubleshooting</string>\n    <string name=\"settings_debug_title\">Debug</string>\n    <string name=\"settings_hide_app_icon\">Desktop Icons</string>\n    <string name=\"settings_icon\">Settings Icons</string>\n    <string name=\"settings_icon_desc\">Set the location of the module entry in the system settings</string>\n    <string name=\"settings_icon_disable\">Disable</string>\n    <string name=\"settings_icon_top\">Top</string>\n    <string name=\"settings_icon_medium\">Middle</string>\n    <string name=\"settings_icon_down\">Bottom</string>\n    <string name=\"settings_icon_mode\">Icon style</string>\n    <string name=\"settings_icon_miui_14\">Rounded rectangle style</string>\n    <string name=\"settings_icon_miui_13\">Background cutout style</string>\n    <string name=\"settings_reboot\">Restart the target app</string>\n    <string name=\"settings_back\">Backup module settings</string>\n    <string name=\"settings_rest\">Restore module settings</string>\n    <string name=\"settings_reset\">Reset module settings</string>\n    <string name=\"reset_title\">Are you sure you want to reset?</string>\n    <string name=\"reset_desc\">After resetting the module configuration all its data will be deleted!</string>\n    <string name=\"reset_okay\">The module configuration has been reset</string>\n    <string name=\"backup_success\">Backup success</string>\n    <string name=\"backup_failed\">Backup failed</string>\n    <string name=\"rest_title\">Recover</string>\n    <string name=\"rest_success\">Recovery succeeded</string>\n    <string name=\"rest_failed\">Recovery failed</string>\n    <string name=\"backup_ask\">Do you want to write backups?</string>\n    <string name=\"backup_permission\">Now you have to manually enable permissions for this option.</string>\n    <string name=\"rest_ask\">Do you want to recover your backup?</string>\n    <string name=\"rest_permission\">Now you have to manually enable permissions for this option.</string>\n    <string name=\"disable_detailed_log\">Disable detailed log</string>\n    <string name=\"disable_detailed_log_desc\">Reboot to apply</string>\n    <string name=\"settings_safe_mode\">Safe mode</string>\n    <string name=\"settings_safe_mode_desc\">Stop module function</string>\n    <string name=\"about_developer_title\">Developer</string>\n    <string name=\"about_translator_title\">Translator</string>\n    <string name=\"about_chat_title\">Discussion</string>\n    <string name=\"about_other_title\">Other</string>\n    <string name=\"about_qq_group\">QQ Group</string>\n    <string name=\"about_qq_channel\">QQ Channel</string>\n    <string name=\"about_tg_group\">Telegram Group</string>\n    <string name=\"about_tg_channel\">Telegram Channel</string>\n    <string name=\"about_github\">Source Code</string>\n    <string name=\"about_github_desc\">This project is open source based on the AGPL-3.0 license</string>\n    <string name=\"about_offical\">Official website</string>\n    <string name=\"about_crwd\">Crowdin</string>\n    <string name=\"about_crwd_desc\">Help us translate Cemiuiler into you language</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">Reboot </string>\n    <string name=\"restart_app_desc\">Are you sure you want to restart now %1$s?</string>\n    <string name=\"tip\">Tip</string>\n    <string name=\"hook_failed\">The module is not activated yet.\\nPlease check whether the Xposed manager is enabled. If so, please restart or re-optimize the module.</string>\n    <string name=\"kill_failed\">Failed to end process, please check if Cemiuiler has been granted Root/Su permissions?</string>\n    <string name=\"pid_failed\">The target application is not running and does not need to be restarted.</string>\n    <string name=\"reboot_failed\">Reboot failed, please check if Cemiuiler is granted Root/Su permission?</string>\n    <string name=\"expand_button_title\">High level</string>\n    <string name=\"not_set\">Not set</string>\n    <string name=\"copy\">Copy</string>\n    <string name=\"more\">More</string>\n    <string name=\"clearable_edittext_clear_description\">Clear up</string>\n    <string name=\"preference_on\">Turned on</string>\n    <string name=\"preference_off\">Turned off</string>\n    <string name=\"preference_copied\">Copied %1$s to clipboard.</string>\n    <string name=\"preference_default_value_text\">Default</string>\n    <string name=\"preference_dialog_color_picker_default_title\">Choose the color</string>\n    <string name=\"preference_dialog_color_picker_presets\">Preset color</string>\n    <string name=\"preference_dialog_color_picker_custom\">Custom color</string>\n    <string name=\"preference_dialog_color_picker_transparency\">Transparency</string>\n    <string name=\"preference_dialog_color_picker_select\">Confirm selection</string>\n    <string name=\"abc_action_bar_home_description\">Back to the homepage</string>\n    <string name=\"abc_action_bar_up_description\">Back to the previous level</string>\n    <string name=\"actionbar_button_up_description\">Back</string>\n    <string name=\"appcompat_action_mode_select_all\">Select all</string>\n    <string name=\"appcompat_cancel_description\">Cancel</string>\n    <string name=\"appcompat_confirm_description\">Ok</string>\n    <string name=\"appcompat_select_all_description\">Select all</string>\n    <string name=\"appcompat_deselect_all_description\">Unselect all</string>\n    <string name=\"appcompat_delete_description\">Delete</string>\n    <string name=\"appcompat_search_action_mode_cancel\">Cancel</string>\n    <string name=\"appcompat_search_input_description\">Search</string>\n    <string name=\"appcompat_actionbar_immersion_button_more_description\">More</string>\n    <string name=\"appcompat_action_mode_inverse\">Inverse</string>\n    <string name=\"color_picker_alpha_text_transparent\">Opacity</string>\n    <string name=\"color_picker_tab_grid\">Grid</string>\n    <string name=\"color_picker_tab_slider\">Slider</string>\n    <string name=\"color_picker_view_page_text_hue\">Hue</string>\n    <string name=\"color_picker_view_page_text_lightness\">Lightness</string>\n    <string name=\"color_picker_view_page_text_saturation\">Saturation</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">Top margin</string>\n    <string name=\"bottom_margin\">Bottom margin</string>\n    <string name=\"left_margin\">Left margin</string>\n    <string name=\"right_margin\">Right margin</string>\n    <string name=\"vertical_offset\">Up and down offset</string>\n    <string name=\"horizontal_alignment\">Horizontal alignment</string>\n    <string name=\"feature\">Function</string>\n    <string name=\"recommend\">Recommend</string>\n    <string name=\"editor\">Editor</string>\n    <string name=\"record\">Record</string>\n    <string name=\"shot\">Shot</string>\n    <string name=\"portrait\">Portrait</string>\n    <string name=\"camera_pro\">Pro</string>\n    <string name=\"enable\">Activate</string>\n    <string name=\"custom_enable\">Custom enable</string>\n    <string name=\"search\">Search</string>\n    <string name=\"floating_window\">Freeform</string>\n    <string name=\"save_to_screen_title\">Specification save location</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">Default</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">Expand</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">Fix content width</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">To prevent horizontal jitter</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">Bold</string>\n    <!--Multi-list Array-->\n    <string name=\"array_close\">Close</string>\n    <string name=\"array_default\">Default</string>\n    <string name=\"array_align_left\">Left</string>\n    <string name=\"array_align_right\">Right</string>\n    <string name=\"array_align_center\">Centered</string>\n    <string name=\"array_netspeedicons_no\">No icons</string>\n    <string name=\"array_bold\">Bold</string>\n    <string name=\"array_theme\">Follow the subject</string>\n    <string name=\"array_clock_center\">Clock center</string>\n    <string name=\"array_clock_right\">Clock right</string>\n    <string name=\"array_clock_center_and_icon_left\">Clock center &amp; Icon left</string>\n    <string name=\"array_clock_default\">Default</string>\n    <string name=\"array_clock_geek\">Geek</string>\n    <string name=\"array_battery_both\">Both</string>\n    <string name=\"array_battery_power\">Power only</string>\n    <string name=\"array_battery_current\">Current only</string>\n    <string name=\"array_battery_temp\">Battery temperature</string>\n    <string name=\"array_cpu_temp\">CPU temperature</string>\n    <string name=\"array_global_actions_none\">No action</string>\n    <string name=\"array_global_actions_notif\">Open the notification center</string>\n    <string name=\"array_global_actions_eqs\">Expand the quick settings panel</string>\n    <string name=\"array_global_actions_lock\">Lock screen</string>\n    <string name=\"array_global_actions_sleep\">Close screen</string>\n    <string name=\"array_global_actions_screenshot\">Screen Shot</string>\n    <string name=\"array_global_actions_menu\">Open Menu</string>\n    <string name=\"array_global_actions_recents\">Open Recent</string>\n    <string name=\"array_global_actions_volume\">Open volume dialog</string>\n    <string name=\"array_global_actions_volume_up\">Volume Up</string>\n    <string name=\"array_global_actions_volume_down\">Volume Down</string>\n    <string name=\"array_global_actions_launch\">Launch app</string>\n    <string name=\"array_global_actions_launch_choose\">Select app</string>\n    <string name=\"array_global_actions_shortcut\">Launch shortcut</string>\n    <string name=\"array_global_actions_activity\">Launch activity</string>\n    <string name=\"array_global_actions_toggle\">Toggle function</string>\n    <string name=\"array_global_actions_back\">Switch to previous app</string>\n    <string name=\"array_global_actions_forceclose\">Force close current app</string>\n    <string name=\"array_global_actions_powermenu\">Open the power menu</string>\n    <string name=\"array_global_actions_powermenu_short\">Power menu</string>\n    <string name=\"array_global_actions_clear_memory\">Clear memory</string>\n    <string name=\"array_global_actions_invert_colors\">Color inversion</string>\n    <string name=\"array_global_actions_switchkeyboard\">Switch Keyboard</string>\n    <string name=\"array_global_actions_goback\">Back</string>\n    <string name=\"array_global_actions_onehanded_left\">One-Handed Mode (Left)</string>\n    <string name=\"array_global_actions_onehanded_right\">One-Handed Mode (Right)</string>\n    <string name=\"array_global_actions_scrolltotop\">Scroll to top</string>\n    <string name=\"array_global_actions_expandsidebar\">Show sidebar</string>\n    <string name=\"array_global_actions_floatingwindow\">Floating window</string>\n    <string name=\"array_global_actions_pinningwindow\">Pinning window</string>\n    <string name=\"array_align_top\">Top</string>\n    <string name=\"array_align_bottom\">Bottom</string>\n    <string name=\"array_discrete\">Separate</string>\n    <string name=\"array_gradual\">Slow</string>\n    <string name=\"array_rainbow\">Rainbow</string>\n    <string name=\"various_install_app_info_version_name\">Version name</string>\n    <string name=\"various_install_app_info_version_code\">Version code</string>\n    <string name=\"various_install_app_info_sdk\">Support SDK</string>\n    <string name=\"various_install_app_size\">Size</string>\n    <string name=\"charge_animation_entries_disable\">Disable</string>\n    <string name=\"charge_animation_entries_aura\">Aura</string>\n    <string name=\"charge_animation_entries_stream\">Streamer</string>\n    <string name=\"charge_animation_entries_alpha\">Rhythm</string>\n    <string name=\"status_bar_icon_mode_default\">Default</string>\n    <string name=\"status_bar_icon_mode_on\">Always show</string>\n    <string name=\"status_bar_icon_mode_off\">Always hidden</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">Hide only when not connected</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">Show only before ringing</string>\n    <string name=\"seek_points_roll\">Show only when swiping the screen</string>\n    <string name=\"seek_points_edit\">Shown only in edit mode</string>\n    <string name=\"home_mode_day\">Light mode</string>\n    <string name=\"home_mode_dark\">Dark mode</string>\n    <string name=\"dialog_gravity_medium\">Centered</string>\n    <string name=\"dialog_gravity_down\">Bottom</string>\n    <string name=\"collapse_miui_title_off\">Fold</string>\n    <string name=\"collapse_miui_title_on\">Expand</string>\n    <string name=\"collapse_miui_title_off_always\">Always folded</string>\n    <string name=\"collapse_miui_title_on_always\">Always expand</string>\n    <string name=\"link_open_mode_default\">System default</string>\n    <string name=\"link_open_mode_mi\">Xiaomi browser</string>\n    <string name=\"app_sort_running\">Default sort</string>\n    <string name=\"app_sort_name\">App name</string>\n    <string name=\"app_sort_frequency\">Usage frequency</string>\n    <string name=\"app_sort_storage\">Used storage</string>\n    <string name=\"app_sort_install\">Installation time</string>\n    <string name=\"array_bluetooth_tile_style_3rows\">Three big tiles</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\">One big and two small tiles</string>\n    <string name=\"array_pa_blur_official\">Official comes with blur</string>\n    <string name=\"array_bpa_blur_customize\">Custom background blur</string>\n    <string name=\"control_center_sunshine_mode_default\">Close</string>\n    <string name=\"control_center_sunshine_mode_one\">System default mode</string>\n    <string name=\"control_center_sunshine_mode_two\">Force maximum brightness</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">System Framework</string>\n    <string name=\"system_framework_volume_title\">Volume</string>\n    <string name=\"system_framework_other_title\">Other</string>\n    <string name=\"system_framework_display_title\">Display</string>\n    <string name=\"system_framework_phone_title\">Network</string>\n    <string name=\"system_framework_bubble_title\">Bubble notification</string>\n    <string name=\"system_framework_freeform_count\">Multiple freeform</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">Force small freeform to be allowed</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">Ignore the system blacklist and software ban freeform</string>\n    <string name=\"system_framework_freeform_sticky\">Remember state</string>\n    <string name=\"system_framework_freeform_bubble\">Bubble freeform</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">Turn all freeform into mini freeform</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">Turn all freeform into mini freeform in recent tasks\\nThis feature is an experimental feature with high instability</string>\n    <string name=\"system_framework_freeform_jump\">Open with freeform when jump to another app</string>\n    <string name=\"system_framework_freeform_title_desc\">In the following scenarios, when you need to jump to other apps, you will use the freeform to open</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">Only supports links</string>\n    <string name=\"system_framework_default_volume_stream\">Adjust volume by default</string>\n    <string name=\"system_framework_volume_first_press\">Instant volume adjustment</string>\n    <string name=\"system_framework_volume_separate_control\">Independent volume control</string>\n    <string name=\"system_framework_volume_disable_safe\">Remove high volume safety restrictions</string>\n    <string name=\"system_framework_volume_separate_slider\">Notification volume slider</string>\n    <string name=\"system_framework_volume_media_steps\">Media volume level</string>\n    <string name=\"system_framework_volume_media_steps_desc\">It may cause the scrolling of the volume bar to freeze or the Bluetooth volume to be abnormal</string>\n    <string name=\"system_framework_volume_steps\">Volume level multiplier</string>\n    <string name=\"system_ui_display_cutout_title\">Display Cutout</string>\n    <string name=\"system_ui_display_hide_cutout\">Hide Display Cutout</string>\n    <string name=\"system_ui_display_brightness_title\">Brightness</string>\n    <string name=\"system_ui_display_auto_brightness\">Auto brightness range</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">Define minimum and maximum values for automatic brightness</string>\n    <string name=\"system_ui_display_min_brightness\">Auto Brightness Min</string>\n    <string name=\"system_ui_display_max_brightness\">Auto Brightness Max</string>\n    <string name=\"system_ui_display_toast_times_title\">Display duration adjustment</string>\n    <string name=\"system_ui_display_toast_times_desc\">Modify the display duration of Toast, the display duration is always greater than 1 second</string>\n    <string name=\"system_framework_phone_network_title\">Network settings</string>\n    <string name=\"phone_double_5g_nr\">Double card use 5G (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">Main and secondary SIM-card enable 5G at the same time (The secondary SIM-card only support NSA)</string>\n    <string name=\"phone_double_5g_sa\">Double card use SA (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">Experimental features. Make the secondary SIM-card support SA</string>\n    <string name=\"system_framework_phone_band_title\">Band settings</string>\n    <string name=\"phone_n1\">N1 Band</string>\n    <string name=\"phone_n1_desc\">Support N1 Band (NR)</string>\n    <string name=\"phone_n28\">N28 Band</string>\n    <string name=\"phone_n28_desc\">Support N28 Band (NR)</string>\n    <string name=\"phone_n5_n8\">N5/N8 Band</string>\n    <string name=\"phone_n5_n8_desc\">Enter *#*#65686633#*#* on the dial interface to Support N5/N8 Band. If it shows \\\"enable N5 and N8 Mode\\\", the feature will enable successfully.</string>\n    <string name=\"system_framework_screen_all_rotations\">Screen rotation</string>\n    <string name=\"system_framework_allow_untrusted_touch\">Allow untrusted touch</string>\n    <string name=\"system_framework_allow_uninstall\">Allow uninstall some preinstall apps</string>\n    <string name=\"system_framework_allow_uninstall_desc\">This feature is dangerous</string>\n    <string name=\"system_framework_disable_app_link_verify\">Disable app link verify</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">Revert to opening supported apps directly when opening links without enabling supported links in app settings</string>\n    <string name=\"system_framework_clean_share_menu\">Clean up share menu</string>\n    <string name=\"system_framework_clean_share_apps\">Selected applications</string>\n    <string name=\"system_framework_clean_share_apps_desc\">The selected app will not appear in the share menu</string>\n    <string name=\"system_framework_clean_open_menu\">Clean up the open with menu</string>\n    <string name=\"system_framework_clean_open_apps\">Selected applications</string>\n    <string name=\"system_framework_clean_open_apps_desc\">The selected app will not appear in the open with menu</string>\n    <string name=\"system_other_flag_secure\">Allow screenshot</string>\n    <string name=\"system_other_flag_secure_desc\">Allows screenshots and screen recordings of any app</string>\n    <string name=\"system_other_delete_on_post_notification\">Remove the upper display notification</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">Remove \\\"This app is displaying on top of other apps on screen\\\" notification</string>\n    <string name=\"system_framework_share_menu_test\">Share menu test</string>\n    <string name=\"system_framework_open_with_menu_test\">Open with menu test</string>\n    <string name=\"system_framework_other_use_original_animation\">Transition animations use native styles</string>\n    <string name=\"system_framework_other_speed_install\">Speed Install</string>\n    <string name=\"system_framework_other_speed_install_desc\">Install to running memory to speed up installation</string>\n    <string name=\"system_framework_other_thermal_brightness\">Disable automatic screen brightness reduction</string>\n    <string name=\"system_framework_other_thermal_brightness_more\">Only automatically reduces screen brightness not caused by temperature control</string>\n    <string name=\"system_framework_other_disable_cleaner\">Disable kill background apps</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">Experimental features, may cause running memory usage abnormally</string>\n    <string name=\"system_framework_disable_72h_verify\">Disable lock screen verify when per 72 hours</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">Package Manager Service</string>\n    <string name=\"system_framework_core_patch_downgr\">Allow downgrade</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">Allow downgrade applications</string>\n    <string name=\"system_framework_core_patch_auth_creak\">Disable digest verify</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">Allows install apps after modify file in apk (ignore invalid digest error)</string>\n    <string name=\"system_framework_disable_integrity\">Disable system integrity checks</string>\n    <string name=\"system_framework_disable_integrity_desc\">Automatic recovery of tampered content is prohibited. When the \\\"Disable digest verify\\\" function is turned on, it will be enabled by default.\\nOnly supports Android 13 and above</string>\n    <string name=\"system_framework_core_patch_digest_creak\">Disable compare signatures</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">Allow re-install app with different signatures</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">Use installed signatures</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">This feature is extremely dangerous and should only be enabled when absolutely necessary</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">Enhanced mode</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">Pass some validation in the application</string>\n    <!--Browser-->\n    <string name=\"browser\">Browser</string>\n    <string name=\"browser_debug_mode\">Unlock developer options</string>\n    <string name=\"browser_debug_mode_desc\">17.5.xxxxx and above are not supported</string>\n    <!--Camera-->\n    <string name=\"camera\">Camera</string>\n    <string name=\"camera_features_unlock_aiwatermark\">Unlock AI watermark</string>\n    <string name=\"camera_features_unlock_ambilight\">Unlock Long exposure</string>\n    <string name=\"camera_features_unlock_clone\">Unlock Clone mode</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">Unlock Pocket mirror</string>\n    <string name=\"camera_features_unlock_doc\">Unlock Document mode</string>\n    <string name=\"camera_features_unlock_idcard\">Unlock ID Card mode</string>\n    <string name=\"camera_features_unlock_dualcam\">Unlock Dual camera</string>\n    <string name=\"camera_features_unlock_duration\">Unlock Duration</string>\n    <string name=\"camera_features_unlock_milive\">Unlock Short videos</string>\n    <string name=\"camera_features_unlock_moon\">Unlock Super-moon mode</string>\n    <string name=\"camera_features_unlock_pano\">Unlock Panorama mode</string>\n    <string name=\"camera_features_unlock_pixel\">Unlock Pixel mode</string>\n    <string name=\"camera_features_unlock_portrait\">Unlock Portrait mode</string>\n    <string name=\"camera_features_unlock_slow\">Unlock Slow motion</string>\n    <string name=\"camera_features_unlock_videosky\">Unlock Video-sky</string>\n    <string name=\"camera_features_unlock_vlog\">Unlock Vlog</string>\n    <string name=\"camera_features_unlock_vlog_pro\">Unlock Vlog Pro</string>\n    <string name=\"camera_features_unlock_film\">Unlock Film camera</string>\n    <string name=\"camera_features_unlock_film_delay\">Unlock Long-exp</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">Unlock Dolly zoom</string>\n    <string name=\"camera_features_unlock_film_dream\">Unlock Dream</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">Unlock Slow shutter</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">Unlock Time back-flow</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">Unlock Time freeze</string>\n    <string name=\"camera_shot_hand_gesture\">Unlock Palm shutter</string>\n    <string name=\"camera_shot_color_enhance\">Unlock Color enhance</string>\n    <string name=\"camera_shot_makeup\">Unlock Makeup</string>\n    <string name=\"camera_shot_makeup_desc\">Takes effect only when using the front camera</string>\n    <string name=\"camera_record_60fps\">Unlock 60FPS</string>\n    <string name=\"camera_record_60fps_desc\">Not available in some qualities, please make sure that your device was supported</string>\n    <string name=\"camera_record_120fps\">Unlock 120FPS</string>\n    <string name=\"camera_record_120fps_desc\">Only support when 4K qualities, please make sure that your device was supported</string>\n    <string name=\"camera_record_audio_zoom\">Unlock Audio zoom</string>\n    <string name=\"camera_record_hdr\">Unlock HDR</string>\n    <string name=\"camera_record_ai\">Unlock AI enhance</string>\n    <string name=\"camera_portrait_new_beauty\">Unlock New beauty</string>\n    <string name=\"camera_portrait_new_beauty_desc\">Takes effect only when using the front camera</string>\n    <string name=\"camera_portrait_cvlens\">Unlock Master-lens</string>\n    <string name=\"camera_portrait_cvlens_desc\">Cannot work fine on some device</string>\n    <string name=\"camera_pro_raw\">Unlock RAW</string>\n    <string name=\"camera_pro_log\">Unlock LOG</string>\n    <string name=\"camera_settings_heic\">Unlock HEIF</string>\n    <string name=\"camera_settings_track_focus\">Unlock Motion track focus</string>\n    <string name=\"camera_settings_predictive\">Unlock Motion capture</string>\n    <string name=\"camera_settings_nevus\">Unlock Remove moles</string>\n    <string name=\"camera_settings_men_makeup\">Unlock Adjust makeup effects for men</string>\n    <string name=\"camera_settings_lab_options\">Enable Lab options</string>\n    <string name=\"camera_settings_track_eyes\">Unlock Track eyes</string>\n    <!--Clock-->\n    <string name=\"clock\">Clock</string>\n    <string name=\"clock_enable_hour_glass\">Unlock the clock hourglass animation</string>\n    <string name=\"clock_enable_hour_glass_desc\">Version 13.65.0 and above are not supported</string>\n    <!--File Manager-->\n    <string name=\"fileexplorer\">File Manager</string>\n    <string name=\"file_explorer_can_selectable\">File Explorer Can Selectable</string>\n    <string name=\"file_explorer_is_single_line\">File Explorer Is Single Line</string>\n    <!--Phone-->\n    <string name=\"incallui\">Phone</string>\n    <string name=\"incallui_hide_crbt\">Hide personalized colorful ring back tone</string>\n    <string name=\"incallui_answer_in_head_up\">Answer in head up</string>\n    <!--Message-->\n    <string name=\"mms\">Message</string>\n    <string name=\"mms_disable_ad\">Disable ads</string>\n    <string name=\"mms_disable_ad_desc\">Remove shortcuts at the bottom of the screen and promotions below SMS content</string>\n    <!--Phone Service-->\n    <string name=\"phone\">Phone Service</string>\n    <string name=\"phone_smart_dual_sim\">Unlock Smart dual SIM</string>\n    <string name=\"phone_vice_slot_volte\">Unlock Vice slot volte</string>\n    <string name=\"phone_vice_slot_volte_desc\">Use mobile data during VoLTE calls on the secondary SIM</string>\n    <!--Download management program-->\n    <string name=\"downloads\">Download management program</string>\n    <string name=\"various_fuck_xlDownload\">Block creation of .xlDownload folder</string>\n    <string name=\"various_fuck_xlDownload_desc\">Prevent download manager from generating .xlDownload folder on root of internal storage</string>\n    <!--System UI-->\n    <string name=\"system_ui\">System UI</string>\n    <string name=\"system_ui_lockscreen_title\">Lock screen</string>\n    <string name=\"system_ui_lockscreen_safe_title\">Security</string>\n    <string name=\"system_ui_lockscreen_ui_title\">UI</string>\n    <string name=\"system_ui_lockscreen_information_title\">Information</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">Random PIN</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">Randomize PIN keypad order</string>\n    <string name=\"system_ui_lock_screen_password_free\">No need to enter password when booting</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">It will take effect only if the device is not enabled for encryption</string>\n    <string name=\"system_ui_lock_screen_password_free_tip\">The current device is encrypted, this function is not available</string>\n    <string name=\"system_ui_lock_screen_default_theme\">Support default theme only</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">Show charging information at the bottom of the lock screen</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">Show detailed current</string>\n    <string name=\"system_ui_lock_screen_show_battery_temperature\">Show battery temperature</string>\n    <string name=\"system_ui_lock_screen_show_spacing\">Display refresh interval</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">Hide camera</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">Hide smart screen</string>\n    <string name=\"system_ui_lock_screen_current\">Current</string>\n    <string name=\"system_ui_lock_screen_show_second\">Clock show second</string>\n    <string name=\"system_ui_lock_screen_blur_button\">Blur camera and smart screen button</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">Force clock use system fonts</string>\n    <string name=\"system_ui_lock_screen_double_lock\">Double tap the lock screen</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">Double-tap an empty location to lock the screen</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">Hide zen mode notification</string>\n    <string name=\"system_ui_lock_screen_unlock_tip_title\">Hide the unlock prompt at the bottom of the screen</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">Remove status bar from lock screen</string>\n    <string name=\"system_ui_navigation_title\">Navigation</string>\n    <string name=\"system_ui_navigation_handle_title\">Handle line</string>\n    <string name=\"system_ui_hide_navigation_bar\">Hide Navigation Bar</string>\n    <string name=\"system_ui_hide_navigation_bar_more\">Please restart both the Miui Home and SystemUi scopes</string>\n    <string name=\"system_ui_navigation_handle_custom\">Custom handle line</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">Height</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">Portrait width</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">Landscape width</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">Thickness</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">Color when light-mode</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">Color when dark-mode</string>\n    <string name=\"system_ui_navigation_custom\">Custom navigation</string>\n    <string name=\"system_ui_navigation_custom_height\">Navigation height</string>\n    <string name=\"system_ui_navigation_custom_height_land\">Landscape navigation height</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">Navigation frame height</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">Landscape navigation frame height</string>\n    <string name=\"system_ui_statusbar_title\">Status Bar</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">Icon management</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">Network speed indicator management</string>\n    <string name=\"system_ui_statusbar_clock_title\">Clock indicator management</string>\n    <string name=\"system_ui_statusbar_device_title\">Hardware indicators</string>\n    <string name=\"system_ui_statusbar_layout_title\">Layout</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_title\">Compatibility mode</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_desc\">Forcibly enable the full screen layout for all special-shaped screens</string>\n    <string name=\"system_ui_statusbar_layout_mode_title\">Layout mode</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">Double tap to sleep</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">Double row signal bar</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">Icon styles</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">Icon scaling</string>\n    <string name=\"system_ui_status_bar_mobile_type_single\">Mobile network type icon display separately</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">Display at left of signal</string>\n    <string name=\"system_ui_status_bar_mobile_type_only_show_network\">Show only network cards</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">Hide mobile network activity indicators</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">Custom text</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">Font size</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">Swap icon and percentage of battery</string>\n    <string name=\"system_ui_status_bar_battery_style_font_size\">Battery percentage font size</string>\n    <string name=\"system_ui_status_bar_battery_style_font_mark_size\">Battery percentage symbol font size</string>\n    <string name=\"system_ui_status_bar_battery_style_vertical_offset\">Up and down offset of battery percentage symbol</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wi-Fi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">Bluetooth</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">Mobile network</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">Location</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">Status Icon</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">Notification Icon</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">Battery</string>\n    <string name=\"system_ui_statusbar_iconmanage_call_title\">Call</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">The left side of the icon shows</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">The right side of the icon shows</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">Slave Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Wi-Fi standard</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">Hotspot Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">Network Activity Indicator</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">Bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">Bluetooth battery</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">New HD icon</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">Small HD icon</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">Big HD icon</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">No SIM card icon</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">SIM card 1 signal icon</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">SIM card 2 signal icon</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">Display logic</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">Big Network Type Icon</string>\n    <string name=\"system_ui_status_bar_icon_location\">Location</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">Alarm Clock</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">Show alarm icon only before alarm goes off</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d hours</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">Airplane mode</string>\n    <string name=\"system_ui_status_bar_icon_vowifi\">Hide VoWiFi icon</string>\n    <string name=\"system_ui_status_bar_icon_headset\">Headset</string>\n    <string name=\"system_ui_status_bar_icon_volume\">Volume</string>\n    <string name=\"system_ui_status_bar_icon_data_saver\">Data Saver</string>\n    <string name=\"system_ui_status_bar_icon_zen\">Zen</string>\n    <string name=\"system_ui_status_bar_icon_stealth\">Hide incognito mode icon</string>\n    <string name=\"system_ui_status_bar_icon_mute\">Hide muted mic icon</string>\n    <string name=\"system_ui_status_bar_icon_speakerphone\">Hide speakerphone icon</string>\n    <string name=\"system_ui_status_bar_icon_call_record\">Hide recording icon</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">Maximum number of notification points</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">Maximum number of notification icons</string>\n    <string name=\"system_ui_status_bar_battery_percent\">Hide battery percentage</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">Hide battery percentage sign</string>\n    <string name=\"system_ui_status_bar_battery_charging\">Hide charging indicator</string>\n    <string name=\"system_ui_status_bar_battery_icon\">Hide battery icon</string>\n    <string name=\"system_ui_status_bar_battery_style_title\">Battery customization</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">Battery indicator</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">Mobile Network</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">Swap Wi-Fi and Mobile Network</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">Internet speed</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">Sound scene</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">Force to use new HD icon</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">Only supports some system versions</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">Network speed separator</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">The vertical line between time and internet speed is not displayed on devices with centered camera</string>\n    <string name=\"system_ui_status_bar_hide_icon\">Hide the status bar when taking a screenshot</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">Mobile network type icon</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">Network speed update interval</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">Network speed font size</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">Value and unit are displayed in dual rows</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">Show up and down network speed</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">Upload and download speed are displayed in dual rows</string>\n    <string name=\"system_ui_statusbar_network_speed_swap_places\">Swap uplink and downlink speeds and icon positions</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">Show incoming and outgoing network speeds separately</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">Hide slow network speed</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_all\">Hide when both uplink and downlink are slow</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">Indicator is no longer shown when network speed is low</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">Slow network speed level</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">Network speed values below this level are considered slow and a different indicator icon will be displayed (only some icons)</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">Hide Byte per second suffix (*b/s)</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">Indicator icon</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">Enable custom</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_ms\">%d ms</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_s\">%d s</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_m\">%d m</string>\n    <string name=\"system_ui_statusbar_network_speed_format_KBs\">%d KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_oneKBs\">1 KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_Bs\">B/s</string>\n    <string name=\"system_ui_statusbar_network_speed_lux\">%s lux</string>\n    <string name=\"system_ui_statusbar_clock_mode\">Custom clock mode</string>\n    <string name=\"system_ui_statusbar_clock_editor\">Clock format</string>\n    <string name=\"system_ui_statusbar_clock_year\">Show year</string>\n    <string name=\"system_ui_statusbar_clock_month\">Show month</string>\n    <string name=\"system_ui_statusbar_clock_date\">Show day</string>\n    <string name=\"system_ui_statusbar_clock_week\">Show week</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">Show double hour</string>\n    <string name=\"system_ui_statusbar_clock_period\">Show clock period</string>\n    <string name=\"system_ui_statusbar_clock_second\">Show seconds</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">Hide space</string>\n    <string name=\"system_ui_statusbar_clock_double\">Show double</string>\n    <string name=\"system_ui_statusbar_clock_double_mode_title\">Double row alignment</string>\n    <string name=\"system_ui_statusbar_clock_desc\">Clock format example</string>\n    <string name=\"system_ui_statusbar_clock_size\">Clock size</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">Double row clock size</string>\n    <string name=\"system_ui_statusbar_indicator_battery_title\">Power related</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">Temperature related</string>\n    <string name=\"system_ui_statusbar_battery_size\">Font size</string>\n    <string name=\"system_ui_statusbar_battery_show\">Show contents</string>\n    <string name=\"system_ui_statusbar_temp_decimal_places\">Hide decimal places</string>\n    <string name=\"system_ui_statusbar_battery_disable\">Hide units</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">Show on the right</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">The current always shows a positive value</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">Single row display</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">Reverse order</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">Show only when charging</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">Status update interval</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">Fix CPU temperature</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">Enter number of /sys/devices/virtual/thermal/thermal_zone*</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">Centered</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">Rounded corners</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">Limit visibility</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">Align vertically</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">Color</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">Full battery color</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">Low battery color</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">Power saving mode color</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">Charging color</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">Height</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">Horizontal margin</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">Transparency</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">Shine</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">Low battery level</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">Test</string>\n    <string name=\"system_ui_controlcenter_title\">Control center</string>\n    <string name=\"system_ui_controlcenter_card_title\">Card</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">Magnet</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">Notification</string>\n    <string name=\"system_control_center_qs_detail_bg\">Card background transparency</string>\n    <string name=\"system_control_center_5g_tile\">5G network switch</string>\n    <string name=\"system_control_center_5g_toggle_label\">5G Network</string>\n    <string name=\"system_control_center_sunshine_mode\">Sunshine Mode</string>\n    <string name=\"system_ui_control_auto_close\">Magnetic tiles automatically retract</string>\n    <string name=\"system_ui_control_auto_close_more\">After opening, clicking on the status bar tile will automatically retract the status bar</string>\n    <string name=\"system_control_center_qs_tile_label\">Remove title</string>\n    <string name=\"system_control_center_qs_rows\">Rows</string>\n    <string name=\"system_control_center_qs_rows_format\">%d lines</string>\n    <string name=\"system_control_center_qs_rows_horizontal\">Rows (Landscape)</string>\n    <string name=\"system_control_center_qs_columns\">Columns</string>\n    <string name=\"system_control_center_qs_columns_format\">%d List</string>\n    <string name=\"system_control_center_qs_columns_horizontal\">Columns (Landscape)</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">MiPlay Entry</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">Mi smart hub entry</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">Device control entry</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">Control Detail Background blur value</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">Notification Blur Model</string>\n    <string name=\"system_ui_control_center_notification_blur_fix\">Notification optimization</string>\n    <string name=\"system_ui_control_center_notification_blur_fix_desc\">Experimental function, only available for Android 13 and above models. After enabling, notification blur in some areas will be optimized\\nThere may be a problem of system interface crash on some models.</string>\n    <string name=\"system_ui_control_center_blur_radius\">Blur Radius</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">Without dropdown notification</string>\n    <string name=\"system_ui_control_center_corner_radius\">Corner Radius</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">The default theme does not need to be adjusted</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">Blur Background value</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">Default Background value</string>\n    <string name=\"system_ui_control_center_fix_media_control_panel\">Fix media control panel</string>\n    <string name=\"system_ui_control_center_compact_notice\">Compact notifications</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">Reduce notifications\\' vertical paddings</string>\n    <string name=\"system_ui_control_center_redirect_notice\">Redirect notification settings</string>\n    <string name=\"system_ui_control_center_redirect_notice_desc\">Opening the notification menu\\'s settings navigates to the target channel settings instead of applying the notification settings</string>\n    <string name=\"system_ui_control_center_show_weather\">Show weather</string>\n    <string name=\"system_ui_control_center_show_weather_city\">Show city</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">Mute when screen is on</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">When the screen is turned on, the pop-up notification does not play the prompt sound</string>\n    <string name=\"system_ui_control_center_rounded_rect\">Rounded rectangle tile</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">Switch control center and notification drawer</string>\n    <string name=\"system_ui_controlcenter_new_title\">New control center</string>\n    <string name=\"system_ui_controlcenter_old_title\">Legacy control center</string>\n    <string name=\"system_ui_controlcenter_unlock_old_title\">Unlock control center styles</string>\n    <string name=\"system_ui_controlcenter_enable_title\">Customize the number of rows and columns</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">Labels will be hidden for 5 rows in a portrait orientation. Number of rows is limited to 3 with hidden labels in a landscape orientation.</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">Landscape orientation will have one additional column\\nIf your ROM has a compact Quick Settings layout option, it will add another column in both orientations</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">Landscape orientation will have one additional column</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">Number of columns in collapsed panel</string>\n    <string name=\"system_control_center_old_qs_grid_columns_horizontal\">Number of columns in collapsed panel (Landscape)</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">Bluetooth tile style</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">Move the bluetooth tile near the network tile</string>\n\n    <string name=\"system_ui_other_title\">Other</string>\n    <string name=\"system_ui_charge_animation_title\">Charge animation</string>\n    <string name=\"system_ui_charge_animation_style\">Charging animation style</string>\n    <string name=\"system_ui_charge_animation_style_desc\">Select the lock screen charging animation style</string>\n    <string name=\"system_ui_origin_charge_animation\">Native charging animation</string>\n    <string name=\"system_ui_another_title\">Other</string>\n    <string name=\"system_ui_notification_freeform\">Pull down the notification bar of more apps to open a freeform</string>\n    <string name=\"system_ui_notification_freeform_desc\">Notifications from Mi Push may not be supported</string>\n    <string name=\"system_ui_monet_title\">Monet</string>\n    <string name=\"system_ui_monet_overlay_custom\">Customize theme color</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">Customize theme colors instead of pulling colors from system wallpaper</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">Choose theme color</string>\n    <string name=\"system_ui_volume_timer\">Extended timer</string>\n    <string name=\"system_ui_qs_label\">Quick switch tab</string>\n    <string name=\"system_ui_notification_title\">Notification</string>\n    <string name=\"system_ui_other_notification_fix\">Disable notification whitelist</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">Enable volume bar blur</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">Only for Android12+ MTK models, there may be high GPU load</string>\n    <!--Settings-->\n    <string name=\"system_settings\">Settings</string>\n    <string name=\"system_settings_international_build\">International version of settings</string>\n    <string name=\"system_settings_safe_wifi\">View your saved WiFi passwords</string>\n    <string name=\"system_settings_safe_wifi_desc\">Unlock Manage Saved Networks\\nPath: Settings - WLAN - Advanced Settings - Manage Saved Networks</string>\n    <string name=\"system_settings_wifipassword_btn_title\">Check</string>\n    <string name=\"system_settings_wifi_password_label\">Password</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">WiFi details</string>\n    <string name=\"system_settings_novelty_haptic_title\">Unlock the new version of the touch adjustment page</string>\n    <string name=\"system_settings_novelty_haptic_desc\">Only for devices with the Sounds &amp; Haptics - Haptics page</string>\n    <string name=\"system_settings_enable_pad_area\">Unlock Pad area</string>\n    <string name=\"system_settings_enable_fold_area\">Unlock Fold area</string>\n    <string name=\"system_settings_enable_area_desc\">Unsupported devices will cause the settings to crash after being unlocked</string>\n    <string name=\"system_settings_connection_sharing_title\">Connetion &amp; sharing</string>\n    <string name=\"system_settings_new_nfc_page\">New NFC Page</string>\n    <string name=\"system_settings_new_nfc_page_desc\">After opening, the default payment application for unsupported models cannot select Xiaomi Wallet</string>\n    <string name=\"system_settings_accessibility_title\">Gesture shortcuts</string>\n    <string name=\"system_settings_area_screenshot\">Unlock area screenshot</string>\n    <string name=\"system_settings_lab_title\">Featured functions</string>\n    <string name=\"system_settings_voip_assistant_controller\">VoIP assistant</string>\n    <string name=\"system_settings_ai_image_title\">Ai Image Engine</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">Unlock Super resolution</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">Unlock AI image enhancement and AI HDR enhancement</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">Unlock MEMC</string>\n    <string name=\"system_settings_permission_title\">Permission</string>\n    <string name=\"system_settings_permission_show_app_up\">Upper-level permissions without searching the application list</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">Restore the old behavior, jump directly to the permission switch of the corresponding application “displayed on top of other applications”</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">Install unknown app permissions without searching the application list</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">Use the international build, jump directly to the permission switch of the corresponding application “displayed on top of other applications”</string>\n    <string name=\"system_settings_develop_title\">Developer options</string>\n    <string name=\"system_settings_apps_freezer\">Force showing freeze cached apps</string>\n    <string name=\"system_settings_apps_freezer_more\">Once enabled, this feature can be found in \\\"Developer Options,\\\" but its functionality is not guaranteed</string>\n    <string name=\"system_settings_develop_speed_mode\">Extreme mode</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">The entry will not be displayed after opening on unsupported models</string>\n    <string name=\"system_settings_window_animation_scale\">Window Animation Zoom</string>\n    <string name=\"system_settings_transition_animation_scale\">Transition Animation Scaling</string>\n    <string name=\"system_settings_animator_duration_scale\">Animator duration scaling</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">Themes</string>\n    <string name=\"theme_manager_version_code_modify\">Disable MIUI version detection</string>\n    <string name=\"theme_manager_diable_ads\">Disable ads</string>\n    <string name=\"theme_manager_diable_ads_desc\">Replace \\\"guess what you like\\\" ads with blank cards, and remove the rest of the ads completely</string>\n    <string name=\"theme_manager_crack\">Theme patch</string>\n    <string name=\"theme_manager_enable_pad_theme\">Enable Pad theme</string>\n    <string name=\"theme_manager_enable_fold_theme\">Enable Fold theme</string>\n    <!--Updater-->\n    <string name=\"updater\">Updater</string>\n    <string name=\"updater_fuck_vab\">Remove OTA verification</string>\n    <string name=\"updater_fuck_vab_desc\">Only VAB devices are supported, please do not enable other non-VAB devices!\\n- You can swipe into the complete internal test card swiping package without internal test permissions\\n- It is recommended to clear data after flashing across different version types\\n- Does not support any unofficial ROM usage\\n- This function is dangerous, please evaluate whether to enable it after understanding the operation of Fastboot</string>\n    <string name=\"updater_version_mode\">Disguise type</string>\n    <string name=\"updater_big_version\">Fake large version</string>\n    <string name=\"updater_big_version_desc\">Items that need to be filled in when disguising the Xiaomi HyperOS version, the default is V816</string>\n    <string name=\"updater_miui_version\">Fake version for Updater</string>\n    <string name=\"updater_miui_version_desc\">Only modify the system update, which can shield the system update to a certain extent</string>\n    <string name=\"updater_device\">Fake device for Updater</string>\n    <string name=\"updater_device_desc\">Enter the model code of the target device to specify the model, which can be used to obtain ROM packages for other models, which is extremely dangerous</string>\n    <!--Permissions-->\n    <string name=\"lbe\">Permissions</string>\n    <string name=\"clipboard\">Clipboard</string>\n    <string name=\"lbe_disable_clipboard_tip\">Hide Toast Tips</string>\n    <string name=\"lbe_clipboard_tip_toast\">Read the clipboard using Toast hints</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">Hide the dialog and allow the app to read the clipboard by default</string>\n    <string name=\"lbe_clipboard_tip\">Read clipboard</string>\n    <!--Cast-->\n    <string name=\"milink\">Cast</string>\n    <string name=\"milink_unlock_mishare\">Unlock Device interconnection</string>\n    <!--Always-on display-->\n    <string name=\"aod\">Always-on display</string>\n    <string name=\"aod_unlock_always_on_display\">Unlock the display time limit of the always-on screen</string>\n    <!--Taplus-->\n    <string name=\"content_extension\">Taplus</string>\n    <string name=\"content_extension_browser\">Use third-party browser</string>\n    <string name=\"content_extension_browser_desc\">Make Taplus not mandatory to use MIUI browser for search, you need to choose the default browser by yourself</string>\n    <string name=\"content_extension_unlock_taplus_title\">Unlock Taplus</string>\n    <string name=\"content_extension_unlock_taplus_horizontal_title\">Allow use of taplus on landscape screens</string>\n    <string name=\"content_extension_double_press\">Gesture : 2 fingers</string>\n    <string name=\"content_extension_super_image\">Quality of save images : Super resolution</string>\n    <string name=\"content_extension_super_image_summary\">True preservation requires underlying support from the device model</string>\n    <string name=\"content_extension_link_open_mode\">How to open link</string>\n    <string name=\"content_extension_link_open_mode_desc\">Choose a browser to open link</string>\n    <!--Mi Canvas-->\n    <string name=\"creation\">Mi Canvas</string>\n    <string name=\"creation_unlock\">Remove restrictions on the use of mobile phones</string>\n    <!--Gallery-->\n    <string name=\"gallery\">Gallery</string>\n    <string name=\"gallery_enable_hdr_enhanced\">Unlock display high dynamic range</string>\n    <string name=\"gallery_enable_pdf\">Unlock generate PDF</string>\n    <string name=\"gallery_enable_ocr\">Unlock OCR</string>\n    <string name=\"gallery_enable_ocr_form\">Unlock scan table</string>\n    <string name=\"gallery_enable_id_photo\">Unlock ID</string>\n    <string name=\"gallery_enable_photo_movie\">Unlock Clip</string>\n    <string name=\"gallery_enable_video_post\">Unlock Video effects</string>\n    <string name=\"gallery_enable_video_editor\">Unlock Video editor</string>\n    <string name=\"gallery_enable_text_yanhua\">Unlock Text fireworks</string>\n    <string name=\"gallery_enable_remover_2\">Unlock Erase</string>\n    <string name=\"gallery_enable_magic_matting\">Unlock Cut</string>\n    <string name=\"gallery_enable_magic_sky\">Unlock Sky</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">MIUI security components</string>\n    <string name=\"guard_provider_disable_upload_applist\">Prevent automatic upload of installed app list</string>\n    <!--System launcher-->\n    <string name=\"home\">System launcher</string>\n    <string name=\"home_gesture\">Gesture and Navigation</string>\n    <string name=\"home_navigation_title\">Navigation</string>\n    <string name=\"home_navigation_quick_back\">Go back to previous app</string>\n    <string name=\"home_navigation_quick_back_more\">Swipe across the screen starting from the edge to go back to previous app</string>\n    <string name=\"home_navigation_back_area_height\">Back gesture area height</string>\n    <string name=\"home_navigation_back_area_width\">Back gesture area width</string>\n    <string name=\"home_gesture_title2\">Gesture</string>\n    <string name=\"home_gesture_mainscreen_title\">Main screen</string>\n    <string name=\"home_gesture_gesture_title\">Full-screen gesture</string>\n    <string name=\"home_gesture_double_tap\">Double click</string>\n    <string name=\"home_gesture_double_tap_desc\">Double-tap anywhere on the home screen</string>\n    <string name=\"home_gesture_shake\">Shake</string>\n    <string name=\"home_gesture_shake_desc\">Shake device from any home screen</string>\n    <string name=\"home_gesture_left_swipe\">Swipe Left</string>\n    <string name=\"home_gesture_left_swipe_desc\">Swipe left on the home screen Dock</string>\n    <string name=\"home_gesture_right_swipe\">Swipe Right</string>\n    <string name=\"home_gesture_right_swipe_desc\">Swipe right on the home screen Dock</string>\n    <string name=\"home_gesture_up_swipe\">Swipe Up</string>\n    <string name=\"home_gesture_up_swipe_desc\">Swipe up with one finger on any home screen</string>\n    <string name=\"home_gesture_down_swipe\">Swipe Down</string>\n    <string name=\"home_gesture_down_swipe_desc\">Swipe down with one finger on any home screen</string>\n    <string name=\"home_gesture_up_swipe2\">Swipe up with two fingers</string>\n    <string name=\"home_gesture_up_swipe2_desc\">Swipe up with two fingers on any home screen</string>\n    <string name=\"home_gesture_down_swipe2\">Swipe down with two fingers</string>\n    <string name=\"home_gesture_down_swipe2_desc\">Swipe down with two fingers on any home screen</string>\n    <string name=\"home_gesture_pinch\">Pinch with two fingers</string>\n    <string name=\"home_gesture_spread\">Spread with two fingers</string>\n    <string name=\"home_gesture_swipe_and_stop\">Swipe and stop</string>\n    <string name=\"home_gesture_swipe_and_stop_desc\">Swipe and stop on the non-home screen</string>\n    <string name=\"home_gesture_multi_choose_app\">Choose an app</string>\n    <string name=\"home_gesture_multi_choose_app_none\">None</string>\n    <string name=\"home_layout\">Layout</string>\n    <string name=\"home_layout_home_title\">Home screen</string>\n    <string name=\"home_layout_hotseats_title\">Dock</string>\n    <string name=\"home_layout_searchbar_title\">Search bar</string>\n    <string name=\"home_layout_seek_points\">Page indicator</string>\n    <string name=\"home_layout_show_clock\">Display time</string>\n    <string name=\"home_layout_show_clock_desc\">The page where the clock widget is located always displays the time</string>\n    <string name=\"home_layout_unlock_grids\">Unlock layout</string>\n    <string name=\"home_layout_unlock_grids_desc\">Unlock home screen icon layout size limit</string>\n    <string name=\"home_layout_unlock_grids_no_words\">Unlock layout (no word mode)</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">Unlock home screen icon layout size limit</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">Home screen distance from screen bottom margin</string>\n    <string name=\"home_layout_workspace_padding_top_desc\">Home screen distance from screen top margin</string>\n    <string name=\"home_layout_hotseats_height\">Height</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">Dock distance from page indicator margin</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">Dock distance from screen bottom margin</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">Search bar distance from screen bottom margin</string>\n    <string name=\"home_folder\">Folder</string>\n    <string name=\"home_small_folder_title\">Small Folder</string>\n    <string name=\"home_big_folder_title\">Big Folder</string>\n    <string name=\"home_small_folder_icon_bg\">Icon Background</string>\n    <string name=\"home_small_folder_icon_bg_custom\">Background custom</string>\n    <string name=\"home_small_folder_icon_bg_size\">Background size</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">Horizontal three grid background custom</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">Custom</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">Background width</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">Background height</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">Vertical three grid background custom</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">Custom</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">Background width</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">Background height</string>\n    <string name=\"home_big_folder_icon_bg\">XXL background custom</string>\n    <string name=\"home_big_folder_icon_bg_custom\">Custom</string>\n    <string name=\"home_big_folder_icon_bg_width\">Background width</string>\n    <string name=\"home_big_folder_icon_bg_height\">Background height</string>\n    <string name=\"home_big_folder_item_max_count\">Big Folder</string>\n    <string name=\"home_big_folder_icon_bg_2x1_n\">4*2 background custom</string>\n    <string name=\"home_big_folder_icon_bg_1x2_n\">2*2 background custom</string>\n    <string name=\"home_big_folder_icon_bg_n\">3*3 &amp; 4*4 background custom</string>\n    <string name=\"home_auto_close_folder_title\">Auto Shut Off</string>\n    <string name=\"home_auto_close_folder_summary\">Close app\\'s folder after launch</string>\n    <string name=\"home_wallpaper\">Background</string>\n    <string name=\"home_wallpaper_blur\">Background blur</string>\n    <string name=\"home_enable_blur\">Start blur</string>\n    <string name=\"home_blur_radius_title\">Blur radius</string>\n    <string name=\"home_folder_shade_title\">Overlay color</string>\n    <string name=\"home_folder_shade_summary\">Enhance or weaken the background color</string>\n    <string name=\"home_folder_shade_solid\">Entire background</string>\n    <string name=\"home_folder_shade_gradient\">Middle Only</string>\n    <string name=\"home_folder_shade_level_title\">Color Intensity</string>\n    <string name=\"home_folder_cols_title\">Number of Folder Arrangements</string>\n    <string name=\"home_folder_cols_format\">%d List</string>\n    <string name=\"home_folder_vertical_padding_title\">Folder horizontal spacing</string>\n    <string name=\"home_folder_width_title\">Use the width of the entire folder</string>\n    <string name=\"home_folder_space_title\">Reduce margins</string>\n    <string name=\"home_folder_blur_title\">Background blur</string>\n    <string name=\"home_folder_anim_title\">Rebound animation</string>\n    <string name=\"home_folder_anim_1\">Open speed 1</string>\n    <string name=\"home_folder_anim_2\">Open speed 2</string>\n    <string name=\"home_folder_anim_3\">Close speed 1</string>\n    <string name=\"home_folder_anim_4\">Close speed 2</string>\n    <string name=\"home_drawer\">Drawer</string>\n    <string name=\"home_drawer_all\">Remove \\\"All\\\" tab</string>\n    <string name=\"home_drawer_all_desc\">Removed the \\\"All\\\" tab for grouping apps in the drawer</string>\n    <string name=\"home_drawer_editor\">Hide \\\"Edit\\\" Button</string>\n    <string name=\"home_drawer_editor_desc\">Removed the \\\"Edit\\\" button from the Apps tab in the drawer</string>\n    <string name=\"home_drawer_blur\">Enable All Apps Container View Blur</string>\n    <string name=\"home_drawer_blur_desc\">Please set app drawer background transparency to 100% to use this feature</string>\n    <string name=\"home_drawer_pinyin\">Arranged in pinyin order</string>\n    <string name=\"home_drawer_pinyin_more\">When the language is not Simplified Chinese, the apps in the drawer are still arranged according to Pinyin</string>\n    <string name=\"home_title\">Icon and Title</string>\n    <string name=\"home_title_icon_title\">Icon</string>\n    <string name=\"home_title_bigicon_title\">Big icon</string>\n    <string name=\"home_title_title_title\">Title</string>\n    <string name=\"home_title_title_marquee\">Text scroll</string>\n    <string name=\"home_title_title_marquee_desc\">App names that are too long will be scrolled instead of wrapping</string>\n    <string name=\"home_title_title_new_install\">New Install App Dont show Indicator</string>\n    <string name=\"home_title_drawer_font_hidden\">Hide all app titles</string>\n    <string name=\"home_title_drawer_font_hidden_more\">The app title in the drawer will also be hidden.\\nIf you want to keep the app title in the drawer, please use \\\"Font Size\\\" to adjust it.</string>\n    <string name=\"home_title_title_new_install_more\">Do not display the indicator next to the application title when installing a new application</string>\n    <string name=\"home_title_font_size\">Font size</string>\n    <string name=\"home_title_title_color\">Title color</string>\n    <string name=\"home_title_animation_speed\">Animation speed</string>\n    <string name=\"home_title_big_icon_corner\">Medium icon round corner follow</string>\n    <string name=\"home_title_download_animation\">Download animation</string>\n    <string name=\"home_title_fix_animation\">Optimized interrupt animation</string>\n    <string name=\"home_title_icon_scale\">Icons scaling</string>\n    <string name=\"home_title_disable_hide_file\">Disable hiding the \\\"file\\\" icon</string>\n    <string name=\"home_title_disable_hide_theme\">Do not hide \\\"theme manager\\\" icon</string>\n    <string name=\"home_title_custom_anim_param\">Custom Animation Parameter</string>\n    <string name=\"home_title_custom_anim_param_damping_title\">Damping</string>\n    <string name=\"home_title_custom_anim_param_stiffness_title\">Stiffness</string>\n\n    <string name=\"home_recent\">Recent</string>\n    <string name=\"home_recent_animation_speed\">Animation speed</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">Disable wallpaper dimming</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">Hide status bar in task view</string>\n    <string name=\"home_recent_hide_freeform\">Hide freeform button</string>\n    <string name=\"home_recent_hide_clean_up\">Hide clean up button</string>\n    <string name=\"home_recent_remove_icon\">Remove icon</string>\n    <string name=\"home_recent_modify_animation\">Modify the anim for removing cards</string>\n    <string name=\"home_recent_text\">Text displayed when no recent task</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">App name distance task view card</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">Task view card rounded corners</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">Thumbnail size for Horizontally-Vertical</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">Thumbnail size for Horizontally-Horizontal</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">Thumbnail size for Vertically</string>\n    <string name=\"home_recent_text_size\">Size of thumbnail labels text</string>\n    <string name=\"home_recent_text_color\">Color of thumbnail labels text</string>\n    <string name=\"home_recent_freeform_background_color\">Freeform app card background color</string>\n    <string name=\"home_recent_show_real_memory\">Show real memory</string>\n    <string name=\"home_recent_show_memory_info_sum\">For tablet use only</string>\n    <string name=\"home_recent_show_memory_info\">Show memory info</string>\n    <string name=\"home_recent_always_show_clean_up\">Prohibit hiding the cleanup icon when there is no card</string>\n\n    <string name=\"home_widget\">Widget</string>\n    <string name=\"home_widget_all_widget_animation\">Widget animation</string>\n    <string name=\"home_widget_show_miui_widget\">Show MIUI widgets</string>\n    <string name=\"home_widget_show_miui_widget_desc\">Display MIUI widgets on the Android widget page</string>\n    <string name=\"home_widget_corner_radius\">Widget rounded corners</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">Allow classic widget to be moved to the Minus One screen</string>\n    <string name=\"home_widget_hide_title\">Hide widget title</string>\n    <string name=\"home_widget_resizable\">Remove any widget size limitations</string>\n\n    <string name=\"home_dock\">Dock</string>\n    <string name=\"home_dock_bg_enable\">Add Dock Bar Background</string>\n    <string name=\"home_dock_bg_height\">Height</string>\n    <string name=\"home_dock_bg_height_desc\">Dock height</string>\n    <string name=\"home_dock_bg_margin_horizontal\">Vertical margin</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Dock distance from both sides of the screen</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Margin of the Dock from the screen indicator</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Margin of the Dock from the bottom of the screen</string>\n    <string name=\"home_dock_icon_margin_bottom\">Icon bottom margin</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Dock icon distance from screen bottom margin</string>\n    <string name=\"home_dock_bg_custom\">Background blur</string>\n    <string name=\"home_dock_icon_bottom_margin\">Icon distance from bottom margin</string>\n    <string name=\"home_dock_margin_bottom\">Margin of page indicator from bottom of screen</string>\n    <string name=\"home_dock_unlock_hotseat\">Remove icon number restriction from dock</string>\n    <string name=\"home_dock_fold\">Fold\\'s Dock</string>\n    <string name=\"home_dock_hide_seekpoint\">Hide seekpoint</string>\n    <string name=\"home_dock_icon_title\">Show icon title in dock</string>\n    <string name=\"home_dock_disable_recents_icon\">Hide recent app icons from the Dock</string>\n\n    <string name=\"home_other\">Other</string>\n    <string name=\"home_other_shortcut_title\">Shortcut</string>\n    <string name=\"home_other_home_mode\">Desktop mode</string>\n    <string name=\"home_other_infinite_scroll\">Infinite scroll</string>\n    <string name=\"home_other_infinite_scroll_desc\">Jump from last page to first page and vice versa</string>\n    <string name=\"home_other_freeform_shortcut_menu\">Freeform mode</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">Add freeform menu to the shortcut menu</string>\n    <string name=\"home_other_tasks_shortcut_menu\">More tasks mode</string>\n    <string name=\"home_other_tasks_shortcut_menu_desc\">Add new tasks menu to the shortcut menu</string>\n    <string name=\"home_other_user_present_animation\">Optimize unlock animation</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">Always blur launcher wallpaper</string>\n    <string name=\"home_other_perfect_icon\">Perfect Icon Priority</string>\n    <string name=\"home_other_icon_mono_chrome\">Icon background color</string>\n    <string name=\"home_other_icon_monet_color\">Use monet color</string>\n    <string name=\"home_other_use_edit_color\">Edit color</string>\n    <string name=\"home_other_your_color\">Your color</string>\n    <string name=\"home_other_portrait_reverse\">Opposite vertical screen</string>\n    <string name=\"home_other_shortcut_background_blur\">Background blur for shortcut menu</string>\n    <string name=\"home_other_blur_radius\">Blur Radius</string>\n    <string name=\"home_large_icon_corner_radius\">Large icons with rounded corners</string>\n    <string name=\"home_other_app_icon_hide\">Desktop shortcut management</string>\n    <string name=\"home_other_toast_slide_again\">Prohibit prompts \\\"please stroke again\\\" Toast</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">Remove restrictions on shortcuts</string>\n    <string name=\"home_other_disable_hide_google\">Disable hide Google</string>\n    <string name=\"home_other_fix_android_r_s\">Fix a compatibility issue that caused the desktop to go black</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">Shortcut menu blur value</string>\n    <string name=\"home_other_high_models\">Mandatory recognition as a high-end model</string>\n    <string name=\"home_recent_blur_level\">Blur level</string>\n    <string name=\"home_recent_complete_blur_plus\">Complete Blur Plus</string>\n    <string name=\"home_recent_complete_blur\">Complete Blur</string>\n    <string name=\"home_recent_test_blur\">Test Blur</string>\n    <string name=\"home_recent_simple_blur\">Simple Blur</string>\n    <string name=\"home_recent_none_blur\">None Blur</string>\n    <string name=\"home_recent_none_blur_simple_anim\">None Blur (Simple Anim)</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_title\">Unlock more options for desktop settings</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_desc\">Unlocked functions may not be available, and some functions require underlying system support</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">Gallery Editor</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">Unlock the minimum crop image limit</string>\n    <string name=\"mediaeditor_filter_manager\">Unlock the filter manager</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">Mi Share</string>\n    <string name=\"mishare_disable_mishare_auto_off\">Disable automatic closing of Mi Share</string>\n    <string name=\"mishare_unlock_turbo_mode\">Unlock turbo transfer</string>\n    <!--Wallpaper-->\n    <string name=\"miwallpaper\">Wallpaper</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">Unlock Super wallpaper</string>\n    <!--Package installer-->\n    <string name=\"package_installer\">Package installer</string>\n    <string name=\"miui_package_installer_modify\">Purify the page</string>\n    <string name=\"miui_package_installer_safe_mode\">Clean mode</string>\n    <string name=\"miui_package_installer_safe_mode_desc\">Force open and lock the official security guard</string>\n    <string name=\"miui_package_installer_disable_ad\">Disable promotion</string>\n    <string name=\"miui_package_installer_install_risk\">Disable risk detection</string>\n    <string name=\"miui_package_installer_safe_model_tip\">Disable the security guard prompt</string>\n    <string name=\"miui_package_installer_count_checking\">Disable frequently installed app check</string>\n    <string name=\"miui_package_installer_update_system_app\">Remove system app installation restrictions</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">Allow any non-system channel to install system apps</string>\n    <string name=\"miui_package_installer_install_source\">Custom install source</string>\n    <string name=\"miui_package_installer_apk_info\">Show more package information</string>\n    <string name=\"miui_package_installer_apk_info_desc\">Show more info about the app that\\'s being installed</string>\n    <!--networkboost-->\n    <string name=\"various_disable_link_turbo_toast\">Hide LinkTurbo Toast</string>\n    <string name=\"various_disable_link_turbo_toast_more\">Please restart NetworkBoost in the fast restart scope</string>\n    <!--nfc-->\n    <string name=\"nfc\">NFC Service</string>\n    <string name=\"nfc_disable_sound\">Disable sound</string>\n    <string name=\"nfc_allow_information_screen\">Allow recognizable when information screen</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">App vault</string>\n    <string name=\"personal_assistant_widget_crack\">Widget patch</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Pad/Fold weight</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">Enable Pad/Fold style widgets</string>\n    <string name=\"personal_assistant_overlap_mode\">Negative one screen Fold style</string>\n    <string name=\"personal_assistant_blur_model\">Personal assistant blur model</string>\n    <string name=\"personal_assistant_blur_value\">Background style</string>\n    <string name=\"personal_assistant_blurradius\">Personal assistant blur value</string>\n    <string name=\"personal_assistant_color\">Personal assistant color</string>\n    <!--Music-->\n    <string name=\"music\">Music</string>\n    <string name=\"music_disable_ad\">Remove ads</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">Battery and performance</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">Custom high refresh rate apps</string>\n    <string name=\"powerkeeper_lock_max_fps\">Lock max FPS</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">Try don\\'t kill apps</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">May increase power consumption</string>\n    <string name=\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\">Prevent recovery of battery optimization whitelist</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">Screen Recorder</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">Force enable AOSP screen recording support</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">Requires screen recording version support</string>\n    <string name=\"screen_recorder_config\">Add more frame rate and bitrate selections</string>\n    <string name=\"screen_recorder_config_desc\">Please choose according to the hardware situation</string>\n    <string name=\"screen_recorder_more_volume\">Unlock more Volume from</string>\n    <string name=\"screen_recorder_more_volume_desc\">Some version not support</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">Specify the recording video save location to Movies/ScreenRecorder</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">Screenshot</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">Unlock the minimum crop image limit</string>\n    <string name=\"screenshot_unlock_privacy_marking_title\">Unlock privacy marking</string>\n    <string name=\"screenshot_unlock_privacy_marking_desc\">A higher version of the \\\"Mi AI Engine\\\" APP needs to be pre-installed for normal use</string>\n    <string name=\"screenshot_save_to_pictures_desc\">Canonical screenshot save location to /Pictures/Screenshots</string>\n    <string name=\"screenshot_device_customize_title\">Custom screenshot model with shell</string>\n    <string name=\"screenshot_device_customize_desc\">Please enter the model code</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">Security</string>\n    <string name=\"security_center_pad\">Tablet security center</string>\n    <string name=\"security_center_app_title\">App management</string>\n    <string name=\"security_center_battery_title\">Battery Saver and Battery</string>\n    <string name=\"security_center_privacy_title\">Privacy protection</string>\n    <string name=\"security_center_beauty_title\">Front camera assistant</string>\n    <string name=\"security_center_bubble_and_freeform_title\">Bubble and freeform</string>\n    <string name=\"security_center_newbox_title\">Sidebar</string>\n    <string name=\"security_center_dolby_open\">Close the Dolby pop-up window</string>\n    <string name=\"security_center_show_battery_temperature\">Show battery temperature</string>\n    <string name=\"security_center_ai_clipboard\">Protect clipboard</string>\n    <string name=\"security_center_blur_location\">Lower positioning accuracy</string>\n    <string name=\"security_center_gms_open\">GMS Service</string>\n    <string name=\"security_center_flash_light\">Flashlight brightness control</string>\n    <string name=\"security_center_flash_light_more\">Allowing you to control the flashlight\\'s brightness by dragging the brightness slider</string>\n    <string name=\"security_center_get_number\">Manage the application to obtain the mobile phone number and log in with one click</string>\n    <string name=\"security_center_applock_pin_scramble\">Applock out of order PIN</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">Randomly change app lock PIN keypad sequence</string>\n    <string name=\"security_center_beauty_light_auto\">Unlock Adjust fill light brightness automatically</string>\n    <string name=\"security_center_beauty_face\">Unlock Beautify for video calls</string>\n    <string name=\"security_center_beauty_privacy\">Unlock Privacy camera</string>\n    <string name=\"security_center_beauty_pc\">Unlock Keep faces centered</string>\n    <string name=\"security_center_disable_root_check\">Disable root detection</string>\n    <string name=\"security_center_remove_macro_black_list\">Remove auto combo blacklist</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">Disable \\\"Malicious app found\\\" notifications</string>\n    <string name=\"security_center_newbox_custom_enable\">Enable custom</string>\n    <string name=\"security_center_newbox_bg_custom\">Background blur</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">Horizontal margin</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">Vertical margin</string>\n    <string name=\"security\">Security</string>\n    <string name=\"security_app_title\">Show additional app details</string>\n    <string name=\"security_app_summary\">Add new fields to app into page:\\n- version code\\n- full path to apk\\n- data path\\n- user ID\\n- min SDK version\\n- target SDK version\\n- link to Play Store page\\n- launch an app</string>\n    <string name=\"security_app_sort_title\">App management list sorting</string>\n    <string name=\"security_app_sort_summary\">Modify the default sorting of the application management list</string>\n    <string name=\"security_restrict_app_title\">Full limit</string>\n    <string name=\"security_restrict_app_summary\">Allows configuration of power saver and access to Wi-Fi for system apps</string>\n    <string name=\"security_disable_app_title\">Application state control</string>\n    <string name=\"security_disable_app_summary\">Allow disabling any app from app info page</string>\n    <string name=\"security_disable_app_url_title\">Apply open link management</string>\n    <string name=\"security_disable_app_url_summary\">Change the \\\"Remove default action\\\" to \\\"Open by default\\\" setting in the app details</string>\n    <string name=\"app_link_open_always\">Allows the app to open supported links</string>\n    <string name=\"app_link_open_never\">Do not allow apps to open links</string>\n    <string name=\"open_by_default\">Open by default</string>\n    <string name=\"security_score\">Disable health check optimization</string>\n    <string name=\"security_score_summary\">Lock 100 points and disable optimization</string>\n    <string name=\"security_center_skip_waiting_time\">Skip countdown limit</string>\n    <string name=\"security_center_skip_waiting_time_desc\">Skip the wait for confirmation countdown for most official dangerous options</string>\n    <string name=\"security_center_newbox_blur\">Sidebar blur</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">Remove bubble notification app restrictions</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">Hide warning about low battery level</string>\n    <string name=\"security_center_remove_low_battery_reminder_summary\">When the battery is below 20%, the warning dialog to turn on the power saving mode no longer pops up</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">Remove open app popup</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">Remove \\\"Allow XXX to open XXX\\\" Chain start popup</string>\n    <string name=\"security_center_no_permission\">Required permissions not granted</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">Unlock side-hide freeform</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">Unlock the side-hide freeform for lowly-supported but restricted devices. This will also affect the behavior of the widget when the phone cuts to the background</string>\n    <string name=\"security_center_unlock_smart_charge_title\">Unlock the “Smart Charge Off Protection” and “Low Battery Quick Charge” functions</string>\n    <string name=\"security_center_super_wireless_charge\">Unlock Super wireless charge</string>\n    <string name=\"security_center_blur_model\">Sidebar blur model</string>\n    <string name=\"security_center_blurradius\">Sidebar blur value</string>\n    <string name=\"security_center_color\">Sidebar color</string>\n    <string name=\"security_center_other_title\">Other</string>\n    <string name=\"security_center_sidebar_line_color\">Sidebar line color custom</string>\n    <string name=\"security_center_sidebar_line_color_default\">Sidebar line color default</string>\n    <string name=\"security_center_sidebar_line_color_dark\">Sidebar line color dark</string>\n    <string name=\"security_center_sidebar_line_color_light\">Sidebar line color light</string>\n    <string name=\"security_center_disable_ban\">Remove report button</string>\n    <string name=\"security_center_unlock_screen_time\">Displays detailed power consumption data</string>\n    <string name=\"security_center_unlock_screen_time_desc\">Show screen power usage information in the top battery drain and resume showing all other apps\\' power consumption and time</string>\n    <string name=\"security_center_unlock_gun_service\">Unlock Gun service</string>\n    <string name=\"security_center_disable_remove_screen_hold_on\">Disable remove screen hold on</string>\n    <string name=\"security_center_unlock_memc\">Unlock MEMC</string>\n    <string name=\"security_center_unlock_enhance_contours\">Unlock Enhance contours</string>\n    <string name=\"security_center_unlock_s_resolution\">Unlock Super resolution</string>\n    <string name=\"security_center_hide_sidebar\">Hide sidebar</string>\n    <string name=\"security_center_leave_open\">Leave the slide unfolded</string>\n    <string name=\"security_center_disable_sidebar_show_suggest\">Disable show suggest apps</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">Smart cards</string>\n    <string name=\"tsmclient_auto_nfc\">Manage NFC automatically</string>\n    <string name=\"tsmclient_auto_nfc_desc\">NFC is automatically turned on when entering the card swiping page, and it is automatically turned off when exiting</string>\n    <string name=\"tsmclient_nfc_turning_on\">Turning on NFC automatically……</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">Turn on NFC manually</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">Failed to enable NFC automatically</string>\n    <!--Weather-->\n    <string name=\"weather\">Weather</string>\n    <string name=\"weather_device_level_title\">Animation Level</string>\n    <string name=\"weather_device_level_title_low\">Low</string>\n    <string name=\"weather_device_level_title_middle\">Middle</string>\n    <string name=\"weather_device_level_title_high\">High</string>\n    <!--AI Translate-->\n    <string name=\"aiasst\">AI Translate</string>\n    <string name=\"aiasst_ai_captions\">Force enabled AI captions</string>\n    <string name=\"aiasst_ai_captions_desc\">Only Chinese and English can be recognized and translated</string>\n    <!--Barrage-->\n    <string name=\"barrage\">Barrage</string>\n    <string name=\"barrage_any_barrage\">Allow all apps use barrage</string>\n    <string name=\"barrage_custom_barrage_length\">Custom barrage length</string>\n    <!--Joyose-->\n    <string name=\"joyose\">Joyose</string>\n    <string name=\"joyose_cloud_control_title\">Cloud Control</string>\n    <string name=\"joyose_disable_cloud_control\">Disable Cloud control</string>\n    <string name=\"joyose_game_title\">Game Space</string>\n    <string name=\"joyose_enable_gpu_tuner\">Performance scheduling</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">After opening, add game GPU related settings in the bottom middle of [Game Space]</string>\n    <!--GetApps-->\n    <string name=\"market\">GetApps</string>\n    <string name=\"market_device_modify\">Model guise</string>\n    <string name=\"market_device_modify_desc\">Disguised device model is Xiaomi 13 Ultra</string>\n    <string name=\"market_disable_new_icon\">Prohibit use third-party icons</string>\n    <string name=\"market_disable_new_icon_desc\">Make desktop more clean</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">Unlock MIUI+</string>\n    <!--Mi Settings-->\n    <string name=\"mi_settings\">Mi Settings</string>\n    <string name=\"mi_input_settings\">Input settings</string>\n    <string name=\"mi_settings_show_fps\">Show more FPS list</string>\n    <string name=\"mi_settings_show_fps_desc\">The module unlocks all frame rates by default, not guaranteed to be available</string>\n    <!--MTB-->\n    <string name=\"mtb\">MTB</string>\n    <string name=\"mtb_auth\">Bypass MTB authentication</string>\n    <string name=\"mtb_auth_desc\">This is a high-risk feature, any problems arising from this will be borne by the user, please be careful to back up your baseband. Enter *#*#MODEMTEST#*#* on the dial interface to open the MTB Settings</string>\n    <!--Scanner-->\n    <string name=\"scanner\">Scanner</string>\n    <string name=\"scanner_card\">Unlock scan ID card</string>\n    <string name=\"scanner_translation\">Unlock translation</string>\n    <string name=\"scanner_ocr\">Unlock OCR</string>\n    <string name=\"scanner_document\">Unlock scan document</string>\n    <string name=\"scanner_excel\">Unlock scan table</string>\n    <string name=\"scanner_ppt\">Unlock scan PPT</string>\n    <string name=\"scanner_doc_ppt\">Unlock scan files</string>\n    <!--Other-->\n    <string name=\"various\">Other</string>\n    <string name=\"notes\">Notes</string>\n    <string name=\"share_center\">Mi Smart Hub</string>\n    <string name=\"new_task\">New Task</string>\n    <string name=\"custom_hook\">Custom</string>\n    <string name=\"app_version_not_supported\">Unsupported version</string>\n    <string name=\"various_location_simulation_title\">Fake location</string>\n    <string name=\"various_dialog_title\">Dialog</string>\n    <string name=\"various_mipad_title\">MiPad</string>\n    <string name=\"various_open_aosp_something_title\">Hide Properties</string>\n    <string name=\"various_open_aosp_something_desc\">Open AOSP interface \\\"hidden\\\"</string>\n    <string name=\"settings_notfication_importance\">Show notification importance</string>\n    <string name=\"various_no_overscroll\">Disable out-of-bounds bounce</string>\n    <string name=\"various_disable_bluetooth_restrict\">Prevent bluetooth from being turned off temporarily</string>\n    <string name=\"various_disable_access_device_logs\">Dismiss access device logs request dialog</string>\n    <string name=\"various_unlock_ime\">Unlock IME</string>\n    <string name=\"various_unlock_ime_desc\">After opening, please check the corresponding input method scope in the Xposed manager</string>\n    <string name=\"various_collapse_miui_title\">MIUI Title</string>\n    <string name=\"various_collapse_miui_title_desc\">Adjust top bar title in MIUI apps</string>\n    <string name=\"various_disable_folder_cantuse\">Remove the unavailable folder limit</string>\n    <string name=\"various_super_clipboard_title\">Super Clipboard</string>\n    <string name=\"various_unlock_super_clipboard\">Unlock Super Clipboard</string>\n    <string name=\"various_super_clipboard_summary\">Only apps containing is_support_miui_super_clipboard metadata are supported</string>\n    <string name=\"various_super_clipboard_picture_desc\">Allow copy image to clipboard</string>\n    <string name=\"various_super_clipboard_files_desc\">Allow copy files to clipboard</string>\n    <string name=\"various_open_aosp_battery_title\">Battery Optimization</string>\n    <string name=\"various_open_aosp_notification_title\">Notification Settings</string>\n    <string name=\"various_open_aosp_app_manage_title\">App Management</string>\n    <string name=\"various_open_aosp_language_title\">Language Settings</string>\n    <string name=\"various_open_aosp_extremely_dark_title\">Extremely Dark</string>\n    <string name=\"various_mipad_input_title\">Input</string>\n    <string name=\"various_mipad_input_close_magic_title\">No Magic Pointer</string>\n    <string name=\"various_mipad_input_close_magic_desc\">Turn the round MIUI pointer to AOSP pointer.</string>\n    <string name=\"various_mipad_input_restore_esc_title\">Restore ESC function</string>\n    <string name=\"various_mipad_input_restore_esc_desc\">Restore ESC function which has been hard-mapped to \\\"back\\\" function by MIUI.</string>\n    <string name=\"various_mipad_input_disable_bluetooth_title\">Remove stylus bluetooth restriction</string>\n    <string name=\"various_mipad_input_disable_bluetooth_desc\">Make all compatible stylus work without the need of bluetooth connection to official stylus.</string>\n    <string name=\"various_mipad_input_bluetooth_version_title\">Driver version</string>\n    <string name=\"various_mipad_input_bluetooth_version_desc\">Driver version for removing stylus bluetooth restriction</string>\n    <string name=\"various_mipad_input_ingore_gesture_title\">Ignore stylus buttons gesture</string>\n    <string name=\"various_mipad_input_ingore_gesture_desc\">Ignore the long press gesture on the stylus buttons</string>\n    <string name=\"various_mipad_input_need_finger_num_title\">Swap the number of fingers required for gestures</string>\n    <string name=\"various_mipad_input_need_finger_num_desc\">Change screenshot gesture, partial screenshot gesture, and horizontal split screen gesture to be triggered by four fingers, and switch apps gesture to be triggered by three fingers</string>\n    <string name=\"custom_background_blur_enabled\">Background blur</string>\n    <string name=\"custom_background_blur_radius\">Blurry radius</string>\n    <string name=\"custom_background_color\">Background color</string>\n    <string name=\"custom_background_color_alpha\">background color transparency</string>\n    <string name=\"custom_background_corner_radius\">Background rounded corners</string>\n    <string name=\"custom_blur_enabled\">Background blur</string>\n    <string name=\"various_blur_radius\">Blurry radius</string>\n    <string name=\"various_background_corner_radius\">Background rounded corners</string>\n    <string name=\"various_background_alpha\">Background mask transparency</string>\n    <string name=\"various_background_color\">Background color</string>\n    <string name=\"various_dialog_window_blur_title\">Blur</string>\n    <string name=\"various_dialog_gravity\">Popup window location</string>\n    <string name=\"various_dialog_margin_horizontal\">Popup window to vertical margin</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">The distance between the popup window and the sides of the screen</string>\n    <string name=\"various_dialog_margin_bottom\">Popup window to bottom margin</string>\n    <string name=\"various_dialog_margin_bottom_desc\">The distance from the popup window to the bottom of the screen</string>\n    <string name=\"various_dialog_window_blur\">Window blur</string>\n    <string name=\"various_dialog_window_blur_radius\">Window blur radius</string>\n    <string name=\"location_data_title\">Database</string>\n    <string name=\"various_location_simulation_1_title\">Task 1</string>\n    <string name=\"various_location_simulation_2_title\">Task 2</string>\n    <string name=\"various_location_simulation_3_title\">Task 3</string>\n    <string name=\"various_location_simulation_all_title\">Universal</string>\n    <string name=\"location_simulation_package_name\">Package names</string>\n    <string name=\"location_simulation_location\">Location</string>\n    <string name=\"location_simulation_location_custom\">Select location</string>\n    <string name=\"location_simulation_network\">Network</string>\n    <string name=\"location_simulation_operator_fix\">Carrier masquerade fix</string>\n    <string name=\"location_simulation_mac\">Mac address</string>\n    <string name=\"location_simulation_wifi\">Wi-Fi</string>\n    <string name=\"location_simulation_router_mac\">Router Mac Address</string>\n    <string name=\"location_simulation_work_title\">Title</string>\n    <string name=\"location_simulation_work_offset\">Offset</string>\n    <string name=\"location_simulation_work_base_station\">Base station</string>\n    <string name=\"location_simulation_work_longitude_latitude\">Longitude and latitude</string>\n    <string name=\"location_simulation_work_remarks\">Mark</string>\n    <string name=\"app_details_playstore\">Open with app store</string>\n    <string name=\"app_details_launch\">Launch</string>\n    <string name=\"app_details_nolaunch\">App has no default launchable activity</string>\n    <string name=\"app_details_apk_file\">APK directory</string>\n    <string name=\"app_details_apk_version_code\">App version number</string>\n    <string name=\"app_details_data_path\">Data directory</string>\n    <string name=\"app_details_app_uid\">User ID</string>\n    <string name=\"app_details_sdk\">Target SDK version</string>\n    <string name=\"app_details_min_sdk\">Min SDK version</string>\n    <string name=\"disable_app_settings\">It\\'s a bad idea!</string>\n    <string name=\"disable_app_title\">Are you sure you want to disable the app?</string>\n    <string name=\"disable_app_text\">If this is a necessary system app, disabling it could cause damage</string>\n    <string name=\"disable_app_fail\">Failed to change app state</string>\n    <string name=\"unlimited\">Unlimited</string>\n    <string name=\"calls\">Call</string>\n    <string name=\"system_volume\">System</string>\n    <string name=\"notification_volume\">Notification</string>\n    <string name=\"freeform_notification\">Notification floating window</string>\n    <string name=\"share_app\">Share to third-party apps</string>\n    <string name=\"show_newmods_title\">Mark new module</string>\n    <string name=\"default_volume_stream_ring\">Ring</string>\n    <string name=\"default_volume_stream_media\">Media</string>\n    <string name=\"default_volume_stream_tip\">Notification</string>\n    <string name=\"open_with_test_picture\">Picture</string>\n    <string name=\"open_with_test_audio\">Audio</string>\n    <string name=\"open_with_test_media\">Video</string>\n    <string name=\"open_with_test_doc\">Document</string>\n    <string name=\"open_with_test_zip\">File</string>\n    <string name=\"open_with_test_all\">All</string>\n    <string name=\"location_custom\">Custom</string>\n    <string name=\"operator_fix_none\">Not repair</string>\n    <string name=\"operator_fix_1\">Method 1</string>\n    <string name=\"operator_fix_2\">Method 2 (recommended)</string>\n    <string name=\"custom_hook_new\">Add hook</string>\n    <string name=\"custom_hook_mode\">Select mode</string>\n    <string name=\"cemiuiler_notice\">Pull down the status bar to display shortcut switches and system notifications</string>\n    <string name=\"cemiuiler_restart_quick\">Quickly restart apps</string>\n    <string name=\"location_add\">Add</string>\n    <string name=\"location_delete\">Delete</string>\n    <!--Tip-->\n    <string name=\"tip_0\">Tip: Here\\'s a tip!</string>\n    <string name=\"tip_1\">Tip: You can support us by donating in \\\"About - Support\\\".</string>\n    <string name=\"tip_2\">Tip: Want to contact to developer? Telegram@Sevtinge_PM_bot or Bilibili@绀漓丨Sevtinge.</string>\n    <string name=\"tip_3\">Tip: Want to join the official group? Telegram@cemiuiler or search 247909573 in QQ.</string>\n    <string name=\"tip_4\">Tip: Cemiuiler = Ceiler + MIUI, Ceiler = Ceil + er.</string>\n    <string name=\"tip_5\">Tip: Guess how many more times you have to see this tip again?</string>\n    <string name=\"tip_6\">Tip: Make MIUI Great Again!</string>\n    <string name=\"tip_7\">Tip: Welcome to follow Github@sevtinge or Bilibili@绀漓丨Sevtinge.</string>\n    <string name=\"tip_8\">Tip: The ideal Utopia does not exist in reality.</string>\n    <string name=\"tip_9\">Tip: Sanjiang City tends to collapse.</string>\n    <string name=\"tip_10\">Tip: Ah, this world is so beautiful…       It\\'s a pity that this beauty does not belong to Sevtinge.</string>\n    <string name=\"tip_11\">Tip: I\\'ve kept some bugs so you know you\\'re using Cemiuiler.</string>\n    <string name=\"tip_12\">Tip: Do you know? In fact, Tips is all nonsense. (Convinced)</string>\n    <string name=\"tip_13\">Tip: Do you know? Cemiuiler\\'s birthday is on May 1, and Sevtinge\\'s birthday is on February 2.</string>\n    <string name=\"tip_14\">Tip: Sevtinge studied at the School of Information Engineering and Technology of Sanjiang City Campus of Shanhe University.</string>\n    <string name=\"tip_15\">Tip: I heard that Sevtinge has two different forms.</string>\n    <string name=\"tip_16\">Tip: Sevtinge is a little fox! (Cross out)</string>\n    <string name=\"tip_17\">Tip: Ling Qiqi has two personalities, one is a cat girl control, and the other is a loli control (x</string>\n    <string name=\"tip_18\">Tip: Cemiuiler is the fastest battery draining system app (grumpy speech)</string>\n    <string name=\"tip_19\">Tip: If there is no special annotation for the function that turns gray, it means that the function is abnormal, and it is not planned to be opened to users for the time being</string>\n    <string name=\"tip_20\">Tip: Don’t chase the new version of Canary if you have nothing to do, and don’t rush to update if it’s broken (</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<resources>\n    <style name=\"Base.Theme.Cemiuiler.DayNight\" parent=\"Theme.AppCompat.DayNight.DarkActionBar\">\n        <item name=\"preferenceTheme\">@style/PreferenceThemeOverlay.Light</item>\n        <item name=\"rebootIconColor\">@color/black</item>\n        <item name=\"android:windowTranslucentNavigation\">true</item>\n        <item name=\"seekBarPreferenceExStyle\">@style/Preference.SeekBarPreferenceEx</item>\n    </style>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Base.Theme.Cemiuiler.DayNight\"/>\n\n    <style name=\"AppTheme.Translucent\" parent=\"Theme.AppCompat.DayNight.DarkActionBar\">\n        <item name=\"android:windowBackground\">@color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowTranslucentStatus\">true</item>\n        <item name=\"android:windowTranslucentNavigation\">true</item>\n        <item name=\"android:windowAnimationStyle\">@null</item>\n        <item name=\"android:windowEnterAnimation\">@null</item>\n        <item name=\"android:windowExitAnimation\">@null</item>\n    </style>\n\n    <style name=\"AppTheme.Translucent.NoActionBar\">\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowActionBarOverlay\">false</item>\n    </style>\n\n    <style name=\"Preference.SeekBarPreferenceEx\" parent=\"@style/Preference\">\n        <item name=\"android:layout\">@layout/preference_widget_seekbar</item>\n    </style>\n\n</resources>"
  },
  {
    "path": "app/src/main/res/values-ja-rJP/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">MIUI を再び偉大な物にしましょう!</string>\n    <string name=\"new_permission_wifi_state_desc\">デバイスの内部ストレージ上のファイルを追加および削除</string>\n    <string name=\"new_permission_location_desc\">緯度や経度などのサービスを提供するために使用</string>\n    <string name=\"new_cta_agree_desc\">使用中、より多くの機能を提供するために root/su 権限の許可を求める場合があります。アクセス許可の管理に移動すると、いつでもすべてのアクセス許可を変更できます。root/su 権限については、お使いの root/su マネージャーにアクセスして変更してください。</string>\n    <string name=\"new_cta_app_main_purpose\">システムアプリの変更</string>\n    <string name=\"new_cta_app_all_purpose_title\">Cemiuiler へようこそ。このアプリは MIUI の機能強化をするために Xposed フレームワークを利用して対応アプリを改変します。使用中、より多くの機能を提供するために root/su 権限の許可を求める場合があります。お使いの root/su マネージャーにアクセスして許可してください。</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">Japanese (日本語)</string>\n    <string name=\"translator\">AndroPlus</string>\n    <string name=\"translator_url\">https://github.com/AndroPlus-org</string>\n    <string name=\"settings\">設定</string>\n    <string name=\"about\">アプリについて</string>\n    <string name=\"about_use\">引用</string>\n    <string name=\"about_use_desc\">Cemiuiler は、以下のオープンソースプロジェクトのソースを一部または全部使用しています。これらのプロジェクトの開発者の方々に感謝をします。 (順不同)</string>\n    <string name=\"about_contributer\">貢献者</string>\n    <string name=\"about_contributer_desc\">Cemiuiler の開発に協力をして頂いた以下の方々に感謝をします。 (順不同)</string>\n    <string name=\"about_donation\">スポンサー</string>\n    <string name=\"about_donation_desc\">寄付はこちらから</string>\n    <string name=\"about_privacy\">プライバシーポリシー</string>\n    <string name=\"about_protocol\">利用規約</string>\n    <string name=\"settings_data_title\">バックアップと復元</string>\n    <string name=\"settings_bug_title\">トラブルシューティング</string>\n    <string name=\"settings_debug_title\">デバッグ</string>\n    <string name=\"settings_hide_app_icon\">ホーム画面のアイコン</string>\n    <string name=\"settings_icon\">設定アイコン</string>\n    <string name=\"settings_icon_desc\">システム設定でモジュールエントリの場所を設定します</string>\n    <string name=\"settings_icon_disable\">無効</string>\n    <string name=\"settings_icon_top\">上部</string>\n    <string name=\"settings_icon_medium\">中間</string>\n    <string name=\"settings_icon_down\">下部</string>\n    <string name=\"settings_icon_mode\">アイコンのスタイル</string>\n    <string name=\"settings_icon_miui_14\">丸みを帯びた長方形のスタイル</string>\n    <string name=\"settings_icon_miui_13\">背景の切り抜きスタイル</string>\n    <string name=\"settings_reboot\">ターゲットアプリを再起動</string>\n    <string name=\"settings_back\">モジュールの設定をバックアップ</string>\n    <string name=\"settings_rest\">モジュールの設定を復元</string>\n    <string name=\"settings_reset\">モジュールの設定をリセット</string>\n    <string name=\"reset_title\">リセットをしてもよろしいですか?</string>\n    <string name=\"reset_desc\">モジュールの設定をリセットすると、すべてのデータが削除されます!</string>\n    <string name=\"reset_okay\">モジュールの設定がリセットされました</string>\n    <string name=\"backup_success\">バックアップに成功</string>\n    <string name=\"backup_failed\">バックアップに失敗</string>\n    <string name=\"rest_title\">復元</string>\n    <string name=\"rest_success\">復元に成功</string>\n    <string name=\"rest_failed\">復元に失敗</string>\n    <string name=\"backup_ask\">バックアップを保存しますか?</string>\n    <string name=\"backup_permission\">このオプションは手動で許可する必要があります。</string>\n    <string name=\"rest_ask\">バックアップを復元しますか？</string>\n    <string name=\"rest_permission\">このオプションは手動で許可する必要があります。</string>\n    <string name=\"disable_detailed_log\">詳細なログを無効化</string>\n    <string name=\"disable_detailed_log_desc\">適用するには再起動してください</string>\n    <string name=\"settings_safe_mode\">セーフモード</string>\n    <string name=\"settings_safe_mode_desc\">モジュールの機能を停止</string>\n    <string name=\"about_developer_title\">開発者</string>\n    <string name=\"about_translator_title\">翻訳者</string>\n    <string name=\"about_chat_title\">ディスカッション</string>\n    <string name=\"about_other_title\">その他</string>\n    <string name=\"about_qq_group\">QQ グループ</string>\n    <string name=\"about_qq_channel\">QQ チャンネル</string>\n    <string name=\"about_tg_group\">Telegram グループ</string>\n    <string name=\"about_tg_channel\">Telegram チャンネル</string>\n    <string name=\"about_github\">ソースコード</string>\n    <string name=\"about_github_desc\">このプロジェクトは、AGPL-3.0ライセンスに基づいたオープンソースです</string>\n    <string name=\"about_offical\">公式 Web サイト</string>\n    <string name=\"about_crwd\">Crowdin</string>\n    <string name=\"about_crwd_desc\">Cemiuiler の翻訳にご協力ください</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">再起動 </string>\n    <string name=\"restart_app_desc\">%1$s を再起動してもよろしいですか?</string>\n    <string name=\"tip\">ヒント</string>\n    <string name=\"hook_failed\">モジュールが有効化されていません。\\nXposed マネージャーがインストールされているか、モジュールが有効化されているか確認して再起動してください。</string>\n    <string name=\"kill_failed\">プロセスの終了に失敗しました。Cemiuiler に root 権限が付与されているか確認してください。</string>\n    <string name=\"pid_failed\">対象のアプリは現在実行されていないため、再起動する必要はありません。</string>\n    <string name=\"reboot_failed\">再起動に失敗しました。Cemiuiler に root 権限が付与されているか確認してください。</string>\n    <string name=\"expand_button_title\">高レベル</string>\n    <string name=\"not_set\">未設定</string>\n    <string name=\"copy\">コピー</string>\n    <string name=\"more\">詳細</string>\n    <string name=\"clearable_edittext_clear_description\">クリア</string>\n    <string name=\"preference_on\">有効</string>\n    <string name=\"preference_off\">無効</string>\n    <string name=\"preference_copied\"> %1$s をクリップボードにコピーしました</string>\n    <string name=\"preference_default_value_text\">デフォルト</string>\n    <string name=\"preference_dialog_color_picker_default_title\">色を選択</string>\n    <string name=\"preference_dialog_color_picker_presets\">プリセットカラー</string>\n    <string name=\"preference_dialog_color_picker_custom\">カスタムカラー</string>\n    <string name=\"preference_dialog_color_picker_transparency\">透過</string>\n    <string name=\"preference_dialog_color_picker_select\">選択を確認</string>\n    <string name=\"abc_action_bar_home_description\">ホームページに戻る</string>\n    <string name=\"abc_action_bar_up_description\">前の階層に戻る</string>\n    <string name=\"actionbar_button_up_description\">戻る</string>\n    <string name=\"appcompat_action_mode_select_all\">すべて選択</string>\n    <string name=\"appcompat_cancel_description\">キャンセル</string>\n    <string name=\"appcompat_confirm_description\">OK</string>\n    <string name=\"appcompat_select_all_description\">すべて選択</string>\n    <string name=\"appcompat_deselect_all_description\">すべての選択を解除</string>\n    <string name=\"appcompat_delete_description\">削除</string>\n    <string name=\"appcompat_search_action_mode_cancel\">キャンセル</string>\n    <string name=\"appcompat_search_input_description\">検索</string>\n    <string name=\"appcompat_actionbar_immersion_button_more_description\">詳細</string>\n    <string name=\"appcompat_action_mode_inverse\">反転</string>\n    <string name=\"color_picker_alpha_text_transparent\">不透明度</string>\n    <string name=\"color_picker_tab_grid\">グリッド</string>\n    <string name=\"color_picker_tab_slider\">スライダー</string>\n    <string name=\"color_picker_view_page_text_hue\">色相</string>\n    <string name=\"color_picker_view_page_text_lightness\">明度</string>\n    <string name=\"color_picker_view_page_text_saturation\">彩度</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">上の余白</string>\n    <string name=\"bottom_margin\">下の余白</string>\n    <string name=\"left_margin\">左の余白</string>\n    <string name=\"right_margin\">右の余白</string>\n    <string name=\"vertical_offset\">上下のオフセット</string>\n    <string name=\"horizontal_alignment\">水平方向の配置</string>\n    <string name=\"feature\">機能</string>\n    <string name=\"recommend\">おすすめ</string>\n    <string name=\"editor\">編集者</string>\n    <string name=\"record\">録画</string>\n    <string name=\"shot\">スクショ</string>\n    <string name=\"portrait\">ポートレート</string>\n    <string name=\"camera_pro\">プロ</string>\n    <string name=\"enable\">有効化</string>\n    <string name=\"custom_enable\">カスタムを有効化</string>\n    <string name=\"search\">検索</string>\n    <string name=\"floating_window\">フリーフォーム</string>\n    <string name=\"save_to_screen_title\">保存場所の変更</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">デフォルト</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">展開</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">コンテンツの幅を修正</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">水平ジッタを防止します</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">太字</string>\n    <!--Multi-list Array-->\n    <string name=\"array_close\">閉じる</string>\n    <string name=\"array_default\">デフォルト</string>\n    <string name=\"array_align_left\">左</string>\n    <string name=\"array_align_right\">右</string>\n    <string name=\"array_align_center\">中央</string>\n    <string name=\"array_netspeedicons_no\">アイコンなし</string>\n    <string name=\"array_bold\">太字</string>\n    <string name=\"array_theme\">テーマに従う</string>\n    <string name=\"array_clock_center\">時計を中央に表示</string>\n    <string name=\"array_clock_right\">時計を右側に表示</string>\n    <string name=\"array_clock_center_and_icon_left\">時計は中央、アイコンは左に表示</string>\n    <string name=\"array_clock_default\">デフォルト</string>\n    <string name=\"array_clock_geek\">ギーク</string>\n    <string name=\"array_battery_both\">両方</string>\n    <string name=\"array_battery_power\">電源のみ</string>\n    <string name=\"array_battery_current\">現在のみ</string>\n    <string name=\"array_battery_temp\">バッテリーの温度</string>\n    <string name=\"array_cpu_temp\">CPU の温度</string>\n    <string name=\"array_global_actions_none\">アクションなし</string>\n    <string name=\"array_global_actions_notif\">通知センターを開く</string>\n    <string name=\"array_global_actions_eqs\">クイック設定パネルを展開する</string>\n    <string name=\"array_global_actions_lock\">ロック画面</string>\n    <string name=\"array_global_actions_sleep\">画面を閉じる</string>\n    <string name=\"array_global_actions_screenshot\">スクリーンショット</string>\n    <string name=\"array_global_actions_menu\">メニューを開く</string>\n    <string name=\"array_global_actions_recents\">アプリ履歴を開く</string>\n    <string name=\"array_global_actions_volume\">音量ダイアログを開く</string>\n    <string name=\"array_global_actions_volume_up\">音量アップ</string>\n    <string name=\"array_global_actions_volume_down\">音量ダウン</string>\n    <string name=\"array_global_actions_launch\">アプリを起動</string>\n    <string name=\"array_global_actions_launch_choose\">アプリを選択</string>\n    <string name=\"array_global_actions_shortcut\">ショートカットを起動</string>\n    <string name=\"array_global_actions_activity\">アクティビティを起動</string>\n    <string name=\"array_global_actions_toggle\">機能の切り替え</string>\n    <string name=\"array_global_actions_back\">前のアプリに切り替える</string>\n    <string name=\"array_global_actions_forceclose\">現在のアプリを強制終了する</string>\n    <string name=\"array_global_actions_powermenu\">電源メニューを開く</string>\n    <string name=\"array_global_actions_powermenu_short\">電源メニュー</string>\n    <string name=\"array_global_actions_clear_memory\">メモリを解放</string>\n    <string name=\"array_global_actions_invert_colors\">色反転</string>\n    <string name=\"array_global_actions_switchkeyboard\">キーボードの切り替え</string>\n    <string name=\"array_global_actions_goback\">戻る</string>\n    <string name=\"array_global_actions_onehanded_left\">片手操作モード (左)</string>\n    <string name=\"array_global_actions_onehanded_right\">片手操作モード (右)</string>\n    <string name=\"array_global_actions_scrolltotop\">一番上にスクロール</string>\n    <string name=\"array_global_actions_expandsidebar\">サイドバーを表示</string>\n    <string name=\"array_global_actions_floatingwindow\">フローティングウィンドウ</string>\n    <string name=\"array_global_actions_pinningwindow\">ウィンドウをピン留め</string>\n    <string name=\"array_align_top\">上部</string>\n    <string name=\"array_align_bottom\">下部</string>\n    <string name=\"array_discrete\">分離する</string>\n    <string name=\"array_gradual\">低速</string>\n    <string name=\"array_rainbow\">虹</string>\n    <string name=\"various_install_app_info_version_name\">バージョン名</string>\n    <string name=\"various_install_app_info_version_code\">バージョンコード</string>\n    <string name=\"various_install_app_info_sdk\">対応している SDK</string>\n    <string name=\"various_install_app_size\">サイズ</string>\n    <string name=\"charge_animation_entries_disable\">無効</string>\n    <string name=\"charge_animation_entries_aura\">オーラ</string>\n    <string name=\"charge_animation_entries_stream\">ストリーマー</string>\n    <string name=\"charge_animation_entries_alpha\">リズム</string>\n    <string name=\"status_bar_icon_mode_default\">デフォルト</string>\n    <string name=\"status_bar_icon_mode_on\">常に表示</string>\n    <string name=\"status_bar_icon_mode_off\">常に非表示</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">未接続時のみ非表示</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">着信の前にのみ表示</string>\n    <string name=\"seek_points_roll\">画面をスワイプしたときにのみ表示</string>\n    <string name=\"seek_points_edit\">編集モードのときのみ表示</string>\n    <string name=\"home_mode_day\">ライトモード</string>\n    <string name=\"home_mode_dark\">ダークモード</string>\n    <string name=\"dialog_gravity_medium\">中央</string>\n    <string name=\"dialog_gravity_down\">下部</string>\n    <string name=\"collapse_miui_title_off\">たたむ</string>\n    <string name=\"collapse_miui_title_on\">展開</string>\n    <string name=\"collapse_miui_title_off_always\">常に折りたたむ</string>\n    <string name=\"collapse_miui_title_on_always\">常に展開</string>\n    <string name=\"link_open_mode_default\">システムのデフォルト</string>\n    <string name=\"link_open_mode_mi\">Xiaomi ブラウザー</string>\n    <string name=\"app_sort_running\">デフォルトの並び順</string>\n    <string name=\"app_sort_name\">アプリ名</string>\n    <string name=\"app_sort_frequency\">使用頻度</string>\n    <string name=\"app_sort_storage\">ストレージの使用量</string>\n    <string name=\"app_sort_install\">インストール日時</string>\n    <string name=\"array_bluetooth_tile_style_3rows\">3つの大きなタイル</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\">大きいタイル1枚と小さいタイル2枚</string>\n    <string name=\"array_pa_blur_official\">公式のぼかし</string>\n    <string name=\"array_bpa_blur_customize\">カスタム背景ぼかし</string>\n    <string name=\"control_center_sunshine_mode_default\">オフ</string>\n    <string name=\"control_center_sunshine_mode_one\">システムのデフォルトモード</string>\n    <string name=\"control_center_sunshine_mode_two\">明るさを最大に強制</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">システムフレームワーク</string>\n    <string name=\"system_framework_volume_title\">音量</string>\n    <string name=\"system_framework_other_title\">その他</string>\n    <string name=\"system_framework_display_title\">ディスプレイ</string>\n    <string name=\"system_framework_phone_title\">ネットワーク</string>\n    <string name=\"system_framework_bubble_title\">バブル通知</string>\n    <string name=\"system_framework_freeform_count\">複数のフリーフォーム</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">小さなフリーフォームを強制的に許可</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">システムのブラックリストとアプリによるフリーフォームの制限を無視します</string>\n    <string name=\"system_framework_freeform_sticky\">状態を記憶</string>\n    <string name=\"system_framework_freeform_bubble\">バブルフリーフォーム</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">すべてをミニフリーフォームに変える</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">アプリ履歴で、すべてのフリーフォームをミニフリーフォームにします\\nこの機能は実験的で不安定です</string>\n    <string name=\"system_framework_freeform_jump\">別のアプリに移動したときにフリーフォームで開く</string>\n    <string name=\"system_framework_freeform_title_desc\">以下の選択したアクション時に、他のアプリに移動する必要がある場合はフリーフォームを使用して開きます</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">リンクのみ対応</string>\n    <string name=\"system_framework_default_volume_stream\">デフォルトで音量を調整</string>\n    <string name=\"system_framework_volume_first_press\">即座な音量調整</string>\n    <string name=\"system_framework_volume_separate_control\">独立した音量コントロール</string>\n    <string name=\"system_framework_volume_disable_safe\">大音量の警告を無効化</string>\n    <string name=\"system_framework_volume_separate_slider\">通知の音量スライダー</string>\n    <string name=\"system_framework_volume_media_steps\">メディアの音量レベル</string>\n    <string name=\"system_framework_volume_media_steps_desc\">オンにすると、音量バーのスクロールがフリーズしたり、Bluetooth の音量が異常になったりする場合があります</string>\n    <string name=\"system_framework_volume_steps\">音量のステップ数</string>\n    <string name=\"system_ui_display_cutout_title\">画面のノッチ</string>\n    <string name=\"system_ui_display_hide_cutout\">画面のノッチを隠す</string>\n    <string name=\"system_ui_display_brightness_title\">明るさ</string>\n    <string name=\"system_ui_display_auto_brightness\">明るさの自動調整範囲</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">明るさの自動調整での最小値と最大値を設定します</string>\n    <string name=\"system_ui_display_min_brightness\">明るさの最小値</string>\n    <string name=\"system_ui_display_max_brightness\">明るさの最大値</string>\n    <string name=\"system_ui_display_toast_times_title\">表示時間の調整</string>\n    <string name=\"system_ui_display_toast_times_desc\">トーストの表示時間を変更します。表示時間は最小でも1秒です</string>\n    <string name=\"system_framework_phone_network_title\">ネットワーク設定</string>\n    <string name=\"phone_double_5g_nr\">2枚の SIM で 5G を使用 (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">メインとセカンダリの SIM カードで同時に 5G を有効にします (セカンダリ SIM カードは NSA にのみ対応しています)</string>\n    <string name=\"phone_double_5g_sa\">2枚の SIM で SA を使用 (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">実験的な機能です。セカンダリ SIM カードも SA 対応にします</string>\n    <string name=\"system_framework_phone_band_title\">バンド設定</string>\n    <string name=\"phone_n1\">N1 バンド</string>\n    <string name=\"phone_n1_desc\">N1 バンド (NR) 対応を有効化します</string>\n    <string name=\"phone_n28\">N28 バンド</string>\n    <string name=\"phone_n28_desc\">N28 バンド (NR) 対応を有効化します</string>\n    <string name=\"phone_n5_n8\">N5/N8 バンド</string>\n    <string name=\"phone_n5_n8_desc\">電話アプリで *#*#65686633#*#* と入力して N5/N8 バンド対応を有効化できるようにします。「N5とN8モードを有効化しました」と表示されれば、機能は正常に有効になっています</string>\n    <string name=\"system_framework_screen_all_rotations\">画面の回転</string>\n    <string name=\"system_framework_allow_untrusted_touch\">信頼されていないタッチ操作を許可</string>\n    <string name=\"system_framework_allow_uninstall\">一部のプリインストールアプリのアンインストールを許可する</string>\n    <string name=\"system_framework_allow_uninstall_desc\">この機能は危険です</string>\n    <string name=\"system_framework_disable_app_link_verify\">アプリのリンク検証を無効化</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">アプリ設定で対応リンクを有効化しなくても、リンクを開いたときに対応しているアプリで直接開くようにします</string>\n    <string name=\"system_framework_clean_share_menu\">共有メニューを整理する</string>\n    <string name=\"system_framework_clean_share_apps\">選択中のアプリ</string>\n    <string name=\"system_framework_clean_share_apps_desc\">選択したアプリは共有メニューに表示されません</string>\n    <string name=\"system_framework_clean_open_menu\">「アプリで開く」メニューを整理する</string>\n    <string name=\"system_framework_clean_open_apps\">選択中のアプリ</string>\n    <string name=\"system_framework_clean_open_apps_desc\">選択したアプリは「アプリで開く」メニューに表示されません</string>\n    <string name=\"system_other_flag_secure\">スクリーンショットを許可</string>\n    <string name=\"system_other_flag_secure_desc\">あらゆるアプリでのスクリーンショットや画面録画を許可します</string>\n    <string name=\"system_other_delete_on_post_notification\">オーバーレイアプリの通知を無効化</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">「他のアプリの上に表示されています」の通知を無効化します</string>\n    <string name=\"system_framework_share_menu_test\">共有メニューをテスト</string>\n    <string name=\"system_framework_open_with_menu_test\">「アプリで開く」メニューのテスト</string>\n    <string name=\"system_framework_other_use_original_animation\">ネイティブスタイルの遷移アニメーションを使用する</string>\n    <string name=\"system_framework_other_speed_install\">スピードインストール</string>\n    <string name=\"system_framework_other_speed_install_desc\">インストール速度を上げるためにメモリへインストールします</string>\n    <string name=\"system_framework_other_thermal_brightness\">自動的な明るさ制限を無効化</string>\n    <string name=\"system_framework_other_thermal_brightness_more\">高温時でも明るさを減少させないようにします</string>\n    <string name=\"system_framework_other_disable_cleaner\">バックグラウンドアプリの強制終了を無効化</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">実験的な機能です。メモリ使用が異常になる可能性があります</string>\n    <string name=\"system_framework_disable_72h_verify\">72時間ごとのロック画面の認証を無効化</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">パッケージマネージャーサービス</string>\n    <string name=\"system_framework_core_patch_downgr\">ダウングレードを許可</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">アプリのダウングレードを許可します</string>\n    <string name=\"system_framework_core_patch_auth_creak\">ダイジェスト認証を無効にする</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">改変されたapkのインストールを許可します(無効なダイジェストエラーを無視)</string>\n    <string name=\"system_framework_disable_integrity\">システムの整合性チェックを無効化</string>\n    <string name=\"system_framework_disable_integrity_desc\">改ざんされたコンテンツの自動復元を禁止します。「ダイジェスト認証を無効にする」機能をオンにすると、デフォルトで有効になります。\\nAndroid 13 以降のみ対応しています</string>\n    <string name=\"system_framework_core_patch_digest_creak\">比較署名を無効にする</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">異なる署名を持つアプリの再インストールを許可します</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">インストール済みの署名を使用</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">この機能は非常に危険です。必要なときにのみ有効にしてください</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">エンハンスモード</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">アプリケーションのいくつかの検証に合格させます</string>\n    <!--Browser-->\n    <string name=\"browser\">ブラウザー</string>\n    <string name=\"browser_debug_mode\">開発者オプションの有効化</string>\n    <string name=\"browser_debug_mode_desc\">17.5.xxxxx 以降はサポートされていません</string>\n    <!--Camera-->\n    <string name=\"camera\">カメラ</string>\n    <string name=\"camera_features_unlock_aiwatermark\">AI の透かしをアンロック</string>\n    <string name=\"camera_features_unlock_ambilight\">長時間露出をアンロック</string>\n    <string name=\"camera_features_unlock_clone\">クローンモードをアンロック</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">ポケットミラーをアンロック</string>\n    <string name=\"camera_features_unlock_doc\">ドキュメントモードをアンロック</string>\n    <string name=\"camera_features_unlock_idcard\">ID カードモードをアンロック</string>\n    <string name=\"camera_features_unlock_dualcam\">デュアルカメラをアンロック</string>\n    <string name=\"camera_features_unlock_duration\">タイムラプス撮影をアンロック</string>\n    <string name=\"camera_features_unlock_milive\">ショートビデオをアンロック</string>\n    <string name=\"camera_features_unlock_moon\">スーパームーンモードをアンロック</string>\n    <string name=\"camera_features_unlock_pano\">パノラマモードをアンロック</string>\n    <string name=\"camera_features_unlock_pixel\">超解像度モードをアンロック</string>\n    <string name=\"camera_features_unlock_portrait\">ポートレートモードをアンロック</string>\n    <string name=\"camera_features_unlock_slow\">スローモーションをアンロック</string>\n    <string name=\"camera_features_unlock_videosky\">ビデオスカイをアンロック</string>\n    <string name=\"camera_features_unlock_vlog\">Vlog をアンロック</string>\n    <string name=\"camera_features_unlock_vlog_pro\">Vlog Pro をアンロック</string>\n    <string name=\"camera_features_unlock_film\">フィルムカメラをアンロック</string>\n    <string name=\"camera_features_unlock_film_delay\">長時間露光ディレイをアンロック</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">ドリーズームをアンロック</string>\n    <string name=\"camera_features_unlock_film_dream\">パラレルドリームをアンロック</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">スローシャッターをアンロック</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">タイムワープをアンロック</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">タイムスタシスをアンロック</string>\n    <string name=\"camera_shot_hand_gesture\">手のひらジェスチャー撮影をアンロック</string>\n    <string name=\"camera_shot_color_enhance\">色の強化をアンロック</string>\n    <string name=\"camera_shot_makeup\">メイクアップをアンロック</string>\n    <string name=\"camera_shot_makeup_desc\">フロントカメラを使用している場合にのみ効果があります</string>\n    <string name=\"camera_record_60fps\">60FPS をアンロック</string>\n    <string name=\"camera_record_60fps_desc\">一部の品質では使用できません。お使いのデバイスが対応していることを確認してください</string>\n    <string name=\"camera_record_120fps\">120FPS をアンロック</string>\n    <string name=\"camera_record_120fps_desc\">4K 品質の場合にのみ対応しています。お使いのデバイスが対応していることを確認してください</string>\n    <string name=\"camera_record_audio_zoom\">オーディオズームをアンロック</string>\n    <string name=\"camera_record_hdr\">HDR をアンロック</string>\n    <string name=\"camera_record_ai\">AI モードをアンロック</string>\n    <string name=\"camera_portrait_new_beauty\">新しいビューティーモードをアンロック</string>\n    <string name=\"camera_portrait_new_beauty_desc\">フロントカメラを使用している場合にのみ効果があります</string>\n    <string name=\"camera_portrait_cvlens\">マスターレンズをアンロック</string>\n    <string name=\"camera_portrait_cvlens_desc\">一部のデバイスでは正常に動作しません</string>\n    <string name=\"camera_pro_raw\">RAW をアンロック</string>\n    <string name=\"camera_pro_log\">LOG をアンロック</string>\n    <string name=\"camera_settings_heic\">HEIF をアンロック</string>\n    <string name=\"camera_settings_track_focus\">モーショントラッキングフォーカスをアンロック</string>\n    <string name=\"camera_settings_predictive\">モーションキャプチャをアンロック</string>\n    <string name=\"camera_settings_nevus\">ほくろ除去をアンロック</string>\n    <string name=\"camera_settings_men_makeup\">男性用のメイクアップ効果をアンロック</string>\n    <string name=\"camera_settings_lab_options\">ラボオプションを有効化</string>\n    <string name=\"camera_settings_track_eyes\">目のトラッキングをアンロック</string>\n    <!--Clock-->\n    <string name=\"clock\">時計</string>\n    <string name=\"clock_enable_hour_glass\">タイマーの砂時計アニメーションをアンロック</string>\n    <string name=\"clock_enable_hour_glass_desc\">バージョン 13.65.0 以降はサポートされていません</string>\n    <!--File Manager-->\n    <string name=\"fileexplorer\">ファイルマネージャー</string>\n    <string name=\"file_explorer_can_selectable\">フォルダ名の長押しで選択可能にする</string>\n    <string name=\"file_explorer_is_single_line\">フォルダ名を1行で表示</string>\n    <!--Phone-->\n    <string name=\"incallui\">電話</string>\n    <string name=\"incallui_hide_crbt\">パーソナライズされたカラーバックトーンを非表示</string>\n    <string name=\"incallui_answer_in_head_up\">ヘッドアップ通知で応答</string>\n    <!--Message-->\n    <string name=\"mms\">メッセージ</string>\n    <string name=\"mms_disable_ad\">広告を無効化</string>\n    <string name=\"mms_disable_ad_desc\">SMS コンテンツの下部にあるショートカットとプロモーションを削除します</string>\n    <!--Phone Service-->\n    <string name=\"phone\">電話サービス</string>\n    <string name=\"phone_smart_dual_sim\">スマートデュアル SIM をアンロック</string>\n    <string name=\"phone_vice_slot_volte\">サブカードによる VoLTE 通話をアンロック</string>\n    <string name=\"phone_vice_slot_volte_desc\">VoLTE 通話中に2枚目の SIM でモバイルデータを使用します</string>\n    <!--Download management program-->\n    <string name=\"downloads\">ダウンロードマネージャー</string>\n    <string name=\"various_fuck_xlDownload\">.xlDownload フォルダの作成をブロック</string>\n    <string name=\"various_fuck_xlDownload_desc\">ダウンロードマネージャが内部ストレージのルート上に .xlDownload フォルダを生成することを防止します</string>\n    <!--System UI-->\n    <string name=\"system_ui\">システム UI</string>\n    <string name=\"system_ui_lockscreen_title\">ロック画面</string>\n    <string name=\"system_ui_lockscreen_safe_title\">セキュリティ</string>\n    <string name=\"system_ui_lockscreen_ui_title\">UI</string>\n    <string name=\"system_ui_lockscreen_information_title\">情報</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">ランダム PIN</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">PIN キーパッドの順序をランダムにします</string>\n    <string name=\"system_ui_lock_screen_password_free\">起動時にパスワードを入力する必要はありません</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">デバイスの暗号化が有効になっていない場合にのみ効果があります</string>\n    <string name=\"system_ui_lock_screen_password_free_tip\">デバイスは暗号化されています。この機能は利用できません</string>\n    <string name=\"system_ui_lock_screen_default_theme\">デフォルトのテーマのみをサポートします</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">ロック画面の下部に「充電中」の表示をする</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">電流の詳細を表示</string>\n    <string name=\"system_ui_lock_screen_show_battery_temperature\">バッテリー温度を表示</string>\n    <string name=\"system_ui_lock_screen_show_spacing\">表示の更新間隔</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">カメラを非表示</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">スマートスクリーンを非表示</string>\n    <string name=\"system_ui_lock_screen_current\">電流</string>\n    <string name=\"system_ui_lock_screen_show_second\">時計に秒を表示</string>\n    <string name=\"system_ui_lock_screen_blur_button\">カメラとサイドパネルのボタンをぼかす</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">システムフォントを時計に強制使用する</string>\n    <string name=\"system_ui_lock_screen_double_lock\">ロック画面のダブルタップ</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">空の場所をダブルタップすると画面をロックします</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">Zen モードの通知を非表示</string>\n    <string name=\"system_ui_lock_screen_unlock_tip_title\">画面下部のロック解除プロンプトを非表示</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">ロック画面からステータスバーを削除</string>\n    <string name=\"system_ui_navigation_title\">ナビゲーション</string>\n    <string name=\"system_ui_navigation_handle_title\">ハンドルライン</string>\n    <string name=\"system_ui_hide_navigation_bar\">ナビゲーションバーを非表示</string>\n    <string name=\"system_ui_hide_navigation_bar_more\">システムランチャーとシステム UI スコープの両方を再起動してください</string>\n    <string name=\"system_ui_navigation_handle_custom\">カスタムハンドルライン</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">高さ</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">縦向き時の幅</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">横向き時の幅</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">太さ</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">ライトモード時の色</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">ダークモード時の色</string>\n    <string name=\"system_ui_navigation_custom\">カスタムナビゲーション</string>\n    <string name=\"system_ui_navigation_custom_height\">ナビゲーションの高さ</string>\n    <string name=\"system_ui_navigation_custom_height_land\">横向き時のナビゲーションの高さ</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">ナビゲーションフレームの高さ</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">横向き時のナビゲーションフレームの高さ</string>\n    <string name=\"system_ui_statusbar_title\">ステータスバー</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">アイコンの管理</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">ネットワーク速度インジケータの管理</string>\n    <string name=\"system_ui_statusbar_clock_title\">時計の設定</string>\n    <string name=\"system_ui_statusbar_device_title\">ハードウェアインジケーター</string>\n    <string name=\"system_ui_statusbar_layout_title\">レイアウト</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_title\">互換モード</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_desc\">すべての特殊な形状の画面で、フルスクリーンレイアウトを強制的に有効にします</string>\n    <string name=\"system_ui_statusbar_layout_mode_title\">レイアウトモード</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">ダブルタップでスリープ</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">二行のシグナルバー</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">アイコンのスタイル</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">アイコンの大きさ</string>\n    <string name=\"system_ui_status_bar_mobile_type_single\">モバイルネットワークタイプのアイコンを別々に表示</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">信号の左側に表示</string>\n    <string name=\"system_ui_status_bar_mobile_type_only_show_network\">ネットワークカードのみ表示</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">モバイルネットワークアクティビティインジケーターを非表示</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">カスタムテキスト</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">フォントのサイズ</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">バッテリーアイコンとパーセント表示を入れ替える</string>\n    <string name=\"system_ui_status_bar_battery_style_font_size\">バッテリー残量のフォントサイズ</string>\n    <string name=\"system_ui_status_bar_battery_style_font_mark_size\">バッテリー残量記号のフォントサイズ</string>\n    <string name=\"system_ui_status_bar_battery_style_vertical_offset\">バッテリー残量記号の上下オフセット</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wi-Fi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">Bluetooth</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">モバイルネットワーク</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">位置情報</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">ステータスアイコン</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">通知アイコン</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">バッテリー</string>\n    <string name=\"system_ui_statusbar_iconmanage_call_title\">通話</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">アイコンを左側に表示</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">アイコンを右側に表示</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">補助 Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Wi-Fi 標準規格</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">Wi-Fi ホットスポット</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">ネットワークアクティビティインジケーター</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">Bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">Bluetoothのバッテリー残量</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">新しい HD アイコン</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">小さな HD アイコン</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">大きな HD アイコン</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">SIM カード未挿入アイコン</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">SIM カード 1 信号アイコン</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">SIM カード 2 信号アイコン</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">表示ロジック</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">大きなネットワークタイプアイコン</string>\n    <string name=\"system_ui_status_bar_icon_location\">位置情報</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">時計のアラーム</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">アラームが鳴る前にのみアラームアイコンを表示する</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d 時間</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">機内モード</string>\n    <string name=\"system_ui_status_bar_icon_vowifi\">VoWiFi アイコンを非表示</string>\n    <string name=\"system_ui_status_bar_icon_headset\">ヘッドセット</string>\n    <string name=\"system_ui_status_bar_icon_volume\">音量</string>\n    <string name=\"system_ui_status_bar_icon_data_saver\">データセーバー</string>\n    <string name=\"system_ui_status_bar_icon_zen\">Zen</string>\n    <string name=\"system_ui_status_bar_icon_stealth\">シークレットモードのアイコンを非表示</string>\n    <string name=\"system_ui_status_bar_icon_mute\">ミュートされたマイクアイコンを非表示</string>\n    <string name=\"system_ui_status_bar_icon_speakerphone\">スピーカーフォンのアイコンを非表示</string>\n    <string name=\"system_ui_status_bar_icon_call_record\">録画アイコンを非表示</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">通知ドットの最大数</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">表示する通知アイコンの最大数</string>\n    <string name=\"system_ui_status_bar_battery_percent\">バッテリー残量を非表示</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">バッテリー残量の%を非表示</string>\n    <string name=\"system_ui_status_bar_battery_charging\">充電中のインジケーターを非表示</string>\n    <string name=\"system_ui_status_bar_battery_icon\">バッテリーアイコンを非表示</string>\n    <string name=\"system_ui_status_bar_battery_style_title\">バッテリーのカスタマイズ</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">バッテリーインジケーター</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">モバイルネットワーク</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">Wi-Fi とモバイルネットワークの表示を入れ替える</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">インターネットの速度</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">サウンドシーン</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">新しい HD アイコンを強制的に使用する</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">一部の新しいシステムバージョンでのみ対応しています</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">ネットワーク速度のセパレーター</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">中央カメラのデバイスでは、時間とインターネット速度の間の垂直線は表示されません</string>\n    <string name=\"system_ui_status_bar_hide_icon\">スクリーンショット撮影時にステータスバーを非表示にする</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">モバイルネットワークタイプのアイコン</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">ネットワーク速度の更新間隔</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">ネットワーク速度のフォントサイズ</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">値と単位を二行で表示</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">上下のネットワーク速度を表示</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">アップロードとダウンロードの速度を二行で表示します</string>\n    <string name=\"system_ui_statusbar_network_speed_swap_places\">アップリンク・ダウンリンク速度とアイコンの位置を入れ替える</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">受信と送信のネットワーク速度を個別に表示します</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">遅いネットワーク速度を非表示</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_all\">アップリンクとダウンリンクの両方が遅いときは非表示にする</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">ネットワーク速度が遅い場合、インジケーターを表示しないようにします</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">低速とみなすネットワーク速度</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">このレベル以下のネットワーク速度は低速とみなされ、別のインジケータアイコンが表示されます（一部のアイコンのみ）</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">バイト毎秒の接尾辞 (*b/s) を非表示</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">インジケーターアイコン</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">カスタムを有効化</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_ms\">%d ms</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_s\">%d s</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_m\">%d m</string>\n    <string name=\"system_ui_statusbar_network_speed_format_KBs\">%d KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_oneKBs\">1 KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_Bs\">B/s</string>\n    <string name=\"system_ui_statusbar_network_speed_lux\">%s lux</string>\n    <string name=\"system_ui_statusbar_clock_mode\">カスタムクロックモード</string>\n    <string name=\"system_ui_statusbar_clock_editor\">時計のフォーマット</string>\n    <string name=\"system_ui_statusbar_clock_year\">年を表示</string>\n    <string name=\"system_ui_statusbar_clock_month\">月を表示</string>\n    <string name=\"system_ui_statusbar_clock_date\">日付を表示</string>\n    <string name=\"system_ui_statusbar_clock_week\">曜日を表示</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">デュアル時計を表示</string>\n    <string name=\"system_ui_statusbar_clock_period\">午前と午後を表示</string>\n    <string name=\"system_ui_statusbar_clock_second\">秒を表示</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">スペースを非表示</string>\n    <string name=\"system_ui_statusbar_clock_double\">二行で表示</string>\n    <string name=\"system_ui_statusbar_clock_double_mode_title\">二行の配置</string>\n    <string name=\"system_ui_statusbar_clock_desc\">時計形式の例</string>\n    <string name=\"system_ui_statusbar_clock_size\">時計のサイズ</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">二行の時計のサイズ</string>\n    <string name=\"system_ui_statusbar_indicator_battery_title\">電源関連</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">温度関連</string>\n    <string name=\"system_ui_statusbar_battery_size\">フォントのサイズ</string>\n    <string name=\"system_ui_statusbar_battery_show\">コンテンツを表示</string>\n    <string name=\"system_ui_statusbar_temp_decimal_places\">小数点以下を非表示</string>\n    <string name=\"system_ui_statusbar_battery_disable\">単位を非表示</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">右側に表示</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">電流を常に正の値で表示</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">単一行表示</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">順序を逆にする</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">充電時のみ表示</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">状態の更新間隔</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">CPU の温度を修正</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">/sys/devices/virtual/thermal/thermal_zone* の数を入力してください</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">中央</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">角を丸く</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">可視性を制限</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">垂直方向に配置</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">フル充電時の色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">低バッテリーの色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">省電力モード時の色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">充電時の色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">高さ</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">横方向の余白</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">透過</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">シャイン</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">低バッテリーレベル</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">テスト</string>\n    <string name=\"system_ui_controlcenter_title\">コントロールセンター</string>\n    <string name=\"system_ui_controlcenter_card_title\">カード</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">便利ツール</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">通知</string>\n    <string name=\"system_control_center_qs_detail_bg\">カード背景の透明度</string>\n    <string name=\"system_control_center_5g_tile\">5G ネットワークスイッチ</string>\n    <string name=\"system_control_center_5g_toggle_label\">5G ネットワーク</string>\n    <string name=\"system_control_center_sunshine_mode\">太陽光モード</string>\n    <string name=\"system_ui_control_auto_close\">タイルを自動的に閉じる</string>\n    <string name=\"system_ui_control_auto_close_more\">ステータスバーのタイルをタップしたとき、自動的にステータスバーを閉じるようにします</string>\n    <string name=\"system_control_center_qs_tile_label\">タイトルを削除</string>\n    <string name=\"system_control_center_qs_rows\">行</string>\n    <string name=\"system_control_center_qs_rows_format\">%d 行</string>\n    <string name=\"system_control_center_qs_rows_horizontal\">行数 (横画面)</string>\n    <string name=\"system_control_center_qs_columns\">列</string>\n    <string name=\"system_control_center_qs_columns_format\">%d 件のリスト</string>\n    <string name=\"system_control_center_qs_columns_horizontal\">列数 (横画面)</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">MiPlay エントリ</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">Mi スマートハブのエントリ</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">デバイス制御項目</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">コントロールセンター詳細の背景ぼかしの値</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">通知のぼかしモデル</string>\n    <string name=\"system_ui_control_center_notification_blur_fix\">通知の最適化</string>\n    <string name=\"system_ui_control_center_notification_blur_fix_desc\">実験的な機能で、Android 13以上のモデルでのみ利用可能です。有効にすると、一部の領域での通知のぼかしが最適化されます。\\n一部のモデルではシステム UI がクラッシュする場合があります。</string>\n    <string name=\"system_ui_control_center_blur_radius\">ぼかしの半径</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">ドロップダウン通知がない場合</string>\n    <string name=\"system_ui_control_center_corner_radius\">角の丸み</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">デフォルトのテーマでは調整する必要はありません</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">背景ぼかしの値</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">デフォルトの背景値</string>\n    <string name=\"system_ui_control_center_fix_media_control_panel\">メディアコントロールパネルを修正</string>\n    <string name=\"system_ui_control_center_compact_notice\">コンパクトな通知</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">通知の縦方向の余白を減らします</string>\n    <string name=\"system_ui_control_center_redirect_notice\">通知設定をリダイレクト</string>\n    <string name=\"system_ui_control_center_redirect_notice_desc\">通知メニューの設定を開いたとき、通知設定の適用ではなくターゲットチャンネルの設定に移動します</string>\n    <string name=\"system_ui_control_center_show_weather\">天気を表示</string>\n    <string name=\"system_ui_control_center_show_weather_city\">都市を表示</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">画面が ON のときはミュートする</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">画面がオンになっているとき、ポップアップ通知でプロンプト音を再生しません</string>\n    <string name=\"system_ui_control_center_rounded_rect\">丸みを帯びた長方形のタイル</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">コントロールセンターと通知ドロワーを切り替え</string>\n    <string name=\"system_ui_controlcenter_new_title\">新しいコントロールセンター</string>\n    <string name=\"system_ui_controlcenter_old_title\">従来のコントロールセンター</string>\n    <string name=\"system_ui_controlcenter_unlock_old_title\">コントロールセンターのスタイルをアンロック</string>\n    <string name=\"system_ui_controlcenter_enable_title\">行数と列数をカスタマイズ</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">縦向き時のラベルは5列分が隠されます。横向き時でラベル非表示を使用する場合、行数は3行に制限されます。</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">横向きでは列が1つ増えます\\nROM がコンパクトなクイック設定レイアウトに対応している場合は、両方の方向で1列追加されます</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">横向き時は1列追加されます</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">折りたたまれたパネルの行数</string>\n    <string name=\"system_control_center_old_qs_grid_columns_horizontal\">折りたたまれたパネル内の列数 (横画面)</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">Bluetooth タイルのスタイル</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">Bluetooth タイルをネットワークタイルの近くに移動する</string>\n    <string name=\"system_ui_other_title\">その他</string>\n    <string name=\"system_ui_charge_animation_title\">充電時のアニメーション</string>\n    <string name=\"system_ui_charge_animation_style\">充電アニメーションのスタイル</string>\n    <string name=\"system_ui_charge_animation_style_desc\">ロック画面の充電アニメーションのスタイルを選択します</string>\n    <string name=\"system_ui_origin_charge_animation\">ネイティブ充電アニメーション</string>\n    <string name=\"system_ui_another_title\">その他</string>\n    <string name=\"system_ui_notification_freeform\">他のアプリの通知バーをプルダウンしてフリーフォームを開く</string>\n    <string name=\"system_ui_notification_freeform_desc\">Mi Push からの通知では機能しない可能性があります</string>\n    <string name=\"system_ui_monet_title\">Monet</string>\n    <string name=\"system_ui_monet_overlay_custom\">テーマカラーをカスタマイズ</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">壁紙から色を抽出する代わりに、テーマカラーをカスタマイズします</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">テーマカラーを選択</string>\n    <string name=\"system_ui_volume_timer\">拡張されたタイマー</string>\n    <string name=\"system_ui_qs_label\">クイックスイッチタブ</string>\n    <string name=\"system_ui_notification_title\">通知</string>\n    <string name=\"system_ui_other_notification_fix\">通知のホワイトリストを無効化</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">音量バーのぼかしを有効化</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">Android 12 以降の MTKモデルのみ対応です。GPU 負荷が高くなる可能性があります</string>\n    <!--Settings-->\n    <string name=\"system_settings\">設定</string>\n    <string name=\"system_settings_international_build\">グローバルバージョンの設定を使用</string>\n    <string name=\"system_settings_safe_wifi\">保存された Wi-Fi パスワードを表示</string>\n    <string name=\"system_settings_safe_wifi_desc\">保存したネットワークの管理を有効化します\\n場所: 設定 - Wi-Fi - 追加設定 - 保存したネットワークを管理</string>\n    <string name=\"system_settings_wifipassword_btn_title\">確認</string>\n    <string name=\"system_settings_wifi_password_label\">パスワード</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">Wi-Fi の詳細</string>\n    <string name=\"system_settings_novelty_haptic_title\">新しいバージョンのタッチ調整ページをアンロック</string>\n    <string name=\"system_settings_novelty_haptic_desc\">サウンドとバイブレーション - 触覚フィードバックの設定があるデバイスのみ対応しています</string>\n    <string name=\"system_settings_enable_pad_area\">タブレットの機能をアンロック</string>\n    <string name=\"system_settings_enable_fold_area\">折りたたみ式デバイスの機能をアンロック</string>\n    <string name=\"system_settings_enable_area_desc\">サポートされていないデバイスの場合、アンロック後に設定がクラッシュします</string>\n    <string name=\"system_settings_connection_sharing_title\">接続と共有</string>\n    <string name=\"system_settings_new_nfc_page\">新しい NFC ページ</string>\n    <string name=\"system_settings_new_nfc_page_desc\">これを有効にすると、サポートされていないモデルではデフォルトの支払いアプリとしてMiウォレットを選択できません</string>\n    <string name=\"system_settings_accessibility_title\">ジェスチャーショートカット</string>\n    <string name=\"system_settings_area_screenshot\">部分的なスクリーンショットをアンロック</string>\n    <string name=\"system_settings_lab_title\">注目の機能</string>\n    <string name=\"system_settings_voip_assistant_controller\">VoIP アシスタント</string>\n    <string name=\"system_settings_ai_image_title\">AI 画像エンジン</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">超解像をアンロック</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">AI 画像補正と AI HDR 補正機能をアンロック</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">MEMC をアンロック</string>\n    <string name=\"system_settings_permission_title\">アクセス許可</string>\n    <string name=\"system_settings_permission_show_app_up\">アプリ一覧を検索せずに「他のアプリの上に重ねて表示」権限を表示</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">「他のアプリの上に重ねて表示」の権限スイッチに直接移動する、古い動作を復元します</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">アプリ一覧を検索せずに「不明なアプリのインストール」権限を表示</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">「不明なアプリのインストール」の権限スイッチに直接移動する、グローバル版と同様の動作にします</string>\n    <string name=\"system_settings_develop_title\">開発者オプション</string>\n    <string name=\"system_settings_apps_freezer\">「キャッシュに保存されたアプリの実行を停止」を強制的に表示</string>\n    <string name=\"system_settings_apps_freezer_more\">有効にすると開発者向けオプションで表示されますが、動作するかは不明です</string>\n    <string name=\"system_settings_develop_speed_mode\">エクストリームモード</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">サポートされていないモデルでは、オンにしても設定項目は表示されません</string>\n    <string name=\"system_settings_window_animation_scale\">ウィンドウアニメスケール</string>\n    <string name=\"system_settings_transition_animation_scale\">トランジションアニメスケール</string>\n    <string name=\"system_settings_animator_duration_scale\">Animator 再生時間スケール</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">テーマ</string>\n    <string name=\"theme_manager_version_code_modify\">MIUI のバージョン検出を無効にする</string>\n    <string name=\"theme_manager_diable_ads\">広告を無効化</string>\n    <string name=\"theme_manager_diable_ads_desc\">広告を空白のカードに置き換えて、残りの広告を完全に削除します</string>\n    <string name=\"theme_manager_crack\">テーマパッチ</string>\n    <string name=\"theme_manager_enable_pad_theme\">Pad テーマを有効化</string>\n    <string name=\"theme_manager_enable_fold_theme\">Fold テーマを有効化</string>\n    <!--Updater-->\n    <string name=\"updater\">アップデーター</string>\n    <string name=\"updater_fuck_vab\">OTA の認証を削除する</string>\n    <string name=\"updater_fuck_vab_desc\">VAB デバイスのみ対応です。VAB 以外のデバイスでは有効にしないでください！\\n- 内部テスト権限がなくても内部テスト版のインストールができるようになります\\n- 異なるバージョンをインストールした後はデータを消去することをおすすめします\\n- 非公式 ROM は非対応です\\n- この機能は危険なため、Fastboot の使い方を理解している場合のみ有効化してください</string>\n    <string name=\"updater_version_mode\">偽装の種類</string>\n    <string name=\"updater_big_version\">大型バージョンに偽装</string>\n    <string name=\"updater_big_version_desc\">Xiaomi HyperOS バージョンを偽装するときに記入する必要がある項目です。デフォルトは V816 です</string>\n    <string name=\"updater_miui_version\">アップデーターのバージョンを偽装する</string>\n    <string name=\"updater_miui_version_desc\">システムアップデートを変更し、一定期間システムアップデートを防止できます</string>\n    <string name=\"updater_device\">アップデーターでデバイスを偽装</string>\n    <string name=\"updater_device_desc\">ターゲットデバイスの ROM パッケージを取得するためのモデルコードを入力してください。この機能は非常に危険です</string>\n    <!--Permissions-->\n    <string name=\"lbe\">権限</string>\n    <string name=\"clipboard\">クリップボード</string>\n    <string name=\"lbe_disable_clipboard_tip\">トーストのヒントを隠す</string>\n    <string name=\"lbe_clipboard_tip_toast\">クリップボード読み取りのトーストヒント</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">ダイアログを非表示にし、アプリがデフォルトでクリップボードを読み込むことを許可します</string>\n    <string name=\"lbe_clipboard_tip\">クリップボードの読み取り</string>\n    <!--Cast-->\n    <string name=\"milink\">キャスト</string>\n    <string name=\"milink_unlock_mishare\">デバイスの相互接続をアンロック</string>\n    <!--Always-on display-->\n    <string name=\"aod\">常時オンディスプレイ</string>\n    <string name=\"aod_unlock_always_on_display\">常時オンディスプレイの時間制限をアンロック</string>\n    <!--Taplus-->\n    <string name=\"content_extension\">Taplus</string>\n    <string name=\"content_extension_browser\">サードパーティーのブラウザーを使用する</string>\n    <string name=\"content_extension_browser_desc\">Taplus の検索で MIUI ブラウザーの使用を強制しないようにします。デフォルトのブラウザーを自分で選択する必要があります。</string>\n    <string name=\"content_extension_unlock_taplus_title\">Taplus をアンロック</string>\n    <string name=\"content_extension_unlock_taplus_horizontal_title\">横向き画面での Taplus の使用を許可</string>\n    <string name=\"content_extension_double_press\">ジェスチャー：2本指</string>\n    <string name=\"content_extension_super_image\">最高画質で画像を保存するオプションを有効化</string>\n    <string name=\"content_extension_super_image_summary\">デバイスモデルが対応していなければ使用できません</string>\n    <string name=\"content_extension_link_open_mode\">リンクの開き方</string>\n    <string name=\"content_extension_link_open_mode_desc\">リンクを開く際のブラウザを選択してください</string>\n    <!--Mi Canvas-->\n    <string name=\"creation\">Mi Canvas</string>\n    <string name=\"creation_unlock\">デバイスの使用制限を解除</string>\n    <!--Gallery-->\n    <string name=\"gallery\">ギャラリー</string>\n    <string name=\"gallery_enable_hdr_enhanced\">ハイダイナミックレンジ表示をアンロック</string>\n    <string name=\"gallery_enable_pdf\">PDF の生成をアンロック</string>\n    <string name=\"gallery_enable_ocr\">OCR をアンロック</string>\n    <string name=\"gallery_enable_ocr_form\">表のスキャンをアンロック</string>\n    <string name=\"gallery_enable_id_photo\">ID をアンロック</string>\n    <string name=\"gallery_enable_photo_movie\">クリップ機能をアンロック</string>\n    <string name=\"gallery_enable_video_post\">ビデオエフェクトをアンロック</string>\n    <string name=\"gallery_enable_video_editor\">ビデオエディターをアンロック</string>\n    <string name=\"gallery_enable_text_yanhua\">テキスト花火をアンロック</string>\n    <string name=\"gallery_enable_remover_2\">消去機能をアンロック</string>\n    <string name=\"gallery_enable_magic_matting\">カットをアンロック</string>\n    <string name=\"gallery_enable_magic_sky\">空の合成をアンロック</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">MIUI セキュリティコンポーネント</string>\n    <string name=\"guard_provider_disable_upload_applist\">インストール済みアプリリストの自動アップロードを防止</string>\n    <!--System launcher-->\n    <string name=\"home\">システムランチャー</string>\n    <string name=\"home_gesture\">ジェスチャーとナビゲーション</string>\n    <string name=\"home_navigation_title\">ナビゲーション</string>\n    <string name=\"home_navigation_quick_back\">前のアプリに戻る</string>\n    <string name=\"home_navigation_quick_back_more\">画面の端から横にスワイプすると前のアプリに戻ります</string>\n    <string name=\"home_navigation_back_area_height\">背面ジェスチャー領域の高さ</string>\n    <string name=\"home_navigation_back_area_width\">背面ジェスチャー領域の幅</string>\n    <string name=\"home_gesture_title2\">ジェスチャー</string>\n    <string name=\"home_gesture_mainscreen_title\">メイン画面</string>\n    <string name=\"home_gesture_gesture_title\">フルスクリーンジェスチャー</string>\n    <string name=\"home_gesture_double_tap\">ダブルタップ</string>\n    <string name=\"home_gesture_double_tap_desc\">ホーム画面の任意の場所をダブルタップする</string>\n    <string name=\"home_gesture_shake\">シェイク</string>\n    <string name=\"home_gesture_shake_desc\">ホーム画面で端末を振る</string>\n    <string name=\"home_gesture_left_swipe\">左にスワイプ</string>\n    <string name=\"home_gesture_left_swipe_desc\">ホーム画面のドックを左にスワイプする</string>\n    <string name=\"home_gesture_right_swipe\">右にスワイプ</string>\n    <string name=\"home_gesture_right_swipe_desc\">ホーム画面のドックを右にスワイプする</string>\n    <string name=\"home_gesture_up_swipe\">上にスワイプ</string>\n    <string name=\"home_gesture_up_swipe_desc\">ホーム画面の任意の位置を1本指で上にスワイプする</string>\n    <string name=\"home_gesture_down_swipe\">下にスワイプ</string>\n    <string name=\"home_gesture_down_swipe_desc\">ホーム画面の任意の位置を1本指で下にスワイプする</string>\n    <string name=\"home_gesture_up_swipe2\">2 本の指で上にスワイプ</string>\n    <string name=\"home_gesture_up_swipe2_desc\">ホーム画面の任意の位置を2本指で上にスワイプする</string>\n    <string name=\"home_gesture_down_swipe2\">2 本の指で下にスワイプ</string>\n    <string name=\"home_gesture_down_swipe2_desc\">ホーム画面の任意の位置を2本指で下にスワイプする</string>\n    <string name=\"home_gesture_pinch\">2本指でピンチ操作</string>\n    <string name=\"home_gesture_spread\">2本指で拡大する操作</string>\n    <string name=\"home_gesture_swipe_and_stop\">スワイプして停止</string>\n    <string name=\"home_gesture_swipe_and_stop_desc\">ホーム画面以外でスワイプして停止</string>\n    <string name=\"home_gesture_multi_choose_app\">アプリを選択</string>\n    <string name=\"home_gesture_multi_choose_app_none\">なし</string>\n    <string name=\"home_layout\">レイアウト</string>\n    <string name=\"home_layout_home_title\">ホーム画面</string>\n    <string name=\"home_layout_hotseats_title\">ドック</string>\n    <string name=\"home_layout_searchbar_title\">検索バー</string>\n    <string name=\"home_layout_seek_points\">ページインジケーター</string>\n    <string name=\"home_layout_show_clock\">時計を表示</string>\n    <string name=\"home_layout_show_clock_desc\">時計ウィジェットがあるページでも、常に時刻が表示されます</string>\n    <string name=\"home_layout_unlock_grids\">レイアウトをアンロック</string>\n    <string name=\"home_layout_unlock_grids_desc\">ホーム画面のアイコンのレイアウトサイズ制限を削除します</string>\n    <string name=\"home_layout_unlock_grids_no_words\">レイアウトをアンロック(テキストなしモード)</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">ホーム画面のアイコンのレイアウトサイズ制限を削除します</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">画面下部余白からのホーム画面の距離</string>\n    <string name=\"home_layout_workspace_padding_top_desc\">画面上部余白からのホーム画面の距離</string>\n    <string name=\"home_layout_hotseats_height\">高さ</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">ページインジケーターの余白とドックの距離</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">画面下部余白からのドックの距離</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">画面下部余白と検索バーの距離</string>\n    <string name=\"home_folder\">フォルダ</string>\n    <string name=\"home_small_folder_title\">小さなフォルダ</string>\n    <string name=\"home_big_folder_title\">大きなフォルダ</string>\n    <string name=\"home_small_folder_icon_bg\">アイコンの背景</string>\n    <string name=\"home_small_folder_icon_bg_custom\">背景をカスタムする</string>\n    <string name=\"home_small_folder_icon_bg_size\">背景のサイズ</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">横3グリッド背景のカスタム</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">カスタム</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">背景の幅</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">背景の高さ</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">縦3グリッド背景のカスタム</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">カスタム</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">背景の幅</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">背景の高さ</string>\n    <string name=\"home_big_folder_icon_bg\">XXL フォルダーの背景をカスタム</string>\n    <string name=\"home_big_folder_icon_bg_custom\">カスタム</string>\n    <string name=\"home_big_folder_icon_bg_width\">背景の幅</string>\n    <string name=\"home_big_folder_icon_bg_height\">背景の高さ</string>\n    <string name=\"home_big_folder_item_max_count\">大きなフォルダ</string>\n    <string name=\"home_big_folder_icon_bg_2x1_n\">4*2 背景のカスタム</string>\n    <string name=\"home_big_folder_icon_bg_1x2_n\">2*2 背景のカスタム</string>\n    <string name=\"home_big_folder_icon_bg_n\">3*3 と 4*4 背景のカスタム</string>\n    <string name=\"home_auto_close_folder_title\">自動で閉じる</string>\n    <string name=\"home_auto_close_folder_summary\">アプリの起動後にフォルダを自動で閉じるようにします</string>\n    <string name=\"home_wallpaper\">背景</string>\n    <string name=\"home_wallpaper_blur\">背景のぼかし</string>\n    <string name=\"home_enable_blur\">開始時のぼかし</string>\n    <string name=\"home_blur_radius_title\">ぼかしの半径</string>\n    <string name=\"home_folder_shade_title\">オーバーレイの色</string>\n    <string name=\"home_folder_shade_summary\">背景色を強調または弱めます</string>\n    <string name=\"home_folder_shade_solid\">背景全体</string>\n    <string name=\"home_folder_shade_gradient\">中央のみ</string>\n    <string name=\"home_folder_shade_level_title\">色彩強度</string>\n    <string name=\"home_folder_cols_title\">フォルダー配置の数</string>\n    <string name=\"home_folder_cols_format\">%d 件のリスト</string>\n    <string name=\"home_folder_vertical_padding_title\">フォルダーの水平方向の間隔</string>\n    <string name=\"home_folder_width_title\">フォルダーの幅一杯にする</string>\n    <string name=\"home_folder_space_title\">余白を減らす</string>\n    <string name=\"home_folder_blur_title\">背景のぼかし</string>\n    <string name=\"home_folder_anim_title\">リバウンドのアニメーション</string>\n    <string name=\"home_folder_anim_1\">開くスピード 1</string>\n    <string name=\"home_folder_anim_2\">開くスピード 2</string>\n    <string name=\"home_folder_anim_3\">閉じるスピード 1</string>\n    <string name=\"home_folder_anim_4\">閉じるスピード 2</string>\n    <string name=\"home_drawer\">ドロワー</string>\n    <string name=\"home_drawer_all\">「すべて」のタブを削除</string>\n    <string name=\"home_drawer_all_desc\">ドロワーのアプリをグループ化するため「すべて」タブを削除します</string>\n    <string name=\"home_drawer_editor\">「編集」のボタンを非表示</string>\n    <string name=\"home_drawer_editor_desc\">ドロワーのアプリタブから「編集」ボタンを削除します</string>\n    <string name=\"home_drawer_blur\">ドロワーのぼかしを有効化</string>\n    <string name=\"home_drawer_blur_desc\">この機能を使用するには、アプリドロワー背景の透明度を100%に設定してください</string>\n    <string name=\"home_drawer_pinyin\">ピンイン順に整列</string>\n    <string name=\"home_drawer_pinyin_more\">言語が簡体字中国語でない場合でも、ドロワーのアプリをピンイン順で整列します</string>\n    <string name=\"home_title\">アイコンとタイトル</string>\n    <string name=\"home_title_icon_title\">アイコン</string>\n    <string name=\"home_title_bigicon_title\">大きなアイコン</string>\n    <string name=\"home_title_title_title\">タイトル</string>\n    <string name=\"home_title_title_marquee\">テキストスクロール</string>\n    <string name=\"home_title_title_marquee_desc\">長いアプリ名を折り返さずスクロールさせます</string>\n    <string name=\"home_title_title_new_install\">新しくインストールしたアプリのインジケーターを非表示</string>\n    <string name=\"home_title_drawer_font_hidden\">すべてのアプリのタイトルを隠す</string>\n    <string name=\"home_title_drawer_font_hidden_more\">ドロワー内のアプリタイトルも非表示になります。\\n好みでなければ「フォントサイズ」を使用して調整してください</string>\n    <string name=\"home_title_title_new_install_more\">新しくアプリをインストールしたとき、アプリタイトルの横にインジケーターを表示させないようにします</string>\n    <string name=\"home_title_font_size\">フォントのサイズ</string>\n    <string name=\"home_title_title_color\">タイトルの色</string>\n    <string name=\"home_title_animation_speed\">アニメーションの速度</string>\n    <string name=\"home_title_big_icon_corner\">中程度のアイコン角丸をフォロー</string>\n    <string name=\"home_title_download_animation\">ダウンロードアニメーション</string>\n    <string name=\"home_title_fix_animation\">最適化した割込みアニメーション</string>\n    <string name=\"home_title_icon_scale\">アイコンの大きさ</string>\n    <string name=\"home_title_disable_hide_file\">「ファイル」アイコンの非表示を無効化</string>\n    <string name=\"home_title_disable_hide_theme\">テーママネージャーアイコンを非表示にしない</string>\n    <string name=\"home_title_custom_anim_param\">アニメーションパラメーターのカスタム</string>\n    <string name=\"home_title_custom_anim_param_damping_title\">減衰</string>\n    <string name=\"home_title_custom_anim_param_stiffness_title\">剛性</string>\n    <string name=\"home_recent\">アプリ履歴</string>\n    <string name=\"home_recent_animation_speed\">アニメーションの速度</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">壁紙の調光を無効化</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">アプリ履歴のステータスバーを非表示</string>\n    <string name=\"home_recent_hide_freeform\">フリーフォームボタンを隠す</string>\n    <string name=\"home_recent_hide_clean_up\">アプリ履歴の一括消去ボタンを非表示</string>\n    <string name=\"home_recent_remove_icon\">アイコンを削除</string>\n    <string name=\"home_recent_modify_animation\">カードを削除するアニメを変更</string>\n    <string name=\"home_recent_text\">最近のタスクがないときに表示されるテキスト</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">アプリ履歴のカードとアプリ名の距離</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">アプリ履歴のカードを角丸にする</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">垂直方向のサムネイルサイズ</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">横向き時の水平方向のサムネイルサイズ</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">垂直方向のサムネイルサイズ</string>\n    <string name=\"home_recent_text_size\">サムネイルラベルのテキストのサイズ</string>\n    <string name=\"home_recent_text_color\">サムネイルラベルのテキストの色</string>\n    <string name=\"home_recent_freeform_background_color\">フリーフォームウィンドウの背景色</string>\n    <string name=\"home_recent_show_real_memory\">実際のメモリを表示</string>\n    <string name=\"home_recent_show_memory_info_sum\">タブレットでのみ使用できます</string>\n    <string name=\"home_recent_show_memory_info\">メモリ情報を表示</string>\n    <string name=\"home_recent_always_show_clean_up\">カードがないとき、クリーンアップアイコンを隠さないようにする</string>\n    <string name=\"home_widget\">ウィジェット</string>\n    <string name=\"home_widget_all_widget_animation\">ウィジェットのアニメーション</string>\n    <string name=\"home_widget_show_miui_widget\">MIUI ウィジェットを表示</string>\n    <string name=\"home_widget_show_miui_widget_desc\">Android ウィジェットページに MIUI ウィジェットを表示</string>\n    <string name=\"home_widget_corner_radius\">ウィジェットの角の丸み</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">Android ウィジェットを -1 画面に移動することを許可</string>\n    <string name=\"home_widget_hide_title\">ウィジェットのタイトルを非表示</string>\n    <string name=\"home_widget_resizable\">ウィジェットのリサイズ制限を無効化</string>\n    <string name=\"home_dock\">ドック</string>\n    <string name=\"home_dock_bg_enable\">ドックバーの背景を追加</string>\n    <string name=\"home_dock_bg_height\">高さ</string>\n    <string name=\"home_dock_bg_height_desc\">ドックの高さ</string>\n    <string name=\"home_dock_bg_margin_horizontal\">縦方向の余白</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">画面の両端からドックまでの幅</string>\n    <string name=\"home_dock_bg_margin_top_desc\">画面インジケータとドックの間の余白</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">画面の下部とドックの間の余白</string>\n    <string name=\"home_dock_icon_margin_bottom\">アイコン下部の余白</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">画面下部余白からのドックアイコンの距離</string>\n    <string name=\"home_dock_bg_custom\">背景のぼかし</string>\n    <string name=\"home_dock_icon_bottom_margin\">画面下部余白からのアイコンの距離</string>\n    <string name=\"home_dock_margin_bottom\">画面下部とページインジケーターの間の余白</string>\n    <string name=\"home_dock_unlock_hotseat\">ドックのアイコン番号の制限を無効化</string>\n    <string name=\"home_dock_fold\">Fold のドック</string>\n    <string name=\"home_dock_hide_seekpoint\">シークポイントを非表示</string>\n    <string name=\"home_dock_icon_title\">ドックにアイコンのタイトルを表示</string>\n    <string name=\"home_dock_disable_recents_icon\">最近使ったアプリのアイコンをドックに表示しない</string>\n    <string name=\"home_other\">その他</string>\n    <string name=\"home_other_shortcut_title\">ショートカット</string>\n    <string name=\"home_other_home_mode\">デスクトップモード</string>\n    <string name=\"home_other_infinite_scroll\">無制限スクロール</string>\n    <string name=\"home_other_infinite_scroll_desc\">最後のページから最初のページにジャンプまたはその逆を行ないます</string>\n    <string name=\"home_other_freeform_shortcut_menu\">フリーフォームモード</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">ショートカットメニューにフリーフォームメニューを追加</string>\n    <string name=\"home_other_tasks_shortcut_menu\">更なるタスクモード</string>\n    <string name=\"home_other_tasks_shortcut_menu_desc\">新しいタスクメニューをショートカットメニューに追加</string>\n    <string name=\"home_other_user_present_animation\">ロック解除時のアニメーションを最適化</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">常にデスクトップ壁紙をぼかす</string>\n    <string name=\"home_other_perfect_icon\">完全なアイコンの優先度</string>\n    <string name=\"home_other_icon_mono_chrome\">アイコンの背景色</string>\n    <string name=\"home_other_icon_monet_color\">Monet カラーを使用</string>\n    <string name=\"home_other_use_edit_color\">カラーを編集</string>\n    <string name=\"home_other_your_color\">あなたの色</string>\n    <string name=\"home_other_portrait_reverse\">反対の垂直画面</string>\n    <string name=\"home_other_shortcut_background_blur\">ショートカットメニューの背景ぼかし</string>\n    <string name=\"home_other_blur_radius\">ぼかしの半径</string>\n    <string name=\"home_large_icon_corner_radius\">角丸の大きなアイコン</string>\n    <string name=\"home_other_app_icon_hide\">デスクトップのショートカット管理</string>\n    <string name=\"home_other_toast_slide_again\">「もう一度スライドしてください」トーストを禁止</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">ショートカットの制限を無効化</string>\n    <string name=\"home_other_disable_hide_google\">Google の非表示を無効化</string>\n    <string name=\"home_other_fix_android_r_s\">デスクトップが黒く表示される互換性の問題を修正</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">ショートカットメニューのぼかし値</string>\n    <string name=\"home_other_high_models\">ハイエンドモデルとして認識させる必要があります</string>\n    <string name=\"home_recent_blur_level\">ぼかしのレベル</string>\n    <string name=\"home_recent_complete_blur_plus\">完全なぼかしプラス</string>\n    <string name=\"home_recent_complete_blur\">完全なぼかしを使用</string>\n    <string name=\"home_recent_test_blur\">ぼかしをテスト</string>\n    <string name=\"home_recent_simple_blur\">簡易的なぼかし</string>\n    <string name=\"home_recent_none_blur\">ぼかしをなくす</string>\n    <string name=\"home_recent_none_blur_simple_anim\">ぼかしをなくす (シンプルなアニメーション)</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_title\">デスクトップ設定のオプションをアンロック</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_desc\">アンロックしても機能が利用できない場合があります。一部の機能ではシステムのサポートが必要です</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">ギャラリーの編集機能</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">画像トリミングの最小制限を無効化</string>\n    <string name=\"mediaeditor_filter_manager\">フィルターマネージャーをアンロック</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">Mi シェア</string>\n    <string name=\"mishare_disable_mishare_auto_off\">Mi シェアの自動オフを無効化</string>\n    <string name=\"mishare_unlock_turbo_mode\">ターボ転送をアンロック</string>\n    <!--Wallpaper-->\n    <string name=\"miwallpaper\">壁紙</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">スーパー壁紙をアンロック</string>\n    <!--Package installer-->\n    <string name=\"package_installer\">パッケージインストーラー</string>\n    <string name=\"miui_package_installer_modify\">ページを簡潔にする</string>\n    <string name=\"miui_package_installer_safe_mode\">クリーンモード</string>\n    <string name=\"miui_package_installer_safe_mode_desc\">公式セキュリティガードを強制的に開放してロックする</string>\n    <string name=\"miui_package_installer_disable_ad\">プロモーションを無効化</string>\n    <string name=\"miui_package_installer_install_risk\">リスクの検出を無効化</string>\n    <string name=\"miui_package_installer_safe_model_tip\">セキュリティガードプロンプトを無効化</string>\n    <string name=\"miui_package_installer_count_checking\">インストール済みアプリの頻繁なチェックを無効化</string>\n    <string name=\"miui_package_installer_update_system_app\">システムアプリのインストール制限を削除</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">システム以外のチャネルからのシステムアプリのインストールを許可する</string>\n    <string name=\"miui_package_installer_install_source\">カスタムインストールソース</string>\n    <string name=\"miui_package_installer_apk_info\">パッケージ詳細情報の表示</string>\n    <string name=\"miui_package_installer_apk_info_desc\">インストール中のアプリの詳細情報を表示する</string>\n    <!--networkboost-->\n    <string name=\"various_disable_link_turbo_toast\">LinkTurbo トーストを隠す</string>\n    <string name=\"various_disable_link_turbo_toast_more\">高速再起動スコープで NetworkBoost を再起動してください</string>\n    <!--nfc-->\n    <string name=\"nfc\">NFC サービス</string>\n    <string name=\"nfc_disable_sound\">サウンドを無効化</string>\n    <string name=\"nfc_allow_information_screen\">ロック画面でも認識できるようにする</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">アプリ保管庫</string>\n    <string name=\"personal_assistant_widget_crack\">ウィジェットのパッチ</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Pad/Fold ウィジェット</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">Pad/Fold 用のウィジェットを有効にします</string>\n    <string name=\"personal_assistant_overlap_mode\">-1画面を Fold スタイルにする</string>\n    <string name=\"personal_assistant_blur_model\">パーソナルアシスタントのぼかしモデル</string>\n    <string name=\"personal_assistant_blur_value\">背景のスタイル</string>\n    <string name=\"personal_assistant_blurradius\">パーソナルアシスタントのぼかし値</string>\n    <string name=\"personal_assistant_color\">パーソナルアシスタントの色</string>\n    <!--Music-->\n    <string name=\"music\">ミュージック</string>\n    <string name=\"music_disable_ad\">広告を削除</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">バッテリーとパフォーマンス</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">高リフレッシュレートのアプリを指定</string>\n    <string name=\"powerkeeper_lock_max_fps\">最大 FPS をロック</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">アプリを強制終了しない</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">消費電力が増加する可能性があります</string>\n    <string name=\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\">バッテリー最適化のホワイトリストの復元を防止</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">スクリーンレコーダー</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">AOSP の画面録画を強制的に有効化</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">スクリーンレコーダーが対応しているバージョンであることが必要です</string>\n    <string name=\"screen_recorder_config\">フレームレートとビットレートの選択を追加</string>\n    <string name=\"screen_recorder_config_desc\">ハードウェアの状況に応じて選択をしてください</string>\n    <string name=\"screen_recorder_more_volume\">音量増加をアンロック</string>\n    <string name=\"screen_recorder_more_volume_desc\">一部のバージョンでは対応していません</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">録画した動画の保存場所を /Movies/ScreenRecorder に設定します</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">スクリーンショット</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">画像トリミングの最小制限を無効化</string>\n    <string name=\"screenshot_unlock_privacy_marking_title\">プライバシーマークをアンロック</string>\n    <string name=\"screenshot_unlock_privacy_marking_desc\">「Mi AI Engine」のより新しいバージョンがプリインストールされている必要があります</string>\n    <string name=\"screenshot_save_to_pictures_desc\">スクリーンショットの保存場所を /Pictures/Screenshots に設定します</string>\n    <string name=\"screenshot_device_customize_title\">デバイスフレームに使うモデルをカスタム</string>\n    <string name=\"screenshot_device_customize_desc\">モデルコードを入力してください</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">セキュリティ</string>\n    <string name=\"security_center_pad\">タブレットのセキュリティセンター</string>\n    <string name=\"security_center_app_title\">アプリの管理</string>\n    <string name=\"security_center_battery_title\">バッテリーセーバーとバッテリー</string>\n    <string name=\"security_center_privacy_title\">プライバシー保護</string>\n    <string name=\"security_center_beauty_title\">フロントカメラアシスタント</string>\n    <string name=\"security_center_bubble_and_freeform_title\">バブルとフリーフォーム</string>\n    <string name=\"security_center_newbox_title\">サイドバー</string>\n    <string name=\"security_center_dolby_open\">Dolby ポップアップウィンドウを閉じる</string>\n    <string name=\"security_center_show_battery_temperature\">バッテリーの温度を表示</string>\n    <string name=\"security_center_ai_clipboard\">クリップボードの保護</string>\n    <string name=\"security_center_blur_location\">おおまかな位置情報</string>\n    <string name=\"security_center_gms_open\">GMS サービス</string>\n    <string name=\"security_center_flash_light\">フラッシュライトの明るさ制御</string>\n    <string name=\"security_center_flash_light_more\">明るさスライダーをドラッグしてフラッシュライトの明るさを制御できるようにします</string>\n    <string name=\"security_center_get_number\">電話番号を使って簡単ログインするアプリを管理</string>\n    <string name=\"security_center_applock_pin_scramble\">アプリロックのPINの順序をランダムにする</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">アプリロックのPINキーパッドの配列をランダムにする</string>\n    <string name=\"security_center_beauty_light_auto\">フィルライトの明るさの自動調整をアンロック</string>\n    <string name=\"security_center_beauty_face\">ビデオ通話のビューティ機能をアンロック</string>\n    <string name=\"security_center_beauty_privacy\">プライバシーカメラをアンロック</string>\n    <string name=\"security_center_beauty_pc\">顔を中央に維持する機能をアンロック</string>\n    <string name=\"security_center_disable_root_check\">root 検出を無効化</string>\n    <string name=\"security_center_remove_macro_black_list\">マクロ機能のブラックリストを削除</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">「悪意のあるアプリが見つかりました」通知を無効化</string>\n    <string name=\"security_center_newbox_custom_enable\">カスタムを有効化</string>\n    <string name=\"security_center_newbox_bg_custom\">背景のぼかし</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">水平方向の余白</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">縦方向の余白</string>\n    <string name=\"security\">セキュリティ</string>\n    <string name=\"security_app_title\">アプリの詳細を表示</string>\n    <string name=\"security_app_summary\">アプリ情報に以下の項目を追加します:\\n- バージョンコード\\n- APK のフルパス\\n- データのパス\\n- ユーザー ID\\n- 最小 SDK バージョン\\n- ターゲット SDK バージョン\\n- Google Play ストアを開く\\n- アプリの起動</string>\n    <string name=\"security_app_sort_title\">アプリ管理リストの並び順</string>\n    <string name=\"security_app_sort_summary\">アプリ管理リストのデフォルトの並び順を変更します</string>\n    <string name=\"security_restrict_app_title\">フル制限</string>\n    <string name=\"security_restrict_app_summary\">システムアプリでのパワーセーバーと Wi-Fi 権限の設定を許可します</string>\n    <string name=\"security_disable_app_title\">アプリの状態制御</string>\n    <string name=\"security_disable_app_summary\">すべてのアプリの情報ページで、アプリの無効化を許可します</string>\n    <string name=\"security_disable_app_url_title\">リンク管理を有効化</string>\n    <string name=\"security_disable_app_url_summary\">アプリ詳細の「デフォルトの操作を消去」を「デフォルトで開く」に変更します</string>\n    <string name=\"app_link_open_always\">対応リンクを開くことをアプリに許可</string>\n    <string name=\"app_link_open_never\">アプリにリンクを開かせない</string>\n    <string name=\"open_by_default\">デフォルトで開く</string>\n    <string name=\"security_score\">ヘルスチェックの最適化を無効化</string>\n    <string name=\"security_score_summary\">100 ポイントに固定して、最適化させないようにします</string>\n    <string name=\"security_center_skip_waiting_time\">カウントダウン制限をスキップ</string>\n    <string name=\"security_center_skip_waiting_time_desc\">危険なオプションの確認カウントダウンをスキップできるようにします</string>\n    <string name=\"security_center_newbox_blur\">サイドバーのぼかし</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">バブル通知アプリの制限を削除</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">バッテリー残量低下の警告を非表示</string>\n    <string name=\"security_center_remove_low_battery_reminder_summary\">バッテリーが 20% 以下のとき、省電力モードを有効にする警告ダイアログが表示されなくなります</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">アプリを開いた時のポップアップを削除</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">アプリ開始時のポップアップ、「XXXがXXXを開く事を許可する」を削除します</string>\n    <string name=\"security_center_no_permission\">必要な権限が許可されていません</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">サイドハイドフリーフォームをアンロック</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">制限のあるデバイスのために、サイドハイドフリーフォームをアンロックします。デバイスがバックグラウンドに切り替わったときのウィジェットの動作にも影響します</string>\n    <string name=\"security_center_unlock_smart_charge_title\">最適化された充電と低バッテリー急速充電機能をアンロック</string>\n    <string name=\"security_center_super_wireless_charge\">スーパーワイヤレス充電をアンロック</string>\n    <string name=\"security_center_blur_model\">サイドバーぼかしのモデル</string>\n    <string name=\"security_center_blurradius\">サイドバーぼかしの値</string>\n    <string name=\"security_center_color\">サイドバーの色</string>\n    <string name=\"security_center_other_title\">その他</string>\n    <string name=\"security_center_sidebar_line_color\">サイドバー線の色のカスタム</string>\n    <string name=\"security_center_sidebar_line_color_default\">デフォルトでのサイドバーの線の色</string>\n    <string name=\"security_center_sidebar_line_color_dark\">ダーク時でのサイドバーの線の色</string>\n    <string name=\"security_center_sidebar_line_color_light\">ライト時でのサイドバーの線の色</string>\n    <string name=\"security_center_disable_ban\">報告ボタンを削除</string>\n    <string name=\"security_center_unlock_screen_time\">消費電力の詳細データを表示</string>\n    <string name=\"security_center_unlock_screen_time_desc\">画面の消費電力情報をバッテリー消費量ランキングに表示し、他のアプリの消費電力と時間も表示させます</string>\n    <string name=\"security_center_unlock_gun_service\">GUN サービスをアンロック</string>\n    <string name=\"security_center_disable_remove_screen_hold_on\">画面の長押し削除を無効化</string>\n    <string name=\"security_center_unlock_memc\">MEMC をアンロック</string>\n    <string name=\"security_center_unlock_enhance_contours\">輪郭の強調をアンロック</string>\n    <string name=\"security_center_unlock_s_resolution\">超解像をアンロック</string>\n    <string name=\"security_center_hide_sidebar\">サイドバーを非表示</string>\n    <string name=\"security_center_leave_open\">スライドを展開したままにする</string>\n    <string name=\"security_center_disable_sidebar_show_suggest\">アプリの提案の表示を無効化</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">スマートカード</string>\n    <string name=\"tsmclient_auto_nfc\">NFCを自動的に管理</string>\n    <string name=\"tsmclient_auto_nfc_desc\">カードのスワイプページに入ると自動的に NFC を有効化し、終了時にオフにします</string>\n    <string name=\"tsmclient_nfc_turning_on\">NFCを自動的にオンにしています……</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">NFCを手動でオンにする</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">NFCを自動オンできませんでした</string>\n    <!--Weather-->\n    <string name=\"weather\">天気</string>\n    <string name=\"weather_device_level_title\">アニメーションレベル</string>\n    <string name=\"weather_device_level_title_low\">低</string>\n    <string name=\"weather_device_level_title_middle\">中</string>\n    <string name=\"weather_device_level_title_high\">高</string>\n    <!--AI Translate-->\n    <string name=\"aiasst\">AI 翻訳</string>\n    <string name=\"aiasst_ai_captions\">AI キャプションを強制的に有効化</string>\n    <string name=\"aiasst_ai_captions_desc\">英語と中国語のみ認識・翻訳できます</string>\n    <!--Barrage-->\n    <string name=\"barrage\">Barrage</string>\n    <string name=\"barrage_any_barrage\">すべてのアプリが弾幕通知を使用できるようにする</string>\n    <string name=\"barrage_custom_barrage_length\">弾幕の長さのカスタム</string>\n    <!--Joyose-->\n    <string name=\"joyose\">Joyose</string>\n    <string name=\"joyose_cloud_control_title\">クラウドコントロール</string>\n    <string name=\"joyose_disable_cloud_control\">クラウドコントロールを無効化</string>\n    <string name=\"joyose_game_title\">ゲームスペース</string>\n    <string name=\"joyose_enable_gpu_tuner\">パフォーマンスの調整</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">オンにすると、ゲームスペースの下部に GPU 関連の設定が増えます</string>\n    <!--GetApps-->\n    <string name=\"market\">GetApps</string>\n    <string name=\"market_device_modify\">モデル名を偽装する</string>\n    <string name=\"market_device_modify_desc\">デバイス名を Xiaomi 13 Ultra に偽装する</string>\n    <string name=\"market_disable_new_icon\">サードパーティ製アイコンの使用を禁止</string>\n    <string name=\"market_disable_new_icon_desc\">デスクトップをよりクリーンにする</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">MIUI+ をアンロック</string>\n    <!--Mi Settings-->\n    <string name=\"mi_settings\">Mi の設定</string>\n    <string name=\"mi_input_settings\">入力設定</string>\n    <string name=\"mi_settings_show_fps\">FPS の選択肢を追加</string>\n    <string name=\"mi_settings_show_fps_desc\">このモジュールはデフォルトですべてのフレームレートをアンロックします。実際に利用可能であるかは保証されていません</string>\n    <!--MTB-->\n    <string name=\"mtb\">MTB</string>\n    <string name=\"mtb_auth\">MTB の認証をバイパスする</string>\n    <string name=\"mtb_auth_desc\">これはリスクの高い機能であり、これによって発生する問題は自己責任となります。ベースバンドを必ずバックアップしてください。電話アプリで *#*#MODEMTEST#*#* と入力して MTB 設定を開けるようにします</string>\n    <!--Scanner-->\n    <string name=\"scanner\">スキャナー</string>\n    <string name=\"scanner_card\">ID カードのスキャンをアンロック</string>\n    <string name=\"scanner_translation\">翻訳をアンロック</string>\n    <string name=\"scanner_ocr\">OCR をアンロック</string>\n    <string name=\"scanner_document\">ドキュメントのスキャンをアンロック</string>\n    <string name=\"scanner_excel\">表のスキャンをアンロック</string>\n    <string name=\"scanner_ppt\">PPT のスキャンをアンロック</string>\n    <string name=\"scanner_doc_ppt\">ファイルのスキャンをアンロック</string>\n    <!--Other-->\n    <string name=\"various\">その他</string>\n    <string name=\"notes\">Notes</string>\n    <string name=\"share_center\">Mi スマートハブ</string>\n    <string name=\"new_task\">新しいタスク</string>\n    <string name=\"custom_hook\">カスタム</string>\n    <string name=\"app_version_not_supported\">非対応のバージョン</string>\n    <string name=\"various_location_simulation_title\">位置情報を偽装</string>\n    <string name=\"various_dialog_title\">ダイアログ</string>\n    <string name=\"various_mipad_title\">MiPad</string>\n    <string name=\"various_open_aosp_something_title\">隠しオプション</string>\n    <string name=\"various_open_aosp_something_desc\">隠された AOSP インターフェースを開きます</string>\n    <string name=\"settings_notfication_importance\">通知の重要度を表示する</string>\n    <string name=\"various_no_overscroll\">範囲外のバウンスを無効化</string>\n    <string name=\"various_disable_bluetooth_restrict\">Bluetooth が一時的にオフにされないようにする</string>\n    <string name=\"various_disable_access_device_logs\">デバイスログへのアクセス要求ダイアログを無効化</string>\n    <string name=\"various_unlock_ime\">IME をアンロック</string>\n    <string name=\"various_unlock_ime_desc\">オンにした後は、Xposed マネージャーでキーボードアプリをスコープに追加してください</string>\n    <string name=\"various_collapse_miui_title\">MIUI のタイトル</string>\n    <string name=\"various_collapse_miui_title_desc\">MIUIアプリのトップバーのタイトルを調整する</string>\n    <string name=\"various_disable_folder_cantuse\">利用できないフォルダの上限を無効化</string>\n    <string name=\"various_super_clipboard_title\">スーパークリップボード</string>\n    <string name=\"various_unlock_super_clipboard\">スーパークリップボードをアンロック</string>\n    <string name=\"various_super_clipboard_summary\">is_support_miui_super_clipboard メタデータを含むアプリのみに対応しています</string>\n    <string name=\"various_super_clipboard_picture_desc\">クリップボードへの画像のコピーを許可</string>\n    <string name=\"various_super_clipboard_files_desc\">クリップボードへのファイルのコピーを許可</string>\n    <string name=\"various_open_aosp_battery_title\">バッテリーの最適化</string>\n    <string name=\"various_open_aosp_notification_title\">通知設定</string>\n    <string name=\"various_open_aosp_app_manage_title\">アプリを管理</string>\n    <string name=\"various_open_aosp_language_title\">アプリの言語</string>\n    <string name=\"various_open_aosp_extremely_dark_title\">さらに輝度を下げる</string>\n    <string name=\"various_mipad_input_title\">入力</string>\n    <string name=\"various_mipad_input_close_magic_title\">Magic Pointer をオフにする</string>\n    <string name=\"various_mipad_input_close_magic_desc\">MIUI for Pad の丸いマウスをオフにし、Android の元のマウスポインターに戻します</string>\n    <string name=\"various_mipad_input_restore_esc_title\">ESC キー機能を復元</string>\n    <string name=\"various_mipad_input_restore_esc_desc\">MIUIにより「戻る」機能に強制的に割り当てられたESCキーを復元します</string>\n    <string name=\"various_mipad_input_disable_bluetooth_title\">スタイラスの Bluetooth 制限を解除</string>\n    <string name=\"various_mipad_input_disable_bluetooth_desc\">Xiaomi 公式スタイラスでない、互換性のあるスタイラスでも使用できるようにします</string>\n    <string name=\"various_mipad_input_bluetooth_version_title\">ドライバーバージョン</string>\n    <string name=\"various_mipad_input_bluetooth_version_desc\">スタイラスの Bluetooth 制限を解除するために使用するドライバーのバージョン</string>\n    <string name=\"various_mipad_input_ingore_gesture_title\">スタイラスボタンジェスチャーを無視</string>\n    <string name=\"various_mipad_input_ingore_gesture_desc\">スタイラスボタンの長押しジェスチャーを無視します</string>\n    <string name=\"various_mipad_input_need_finger_num_title\">ジェスチャーに必要な指の数を変更</string>\n    <string name=\"various_mipad_input_need_finger_num_desc\">三本指のスクリーンショット・部分的なスクリーンショット・横分割ジェスチャーを四本指で実行し、アプリの切り替えジェスチャーを三本指で実行するように変更します</string>\n    <string name=\"custom_background_blur_enabled\">背景のぼかし</string>\n    <string name=\"custom_background_blur_radius\">ぼかし半径</string>\n    <string name=\"custom_background_color\">背景の色</string>\n    <string name=\"custom_background_color_alpha\">背景の透明度</string>\n    <string name=\"custom_background_corner_radius\">背景の角の丸み</string>\n    <string name=\"custom_blur_enabled\">背景のぼかし</string>\n    <string name=\"various_blur_radius\">ぼかし半径</string>\n    <string name=\"various_background_corner_radius\">背景の角の丸み</string>\n    <string name=\"various_background_alpha\">背景マスクの透明度</string>\n    <string name=\"various_background_color\">背景の色</string>\n    <string name=\"various_dialog_window_blur_title\">ぼかし</string>\n    <string name=\"various_dialog_gravity\">ポップアップウィンドウの位置</string>\n    <string name=\"various_dialog_margin_horizontal\">ウィンドウを縦方向の余白にポップアップ</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">ポップアップウィンドウから画面の側面までの距離</string>\n    <string name=\"various_dialog_margin_bottom\">ウィンドウを下部の余白にポップアップ</string>\n    <string name=\"various_dialog_margin_bottom_desc\">ポップアップウィンドウから画面下部までの距離</string>\n    <string name=\"various_dialog_window_blur\">ウィンドウのぼかし</string>\n    <string name=\"various_dialog_window_blur_radius\">ウィンドウのぼかし半径</string>\n    <string name=\"location_data_title\">データベース</string>\n    <string name=\"various_location_simulation_1_title\">タスク 1</string>\n    <string name=\"various_location_simulation_2_title\">タスク 2</string>\n    <string name=\"various_location_simulation_3_title\">タスク 3</string>\n    <string name=\"various_location_simulation_all_title\">ユニバーサル</string>\n    <string name=\"location_simulation_package_name\">パッケージ名</string>\n    <string name=\"location_simulation_location\">位置情報</string>\n    <string name=\"location_simulation_location_custom\">場所を選択</string>\n    <string name=\"location_simulation_network\">ネットワーク</string>\n    <string name=\"location_simulation_operator_fix\">通信事業者のマスカレードを修正</string>\n    <string name=\"location_simulation_mac\">MAC アドレス</string>\n    <string name=\"location_simulation_wifi\">Wi-Fi</string>\n    <string name=\"location_simulation_router_mac\">ルーターの MAC アドレス</string>\n    <string name=\"location_simulation_work_title\">タイトル</string>\n    <string name=\"location_simulation_work_offset\">オフセット</string>\n    <string name=\"location_simulation_work_base_station\">基地局</string>\n    <string name=\"location_simulation_work_longitude_latitude\">経度と緯度</string>\n    <string name=\"location_simulation_work_remarks\">Mark</string>\n    <string name=\"app_details_playstore\">アプリストアで開く</string>\n    <string name=\"app_details_launch\">起動</string>\n    <string name=\"app_details_nolaunch\">アプリにデフォルトで起動可能なアクティビティが存在しません</string>\n    <string name=\"app_details_apk_file\">APK のディレクトリ</string>\n    <string name=\"app_details_apk_version_code\">APK バージョン番号</string>\n    <string name=\"app_details_data_path\">データのディレクトリ</string>\n    <string name=\"app_details_app_uid\">ユーザー ID</string>\n    <string name=\"app_details_sdk\">ターゲット SDK バージョン</string>\n    <string name=\"app_details_min_sdk\">最小 SDK バージョン</string>\n    <string name=\"disable_app_settings\">それはまずいです!</string>\n    <string name=\"disable_app_title\">アプリを無効にしてもよろしいですか?</string>\n    <string name=\"disable_app_text\">必須のシステムアプリの場合、無効にするとデバイスに問題が起こる可能性があります</string>\n    <string name=\"disable_app_fail\">アプリの状態を変更できませんでした</string>\n    <string name=\"unlimited\">無制限</string>\n    <string name=\"calls\">通話</string>\n    <string name=\"system_volume\">システム</string>\n    <string name=\"notification_volume\">通知</string>\n    <string name=\"freeform_notification\">通知フローティングウィンドウ</string>\n    <string name=\"share_app\">サードパーティのアプリに共有</string>\n    <string name=\"show_newmods_title\">新しいモジュールをマーク</string>\n    <string name=\"default_volume_stream_ring\">着信音</string>\n    <string name=\"default_volume_stream_media\">メディア</string>\n    <string name=\"default_volume_stream_tip\">通知</string>\n    <string name=\"open_with_test_picture\">画像</string>\n    <string name=\"open_with_test_audio\">オーディオ</string>\n    <string name=\"open_with_test_media\">動画</string>\n    <string name=\"open_with_test_doc\">ドキュメント</string>\n    <string name=\"open_with_test_zip\">ファイル</string>\n    <string name=\"open_with_test_all\">すべて</string>\n    <string name=\"location_custom\">カスタム</string>\n    <string name=\"operator_fix_none\">修復しない</string>\n    <string name=\"operator_fix_1\">方式 1</string>\n    <string name=\"operator_fix_2\">方式 2 (推奨)</string>\n    <string name=\"custom_hook_new\">フックを追加</string>\n    <string name=\"custom_hook_mode\">モードを選択</string>\n    <string name=\"cemiuiler_notice\">ステータスバーをプルダウンして、ショートカットスイッチとシステム通知を表示します</string>\n    <string name=\"cemiuiler_restart_quick\">アプリを素早く再起動する</string>\n    <string name=\"location_add\">追加</string>\n    <string name=\"location_delete\">削除</string>\n    <!--Tip-->\n    <string name=\"tip_0\">ヒント: これがヒントです！</string>\n    <string name=\"tip_1\">ヒント: 「アプリについて - スポンサー」で寄付すると、私たちを支援できます。</string>\n    <string name=\"tip_2\">ヒント: 開発者に質問したい場合は、Telegram@Sevtinge_PM_bot か Bilibili@绀漓丨Sevtinge までご連絡ください。</string>\n    <string name=\"tip_3\">ヒント: 公式グループに参加したい場合は、Telegram@cemiuiler か QQ で 247909573 を検索してください。</string>\n    <string name=\"tip_4\">ヒント: Cemiuiler = Ceiler + MIUI、Ceiler = Ceil + er</string>\n    <string name=\"tip_5\">ヒント: おまえは今まで見たヒントの数をおぼえているのか?</string>\n    <string name=\"tip_6\">ヒント: MIUI を再び偉大な物にしましょう!</string>\n    <string name=\"tip_7\">ヒント: Github@sevtinge や Bilibili@绀漓丨Sevtinge をフォローしましょう！</string>\n    <string name=\"tip_8\">ヒント: 理想的なユートピアは現実には存在しません。</string>\n    <string name=\"tip_9\">ヒント: 東京タワーは壊されがちです。</string>\n    <string name=\"tip_10\">ヒント: この世界は美しい… この美しさが Sevtinge のものでないのは残念です。</string>\n    <string name=\"tip_11\">ヒント: Cemiuiler を使っていることが分かるように、いくつかのバグを残しておきました。</string>\n    <string name=\"tip_12\">ヒント：ご存知ですか？実際にはヒントは全てナンセンスです。</string>\n    <string name=\"tip_13\">ヒント: Cemiuiler の誕生日は5月1日、Sevtinge の誕生日は2月2日です。</string>\n    <string name=\"tip_14\">ヒント: Sevtinge は山河大学 三江市キャンパス 情報工程学院出身です。</string>\n    <string name=\"tip_15\">ヒント: Sevtinge には第二形態があるらしい…</string>\n    <string name=\"tip_16\">ヒント: Sevtinge は子狐です！</string>\n    <string name=\"tip_17\">ヒント: Ling Qiqi は猫耳の女の子の人格とロリの人格を持っています。</string>\n    <string name=\"tip_18\">ヒント: Cemiuiler は一番バッテリーを消費するシステムアプリです（ヘ、ヘイトスピーチ…）</string>\n    <string name=\"tip_19\">ヒント: グレーアウトした機能は、特別な注釈がない場合機能が異常であることを意味しており、当分の間ユーザーに開放される予定はありません</string>\n    <string name=\"tip_20\">ヒント: 何もしない場合は Canary の新しいバージョンを追わないでください。壊れている場合は急いでアップデートしないでください。</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-night/themes.xml",
    "content": "<resources>\n    <style name=\"Base.Theme.Cemiuiler.DayNight\" parent=\"Theme.AppCompat.DayNight.DarkActionBar\">\n        <item name=\"preferenceTheme\">@style/PreferenceThemeOverlay.Dark</item>\n        <item name=\"android:forceDarkAllowed\">false</item>\n        <item name=\"rebootIconColor\">@color/white</item>\n        <item name=\"android:windowTranslucentNavigation\">true</item>\n        <item name=\"seekBarPreferenceExStyle\">@style/Preference.SeekBarPreferenceEx</item>\n    </style>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-night-v31/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"ic_launcher_foreground\">@android:color/system_accent1_800</color>\n    <color name=\"ic_launcher_background\">@android:color/system_accent1_200</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">Torne a MIUI ótima novamente!</string>\n    <string name=\"new_permission_wifi_state_desc\">adicionar e excluir arquivos no armazenamento interno do dispositivo</string>\n    <string name=\"new_permission_location_desc\">ser usado para fornecer serviços como latitude e longitude</string>\n    <string name=\"new_cta_agree_desc\">Durante o uso, para fornecer mais recursos, podemos solicitar permissão Root/Su. Você pode acessar o Gerenciamento de permissões a qualquer momento para ajustar o status de autorização de todas as permissões e ir ao seu gerenciador Root/Su para obter permissões Root/Su.</string>\n    <string name=\"new_cta_app_main_purpose\">modificar apps do sistema</string>\n    <string name=\"new_cta_app_all_purpose_title\">Bem-vindo ao Cemiuiler, este app é executado na estrutura Xposed, você pode usar este app para sequestrar e modificar outros apps suportados para obter melhorias na MIUI. Durante o uso, para fornecer mais recursos, podemos solicitar permissão Root/Su. Você pode ir ao seu gerenciador Root/Su para obter permissões Root/Su.</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">Português (Brasil)</string>\n    <string name=\"translator\">Igor</string>\n    <string name=\"translator_url\">https://github.com/igormiguell</string>\n    <string name=\"settings\">Configurações</string>\n    <string name=\"about\">Sobre</string>\n    <string name=\"about_use\">Citar</string>\n    <string name=\"about_use_desc\">O Cemiuiler usa alguns ou todos os seguintes projetos de código aberto, graças aos desenvolvedores desses projetos por seu apoio (em nenhuma ordem em particular)</string>\n    <string name=\"about_contributer\">Colaboradores</string>\n    <string name=\"about_contributer_desc\">Obrigado aos seguintes colaboradores pela sua ajuda no desenvolvimento do Cemiuiler (em nenhuma ordem em particular)</string>\n    <string name=\"about_donation\">Patrocinadores</string>\n    <string name=\"about_donation_desc\">Você pode nos apoiar doando aqui</string>\n    <string name=\"about_privacy\">Política de privacidade</string>\n    <string name=\"about_protocol\">Acordo do usuário</string>\n    <string name=\"settings_data_title\">Backup e Restauração</string>\n    <string name=\"settings_bug_title\">Solução de problemas</string>\n    <string name=\"settings_debug_title\">Depurar</string>\n    <string name=\"settings_hide_app_icon\">Ícone na tela inicial</string>\n    <string name=\"settings_icon\">Ícone nas Configurações</string>\n    <string name=\"settings_icon_desc\">Defina onde o ícone do módulo ficará nas Configurações</string>\n    <string name=\"settings_icon_disable\">Desativado</string>\n    <string name=\"settings_icon_top\">Topo</string>\n    <string name=\"settings_icon_medium\">Meio</string>\n    <string name=\"settings_icon_down\">Fundo</string>\n    <string name=\"settings_icon_mode\">Estilo do ícone</string>\n    <string name=\"settings_icon_miui_14\">Estilo retângulo arredondado</string>\n    <string name=\"settings_icon_miui_13\">Estilo de corte de fundo</string>\n    <string name=\"settings_reboot\">Reiniciar app de destino</string>\n    <string name=\"settings_back\">Fazer backup das configurações do módulo</string>\n    <string name=\"settings_rest\">Restaurar configurações do módulo</string>\n    <string name=\"settings_reset\">Redefinir configurações do módulo</string>\n    <string name=\"reset_title\">Tem certeza que deseja redefinir?</string>\n    <string name=\"reset_desc\">Após redefinir a configuração do módulo, todos os seus dados serão excluídos!</string>\n    <string name=\"reset_okay\">A configuração do módulo foi redefinida</string>\n    <string name=\"backup_success\">Backup concluído</string>\n    <string name=\"backup_failed\">Backup falhou</string>\n    <string name=\"rest_title\">Recuperar</string>\n    <string name=\"rest_success\">Recuperação bem-sucedida</string>\n    <string name=\"rest_failed\">Recuperação falhou</string>\n    <string name=\"backup_ask\">Você deseja gravar os backups?</string>\n    <string name=\"backup_permission\">Agora você precisa ativar manualmente as permissões para esta opção.</string>\n    <string name=\"rest_ask\">Deseja recuperar seu backup?</string>\n    <string name=\"rest_permission\">Agora você precisa ativar manualmente as permissões para esta opção.</string>\n    <string name=\"disable_detailed_log\">Desativar registro detalhado</string>\n    <string name=\"disable_detailed_log_desc\">Reinicie para aplicar</string>\n    <string name=\"settings_safe_mode\">Modo seguro</string>\n    <string name=\"settings_safe_mode_desc\">Parar função do módulo</string>\n    <string name=\"about_developer_title\">Desenvolvedores</string>\n    <string name=\"about_translator_title\">Tradutor</string>\n    <string name=\"about_chat_title\">Discussão</string>\n    <string name=\"about_other_title\">Outros</string>\n    <string name=\"about_qq_group\">Grupo QQ</string>\n    <string name=\"about_qq_channel\">Canal QQ</string>\n    <string name=\"about_tg_group\">Grupo Telegram</string>\n    <string name=\"about_tg_channel\">Canal Telegram</string>\n    <string name=\"about_github\">Código fonte</string>\n    <string name=\"about_github_desc\">Este projeto é de código aberto baseado na licença AGPL-3.0</string>\n    <string name=\"about_offical\">Site oficial</string>\n    <string name=\"about_crwd\">Crowdin</string>\n    <string name=\"about_crwd_desc\">Ajude-nos a traduzir o Cemiuiler para o seu idioma</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">Reiniciar </string>\n    <string name=\"restart_app_desc\">Você tem certeza que deseja reiniciar agora %1$s?</string>\n    <string name=\"tip\">Dica</string>\n    <string name=\"hook_failed\">O módulo ainda não está ativado.\\nPor favor, verifique se o gerenciador do Xposed está ativado. Nesse caso, por favor, reinicie ou otimize novamente o módulo.</string>\n    <string name=\"kill_failed\">Falha ao finalizar o processo, por favor, verifique se o Cemiuiler recebeu permissões Root/Su</string>\n    <string name=\"pid_failed\">O app de destino não está em execução e não precisa ser reiniciado.</string>\n    <string name=\"reboot_failed\">Falha na reinicialização, por favor, verifique se o Cemiuiler recebeu permissão Root/Su</string>\n    <string name=\"expand_button_title\">Alto nível</string>\n    <string name=\"not_set\">Não definido</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"more\">Mais</string>\n    <string name=\"clearable_edittext_clear_description\">Limpar</string>\n    <string name=\"preference_on\">Ativado</string>\n    <string name=\"preference_off\">Desativado</string>\n    <string name=\"preference_copied\">%1$s copiados para a área de transferência.</string>\n    <string name=\"preference_default_value_text\">Padrão</string>\n    <string name=\"preference_dialog_color_picker_default_title\">Escolha a cor</string>\n    <string name=\"preference_dialog_color_picker_presets\">Cor predefinida</string>\n    <string name=\"preference_dialog_color_picker_custom\">Cor customizada</string>\n    <string name=\"preference_dialog_color_picker_transparency\">Transparência</string>\n    <string name=\"preference_dialog_color_picker_select\">Confirmar seleção</string>\n    <string name=\"abc_action_bar_home_description\">Voltar a página inicial</string>\n    <string name=\"abc_action_bar_up_description\">Voltar ao nível anterior</string>\n    <string name=\"actionbar_button_up_description\">Voltar</string>\n    <string name=\"appcompat_action_mode_select_all\">Selecionar todos</string>\n    <string name=\"appcompat_cancel_description\">Cancelar</string>\n    <string name=\"appcompat_confirm_description\">OK</string>\n    <string name=\"appcompat_select_all_description\">Selecionar todos</string>\n    <string name=\"appcompat_deselect_all_description\">Desmarcar todos</string>\n    <string name=\"appcompat_delete_description\">Excluir</string>\n    <string name=\"appcompat_search_action_mode_cancel\">Cancelar</string>\n    <string name=\"appcompat_search_input_description\">Pesquisar</string>\n    <string name=\"appcompat_actionbar_immersion_button_more_description\">Mais</string>\n    <string name=\"appcompat_action_mode_inverse\">Desmarcar todos</string>\n    <string name=\"color_picker_alpha_text_transparent\">Opacidade</string>\n    <string name=\"color_picker_tab_grid\">Grade</string>\n    <string name=\"color_picker_tab_slider\">Slider</string>\n    <string name=\"color_picker_view_page_text_hue\">Matiz</string>\n    <string name=\"color_picker_view_page_text_lightness\">Luminosidade</string>\n    <string name=\"color_picker_view_page_text_saturation\">Saturação</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">Margem superior</string>\n    <string name=\"bottom_margin\">Margem inferior</string>\n    <string name=\"left_margin\">Margem esquerda</string>\n    <string name=\"right_margin\">Margem direita</string>\n    <string name=\"vertical_offset\">Deslocamento para cima e para baixo</string>\n    <string name=\"horizontal_alignment\">Alinhamento horizontal</string>\n    <string name=\"feature\">Função</string>\n    <string name=\"recommend\">Recomendado</string>\n    <string name=\"editor\">Editor</string>\n    <string name=\"record\">Gravação</string>\n    <string name=\"shot\">Disparo</string>\n    <string name=\"portrait\">Retrato</string>\n    <string name=\"camera_pro\">Pro</string>\n    <string name=\"enable\">Ativar</string>\n    <string name=\"custom_enable\">Ativar personalização</string>\n    <string name=\"search\">Pesquisar</string>\n    <string name=\"floating_window\">Janelas flutuantes</string>\n    <string name=\"save_to_screen_title\">Especificar para salvar localização</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">Padrão</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">Expandir</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">Corrigir largura do conteúdo</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">Para evitar instabilidade horizontal</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">Negrito</string>\n    <!--Multi-list Array-->\n    <string name=\"array_close\">Fechar</string>\n    <string name=\"array_default\">Padrão</string>\n    <string name=\"array_align_left\">Esquerda</string>\n    <string name=\"array_align_right\">Direita</string>\n    <string name=\"array_align_center\">Centralizado</string>\n    <string name=\"array_netspeedicons_no\">Sem ícones</string>\n    <string name=\"array_bold\">Negrito</string>\n    <string name=\"array_theme\">Seguir o assunto</string>\n    <string name=\"array_clock_center\">Centralizar o relógio</string>\n    <string name=\"array_clock_right\">Relógio à direita</string>\n    <string name=\"array_clock_center_and_icon_left\">Relógio no meio e ícone à esquerda</string>\n    <string name=\"array_clock_default\">Padrão</string>\n    <string name=\"array_clock_geek\">Geek</string>\n    <string name=\"array_battery_both\">Ambos</string>\n    <string name=\"array_battery_power\">Somente energia</string>\n    <string name=\"array_battery_current\">Somente corrente</string>\n    <string name=\"array_battery_temp\">Temperatura da bateria</string>\n    <string name=\"array_cpu_temp\">Temperatura da CPU</string>\n    <string name=\"array_global_actions_none\">Nenhuma ação</string>\n    <string name=\"array_global_actions_notif\">Abrir central de notificação</string>\n    <string name=\"array_global_actions_eqs\">Expandir o painel de configurações rápidas</string>\n    <string name=\"array_global_actions_lock\">Tela de bloqueio</string>\n    <string name=\"array_global_actions_sleep\">Desligar tela</string>\n    <string name=\"array_global_actions_screenshot\">Captura de tela</string>\n    <string name=\"array_global_actions_menu\">Abrir Menu</string>\n    <string name=\"array_global_actions_recents\">Abrir recentes</string>\n    <string name=\"array_global_actions_volume\">Abrir diálogo de volume</string>\n    <string name=\"array_global_actions_volume_up\">Aumentar volume</string>\n    <string name=\"array_global_actions_volume_down\">Diminuir volume</string>\n    <string name=\"array_global_actions_launch\">Iniciar app</string>\n    <string name=\"array_global_actions_launch_choose\">Selecionar app</string>\n    <string name=\"array_global_actions_shortcut\">Iniciar atalho</string>\n    <string name=\"array_global_actions_activity\">Iniciar atividade</string>\n    <string name=\"array_global_actions_toggle\">Alternar função</string>\n    <string name=\"array_global_actions_back\">Alternar para o app anterior</string>\n    <string name=\"array_global_actions_forceclose\">Forçar fechamento do app atual</string>\n    <string name=\"array_global_actions_powermenu\">Abrir menu de energia</string>\n    <string name=\"array_global_actions_powermenu_short\">Menu de energia</string>\n    <string name=\"array_global_actions_clear_memory\">Limpar memória</string>\n    <string name=\"array_global_actions_invert_colors\">Inversão de cores</string>\n    <string name=\"array_global_actions_switchkeyboard\">Alternar teclado</string>\n    <string name=\"array_global_actions_goback\">Voltar</string>\n    <string name=\"array_global_actions_onehanded_left\">Modo para uma só mão (Esquerda)</string>\n    <string name=\"array_global_actions_onehanded_right\">Modo para uma só mão (Direita)</string>\n    <string name=\"array_global_actions_scrolltotop\">Role para cima</string>\n    <string name=\"array_global_actions_expandsidebar\">Exibir barra lateral</string>\n    <string name=\"array_global_actions_floatingwindow\">Janela flutuante</string>\n    <string name=\"array_global_actions_pinningwindow\">Fixar janela</string>\n    <string name=\"array_align_top\">Topo</string>\n    <string name=\"array_align_bottom\">Fundo</string>\n    <string name=\"array_discrete\">Separado</string>\n    <string name=\"array_gradual\">Lento</string>\n    <string name=\"array_rainbow\">Arco-íris</string>\n    <string name=\"various_install_app_info_version_name\">Nome da versão</string>\n    <string name=\"various_install_app_info_version_code\">Código da versão</string>\n    <string name=\"various_install_app_info_sdk\">Suporte SDK</string>\n    <string name=\"various_install_app_size\">Tamanho</string>\n    <string name=\"charge_animation_entries_disable\">Desativado</string>\n    <string name=\"charge_animation_entries_aura\">Aura</string>\n    <string name=\"charge_animation_entries_stream\">Streamer</string>\n    <string name=\"charge_animation_entries_alpha\">Ritmo</string>\n    <string name=\"status_bar_icon_mode_default\">Padrão</string>\n    <string name=\"status_bar_icon_mode_on\">Sempre exibir</string>\n    <string name=\"status_bar_icon_mode_off\">Sempre oculto</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">Ocultar apenas quando não estiver conectado</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">Exibir apenas antes de tocar</string>\n    <string name=\"seek_points_roll\">Exibir apenas ao deslizar a tela</string>\n    <string name=\"seek_points_edit\">Exibir apenas no modo de edição</string>\n    <string name=\"home_mode_day\">Modo claro</string>\n    <string name=\"home_mode_dark\">Modo escuro</string>\n    <string name=\"dialog_gravity_medium\">Centralizado</string>\n    <string name=\"dialog_gravity_down\">Fundo</string>\n    <string name=\"collapse_miui_title_off\">Dobrar</string>\n    <string name=\"collapse_miui_title_on\">Expandir</string>\n    <string name=\"collapse_miui_title_off_always\">Sempre dobrado</string>\n    <string name=\"collapse_miui_title_on_always\">Sempre expandir</string>\n    <string name=\"link_open_mode_default\">Padrão do sistema</string>\n    <string name=\"link_open_mode_mi\">Navegador Xiaomi</string>\n    <string name=\"app_sort_running\">Classificação padrão</string>\n    <string name=\"app_sort_name\">Nome do app</string>\n    <string name=\"app_sort_frequency\">Recentemente usado</string>\n    <string name=\"app_sort_storage\">Armazenamento usado</string>\n    <string name=\"app_sort_install\">Data de instalação</string>\n    <string name=\"array_bluetooth_tile_style_3rows\">Três blocos grandes</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\"> Um bloco grande e dois pequenos</string>\n    <string name=\"array_pa_blur_official\">Oficial vem com blur</string>\n    <string name=\"array_bpa_blur_customize\">Blur de fundo personalizado</string>\n    <string name=\"control_center_sunshine_mode_default\">Fechar</string>\n    <string name=\"control_center_sunshine_mode_one\">Padrão do sistema</string>\n    <string name=\"control_center_sunshine_mode_two\">Forçar brilho máximo</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">Framework do Sistema</string>\n    <string name=\"system_framework_volume_title\">Volume</string>\n    <string name=\"system_framework_other_title\">Outros</string>\n    <string name=\"system_framework_display_title\">Tela</string>\n    <string name=\"system_framework_phone_title\">Rede</string>\n    <string name=\"system_framework_bubble_title\">Notificação em bolha</string>\n    <string name=\"system_framework_freeform_count\">Múltiplas janelas flutuantes</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">Forçar pequena janela flutuante a ser permitida</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">Ignorar a lista negra do sistema e as restrições do software para o modo janela flutuante</string>\n    <string name=\"system_framework_freeform_sticky\">Lembrar estado</string>\n    <string name=\"system_framework_freeform_bubble\">Bolha de janelas flutuantes</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">Transforme todas as janelas flutuantes em mini janelas flutuantes</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">Transforme todas as janelas flutuantes em mini janelas flutuantes nas tarefas recentes\\nEste recurso é um recurso experimental com alta instabilidade</string>\n    <string name=\"system_framework_freeform_jump\">Abra com janela flutuante ao pular para outro app</string>\n    <string name=\"system_framework_freeform_title_desc\">Nos cenários a seguir, quando você precisar pular para outros apps, você usará a janela flutuante para abrir</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">Suporta apenas links</string>\n    <string name=\"system_framework_default_volume_stream\">Ajustar volume por padrão</string>\n    <string name=\"system_framework_volume_first_press\">Ajuste de volume instantâneo</string>\n    <string name=\"system_framework_volume_separate_control\">Controle de volume independente</string>\n    <string name=\"system_framework_volume_disable_safe\">Remover restrições de segurança de volume alto</string>\n    <string name=\"system_framework_volume_separate_slider\">Controle deslizante do volume de notificação</string>\n    <string name=\"system_framework_volume_media_steps\">Nível do volume de mídia</string>\n    <string name=\"system_framework_volume_media_steps_desc\">Isso pode fazer com que a rolagem da barra de volume congele ou o volume do Bluetooth fique anormal</string>\n    <string name=\"system_framework_volume_steps\">Multiplicador de nível de volume</string>\n    <string name=\"system_ui_display_cutout_title\">Recorte de exibição</string>\n    <string name=\"system_ui_display_hide_cutout\">Ocultar recorte de exibição</string>\n    <string name=\"system_ui_display_brightness_title\">Brilho</string>\n    <string name=\"system_ui_display_auto_brightness\">Alcance do brilho automático</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">Defina valores mínimos e máximos para o brilho automático</string>\n    <string name=\"system_ui_display_min_brightness\">Brilho automático mínimo</string>\n    <string name=\"system_ui_display_max_brightness\">Brilho automático máximo</string>\n    <string name=\"system_ui_display_toast_times_title\">Exibir ajuste de duração</string>\n    <string name=\"system_ui_display_toast_times_desc\">Modifique a duração de exibição da dica, a duração de exibição é sempre maior que 1 segundo</string>\n    <string name=\"system_framework_phone_network_title\">Configurações de rede</string>\n    <string name=\"phone_double_5g_nr\">Uso de cartão duplo 5G (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">O cartão SIM principal e secundário permite 5G ao mesmo tempo (O cartão SIM secundário suporta apenas NSA)</string>\n    <string name=\"phone_double_5g_sa\">Uso de cartão duplo SA (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">Recurso experimental. Faça com que o SIM secundário suporte SA</string>\n    <string name=\"system_framework_phone_band_title\">Configurações de banda</string>\n    <string name=\"phone_n1\">Banda N1</string>\n    <string name=\"phone_n1_desc\">Suporte Banda N1 (NR)</string>\n    <string name=\"phone_n28\">Banda N28</string>\n    <string name=\"phone_n28_desc\">Suporte Banda N28 (NR)</string>\n    <string name=\"phone_n5_n8\">Banda N5/N8</string>\n    <string name=\"phone_n5_n8_desc\">Digite *#*#65686633#*#* na interface de discagem para suportar a banda N5/N8. Se mostrar \\\"ativar modo N5 e N8\\\", o recurso será ativado com sucesso.</string>\n    <string name=\"system_framework_screen_all_rotations\">Rotação da tela</string>\n    <string name=\"system_framework_allow_untrusted_touch\">Permitir toque não confiável</string>\n    <string name=\"system_framework_allow_uninstall\">Permitir desinstalar alguns apps pré-instalados</string>\n    <string name=\"system_framework_allow_uninstall_desc\">Este recurso é perigoso</string>\n    <string name=\"system_framework_disable_app_link_verify\">Desativar verificação de link do app</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">Reverter para abrir apps suportados diretamente ao abrir links sem habilitar links suportados nas configurações do app</string>\n    <string name=\"system_framework_clean_share_menu\">Limpar menu de compartilhamento</string>\n    <string name=\"system_framework_clean_share_apps\">Apps selecionados</string>\n    <string name=\"system_framework_clean_share_apps_desc\">O app selecionado não aparecerá no menu de compartilhamento</string>\n    <string name=\"system_framework_clean_open_menu\">Limpar o menu Abrir com</string>\n    <string name=\"system_framework_clean_open_apps\">Apps selecionados</string>\n    <string name=\"system_framework_clean_open_apps_desc\">O app selecionado não aparecerá no menu Abrir com</string>\n    <string name=\"system_other_flag_secure\">Permitir captura de tela</string>\n    <string name=\"system_other_flag_secure_desc\">Permite capturas de tela e gravações de tela em qualquer app</string>\n    <string name=\"system_other_delete_on_post_notification\">Remover notificação da tela superior</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">Remover notificação \\\"Este app está sendo exibido em cima de outros apps na tela\\\"</string>\n    <string name=\"system_framework_share_menu_test\">Testar menu de compartilhamento</string>\n    <string name=\"system_framework_open_with_menu_test\">Testar menu Abrir com</string>\n    <string name=\"system_framework_other_use_original_animation\">Animações de transição usam estilos nativos</string>\n    <string name=\"system_framework_other_speed_install\">Instalação rápida</string>\n    <string name=\"system_framework_other_speed_install_desc\">Instale na memória em execução para acelerar a instalação</string>\n    <string name=\"system_framework_other_thermal_brightness\">Desativar a redução automática de brilho da tela</string>\n    <string name=\"system_framework_other_thermal_brightness_more\">Reduz automaticamente apenas o brilho da tela não causado pelo controle de temperatura</string>\n    <string name=\"system_framework_other_disable_cleaner\">Desativar o encerramento de apps em segundo plano</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">Recursos experimentais, podem causar uso anormal de memória em execução</string>\n    <string name=\"system_framework_disable_72h_verify\">Desativar verificação da tela de bloqueio por 72 horas</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">Serviço de Gerenciador de Pacotes</string>\n    <string name=\"system_framework_core_patch_downgr\">Permitir downgrade</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">Permitir downgrade de apps</string>\n    <string name=\"system_framework_core_patch_auth_creak\">Desativar verificação de integridade</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">Permite instalar apps após modificar o arquivo no apk (ignorar erro de integridade inválido)</string>\n    <string name=\"system_framework_disable_integrity\">Desativar verificações de integridade do sistema</string>\n    <string name=\"system_framework_disable_integrity_desc\">A recuperação automática de conteúdo adulterado é proibida. Quando a função \\\"Desativar verificação de integridade\\\" estiver ativada, ela será ativada por padrão.\\nCompatível apenas com Android 13 e superior</string>\n    <string name=\"system_framework_core_patch_digest_creak\">Desativar a comparação de assinaturas</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">Permite a reinstalação do app com assinaturas diferentes</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">Usar assinaturas instaladas</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">Esse recurso é extremamente perigoso e só deve ser ativado quando for absolutamente necessário</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">Modo aprimorado</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">Realize alguma validação no app</string>\n    <!--Browser-->\n    <string name=\"browser\">Navegador</string>\n    <string name=\"browser_debug_mode\">Desbloquear opções do desenvolvedor</string>\n    <string name=\"browser_debug_mode_desc\">17.5.xxxxx e acima não são suportados</string>\n    <!--Camera-->\n    <string name=\"camera\">Câmera</string>\n    <string name=\"camera_features_unlock_aiwatermark\">Desbloquear Marca d\\'água inteligente</string>\n    <string name=\"camera_features_unlock_ambilight\">Desbloquear Longa exposição</string>\n    <string name=\"camera_features_unlock_clone\">Desbloquear modo Clonar</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">Desbloquear Espelho de bolso</string>\n    <string name=\"camera_features_unlock_doc\">Desbloquear modo Documentos</string>\n    <string name=\"camera_features_unlock_idcard\">Desbloquear modo Cartão de Identificação</string>\n    <string name=\"camera_features_unlock_dualcam\">Desbloquear Câmera dupla</string>\n    <string name=\"camera_features_unlock_duration\">Desbloquear Duração</string>\n    <string name=\"camera_features_unlock_milive\">Desbloquear Vídeo curto</string>\n    <string name=\"camera_features_unlock_moon\">Desbloquear modo Superlua</string>\n    <string name=\"camera_features_unlock_pano\">Desbloquear modo Panorama</string>\n    <string name=\"camera_features_unlock_pixel\">Desbloquear modo Pixel</string>\n    <string name=\"camera_features_unlock_portrait\">Desbloquear modo Retrato</string>\n    <string name=\"camera_features_unlock_slow\">Desbloquear Câmera lenta</string>\n    <string name=\"camera_features_unlock_videosky\">Desbloquear Video-céu</string>\n    <string name=\"camera_features_unlock_vlog\">Desbloquear VLOG</string>\n    <string name=\"camera_features_unlock_vlog_pro\">Desbloquear VLOG PRO</string>\n    <string name=\"camera_features_unlock_film\">Desbloquear Câmera de filme</string>\n    <string name=\"camera_features_unlock_film_delay\">Desbloquear Longa exposição</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">Desbloquear Zoom mágico</string>\n    <string name=\"camera_features_unlock_film_dream\">Desbloquear Sonho</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">Desbloquear Obturador lento</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">Desbloquear Fluxo de tempo</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">Desbloquear Congelar o tempo</string>\n    <string name=\"camera_shot_hand_gesture\">Desbloquear Obturador de palma</string>\n    <string name=\"camera_shot_color_enhance\">Desbloquear Cores aprimoradas</string>\n    <string name=\"camera_shot_makeup\">Desbloquear Maquiagem</string>\n    <string name=\"camera_shot_makeup_desc\">Tem efeito apenas ao usar a câmera frontal</string>\n    <string name=\"camera_record_60fps\">Desbloquear 60FPS</string>\n    <string name=\"camera_record_60fps_desc\">Não disponível em algumas qualidades, por favor, verifique se o seu dispositivo é compatível</string>\n    <string name=\"camera_record_120fps\">Desbloquear 120FPS</string>\n    <string name=\"camera_record_120fps_desc\">Suporta apenas quando houver qualidades 4K, por favor, verifique se o seu dispositivo é compatível</string>\n    <string name=\"camera_record_audio_zoom\">Desbloquear Zoom por áudio</string>\n    <string name=\"camera_record_hdr\">Desbloquear HDR</string>\n    <string name=\"camera_record_ai\">Desbloquear Aprimoramento de IA</string>\n    <string name=\"camera_portrait_new_beauty\">Desbloquear Embelezador</string>\n    <string name=\"camera_portrait_new_beauty_desc\">Tem efeito apenas ao usar a câmera frontal</string>\n    <string name=\"camera_portrait_cvlens\">Desbloquear Lentes Pro</string>\n    <string name=\"camera_portrait_cvlens_desc\">Não funciona corretamente em alguns dispositivos</string>\n    <string name=\"camera_pro_raw\">Desbloquear RAW</string>\n    <string name=\"camera_pro_log\">Desbloquear LOG</string>\n    <string name=\"camera_settings_heic\">Desbloquear HEIF</string>\n    <string name=\"camera_settings_track_focus\">Desbloquear Rastreamento de foco</string>\n    <string name=\"camera_settings_predictive\">Desbloquear Rastrear movimento</string>\n    <string name=\"camera_settings_nevus\">Desbloquear Remover verrugas</string>\n    <string name=\"camera_settings_men_makeup\">Desbloquear Ajustar efeitos de maquiagem para homens</string>\n    <string name=\"camera_settings_lab_options\">Ativar Opções de laboratório</string>\n    <string name=\"camera_settings_track_eyes\">Desbloquear Foco de rastreamento ocular</string>\n    <!--Clock-->\n    <string name=\"clock\">Relógio</string>\n    <string name=\"clock_enable_hour_glass\">Desbloquear animação da ampulheta do relógio</string>\n    <string name=\"clock_enable_hour_glass_desc\">Versão 13.65.0 e superior não são suportadas</string>\n    <!--File Manager-->\n    <string name=\"fileexplorer\">Arquivos</string>\n    <string name=\"file_explorer_can_selectable\">Arquivos pode ser selecionável</string>\n    <string name=\"file_explorer_is_single_line\">Arquivos é de linha única</string>\n    <!--Phone-->\n    <string name=\"incallui\">Ui de chamadas</string>\n    <string name=\"incallui_hide_crbt\">Ocultar tom de toque colorido personalizado</string>\n    <string name=\"incallui_answer_in_head_up\">Responda de cabeça erguida</string>\n    <!--Message-->\n    <string name=\"mms\">Mensagens</string>\n    <string name=\"mms_disable_ad\">Desativar anúncios</string>\n    <string name=\"mms_disable_ad_desc\">Remover atalhos na parte inferior da tela e as promoções abaixo do conteúdo do SMS</string>\n    <!--Phone Service-->\n    <string name=\"phone\">Serviços do smartphone</string>\n    <string name=\"phone_smart_dual_sim\">Desbloquear SIM duplo inteligente</string>\n    <string name=\"phone_vice_slot_volte\">Desbloquear Vice slot volte</string>\n    <string name=\"phone_vice_slot_volte_desc\">Usar dados móveis durante chamadas VoLTE no SIM secundário</string>\n    <!--Download management program-->\n    <string name=\"downloads\">Downloads</string>\n    <string name=\"various_fuck_xlDownload\">Bloquear a criação da pasta .xlDownload</string>\n    <string name=\"various_fuck_xlDownload_desc\">Impedir que o gerenciador de download gere a pasta .xlDownload na raiz do armazenamento interno</string>\n    <!--System UI-->\n    <string name=\"system_ui\">UI do Sistema</string>\n    <string name=\"system_ui_lockscreen_title\">Tela de bloqueio</string>\n    <string name=\"system_ui_lockscreen_safe_title\">Segurança</string>\n    <string name=\"system_ui_lockscreen_ui_title\">Tela de bloqueio</string>\n    <string name=\"system_ui_lockscreen_information_title\">Informação</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">PIN aleatório</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">Ordem aleatória do teclado PIN</string>\n    <string name=\"system_ui_lock_screen_password_free\">Não é necessário digitar a senha quando inicializar</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">Só terá efeito se o dispositivo não estiver ativado para criptografia</string>\n    <string name=\"system_ui_lock_screen_password_free_tip\">O dispositivo atual está criptografado, esta função não está disponível</string>\n    <string name=\"system_ui_lock_screen_default_theme\">Suporta apenas o tema padrão</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">Exibir informações de carregamento na parte inferior da tela de bloqueio</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">Exibir corrente detalhada</string>\n    <string name=\"system_ui_lock_screen_show_battery_temperature\">Exibir temperatura da bateria</string>\n    <string name=\"system_ui_lock_screen_show_spacing\">Intervalo de atualização de tela</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">Ocultar câmera</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">Ocultar tela inteligente</string>\n    <string name=\"system_ui_lock_screen_current\">Corrente</string>\n    <string name=\"system_ui_lock_screen_show_second\">Exibir segundos do relógio</string>\n    <string name=\"system_ui_lock_screen_blur_button\">Desfocar a câmera e o botão de tela inteligente</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">Forçar o relógio a usar fontes do sistema</string>\n    <string name=\"system_ui_lock_screen_double_lock\">Toque duas vezes na tela de bloqueio</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">Toque duas vezes em um local vazio para bloquear a tela</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">Ocultar notificação do Modo foco</string>\n    <string name=\"system_ui_lock_screen_unlock_tip_title\">Ocultar a solicitação de desbloqueio na parte inferior da tela</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">Remover a barra de status na tela de bloqueio</string>\n    <string name=\"system_ui_navigation_title\">Navegação</string>\n    <string name=\"system_ui_navigation_handle_title\">Linha de manuseio</string>\n    <string name=\"system_ui_hide_navigation_bar\">Ocultar barra de navegação</string>\n    <string name=\"system_ui_hide_navigation_bar_more\">Por favor, reinicie os escopos Launcher do sistema e Ui do Sistema</string>\n    <string name=\"system_ui_navigation_handle_custom\">Linha de manuseio personalizada</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">Altura</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">Largura em retrato</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">Largura em paisagem</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">Espessura</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">Cor quando estiver no modo claro</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">Cor quando estiver no modo escuro</string>\n    <string name=\"system_ui_navigation_custom\">Navegação personalizada</string>\n    <string name=\"system_ui_navigation_custom_height\">Altura da navegação</string>\n    <string name=\"system_ui_navigation_custom_height_land\">Altura da navegação no modo paisagem</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">Altura do quadro de navegação</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">Altura do quadro de navegação em paisagem</string>\n    <string name=\"system_ui_statusbar_title\">Barra de status</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">Gerenciar ícones</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">Gerenciar indicador de velocidade da rede</string>\n    <string name=\"system_ui_statusbar_clock_title\">Gerenciar indicador de relógio</string>\n    <string name=\"system_ui_statusbar_device_title\">Indicadores de hardware</string>\n    <string name=\"system_ui_statusbar_layout_title\">Layout</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_title\">Modo de compatibilidade</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_desc\">Ative forçosamente o layout de tela inteira para todas as telas de formato especial</string>\n    <string name=\"system_ui_statusbar_layout_mode_title\">Modo de layout</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">Toque duas vezes para desligar a tela</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">Barra de sinal de duas linhas</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">Estilos de ícones</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">Dimensionamento de ícone</string>\n    <string name=\"system_ui_status_bar_mobile_type_single\">O ícone do tipo de rede móvel é exibido separadamente</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">Exibir à esquerda do sinal</string>\n    <string name=\"system_ui_status_bar_mobile_type_only_show_network\">Exibir apenas cartões de rede</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">Ocultar indicadores de atividade da rede móvel</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">Texto personalizado</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">Tamanho da fonte</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">Trocar ícone e porcentagem da bateria</string>\n    <string name=\"system_ui_status_bar_battery_style_font_size\">Tamanho da fonte da porcentagem da bateria</string>\n    <string name=\"system_ui_status_bar_battery_style_font_mark_size\">Tamanho da fonte do símbolo de porcentagem da bateria</string>\n    <string name=\"system_ui_status_bar_battery_style_vertical_offset\">Deslocamento para cima e para baixo do símbolo de porcentagem da bateria</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wi-Fi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">Bluetooth</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">Rede móvel</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">Localização</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">Ícone de status</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">Ícone de notificação</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">Bateria</string>\n    <string name=\"system_ui_statusbar_iconmanage_call_title\">Chamada</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">Exibir ícones do lado esquerdo</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">Exibir ícones do lado direito</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">Wi-Fi escravo</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Padrão Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">Ponto de acesso Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">Indicador de atividade de rede</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">Bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">Bateria bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">Novo ícone HD</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">Ícone HD pequeno</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">Ícone HD grande</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">Sem ícone do cartão SIM</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">Ícone de sinal do cartão SIM 1</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">Ícone de sinal do cartão SIM 2</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">Lógica de exibição</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">Ícone do tipo de rede grande</string>\n    <string name=\"system_ui_status_bar_icon_location\">Localização</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">Alarme</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">Exibir ícone do alarme apenas antes do alarme disparar</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d horas</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">Modo avião</string>\n    <string name=\"system_ui_status_bar_icon_vowifi\">Ocultar ícone VoWiFi</string>\n    <string name=\"system_ui_status_bar_icon_headset\">Fone de ouvido</string>\n    <string name=\"system_ui_status_bar_icon_volume\">Volume</string>\n    <string name=\"system_ui_status_bar_icon_data_saver\">Economia de dados</string>\n    <string name=\"system_ui_status_bar_icon_zen\">Não perturbe</string>\n    <string name=\"system_ui_status_bar_icon_stealth\">Ocultar ícone do modo incógnito</string>\n    <string name=\"system_ui_status_bar_icon_mute\">Ocultar ícone do microfone silenciado</string>\n    <string name=\"system_ui_status_bar_icon_speakerphone\">Ocultar ícone do viva-voz</string>\n    <string name=\"system_ui_status_bar_icon_call_record\">Ocultar ícone de gravação</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">Número máximo de pontos de notificação</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">Número máximo de ícones de notificação</string>\n    <string name=\"system_ui_status_bar_battery_percent\">Ocultar porcentagem da bateria</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">Ocultar sinal de porcentagem da bateria</string>\n    <string name=\"system_ui_status_bar_battery_charging\">Ocultar indicador de carregamento</string>\n    <string name=\"system_ui_status_bar_battery_icon\">Ocultar ícone da bateria</string>\n    <string name=\"system_ui_status_bar_battery_style_title\">Personalização da bateria</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">Indicador de bateria</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">Rede móvel</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">Trocar Wi-Fi e Rede móvel</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">Velocidade da internet</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">Cena sonora</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">Forçar o uso do novo ícone HD</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">Suporta apenas algumas versões do sistema</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">Separador de velocidade de rede</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">A linha vertical entre o tempo e a velocidade da internet não é exibida em dispositivos com câmera centralizada</string>\n    <string name=\"system_ui_status_bar_hide_icon\">Ocultar a barra de status ao fazer uma captura de tela</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">Ícone do tipo de rede móvel</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">Intervalo de atualização da velocidade da rede</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">Tamanho da fonte da velocidade da rede</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">Valor e unidade serão exibidos em duas linhas</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">Exibir velocidade de rede para cima e para baixo</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">A velocidade de upload e download é exibida em duas linhas</string>\n    <string name=\"system_ui_statusbar_network_speed_swap_places\">Trocar velocidades de uplink e downlink e posições de ícones</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">Exibir velocidades de rede de entrada e saída separadamente</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">Ocultar velocidade de rede lenta</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_all\">Ocultar quando o uplink e o downlink estiverem lentos</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">O indicador não é mais exibido quando a velocidade da rede é baixa</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">Nível de velocidade de rede lenta</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">Os valores da velocidade de rede abaixo desse nível são considerados lentos e um indicador diferente será exibido (apenas alguns ícones)</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">Ocultar sufixo de bytes por segundo (*b/s)</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">Ícone indicador</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">Ativar personalização</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_ms\">%d ms</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_s\">%d s</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_m\">%d m</string>\n    <string name=\"system_ui_statusbar_network_speed_format_KBs\">%d KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_oneKBs\">1 KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_Bs\">B/s</string>\n    <string name=\"system_ui_statusbar_network_speed_lux\">%s lux</string>\n    <string name=\"system_ui_statusbar_clock_mode\">Modo de relógio personalizado</string>\n    <string name=\"system_ui_statusbar_clock_editor\">Formato do relógio</string>\n    <string name=\"system_ui_statusbar_clock_year\">Exibir ano</string>\n    <string name=\"system_ui_statusbar_clock_month\">Exibir mês</string>\n    <string name=\"system_ui_statusbar_clock_date\">Exibir dia</string>\n    <string name=\"system_ui_statusbar_clock_week\">Exibir semana</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">Exibir hora dupla</string>\n    <string name=\"system_ui_statusbar_clock_period\">Exibir período do relógio</string>\n    <string name=\"system_ui_statusbar_clock_second\">Exibir segundos</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">Ocultar espaço</string>\n    <string name=\"system_ui_statusbar_clock_double\">Exibir duplo</string>\n    <string name=\"system_ui_statusbar_clock_double_mode_title\">Alinhamento de duas linhas</string>\n    <string name=\"system_ui_statusbar_clock_desc\">Exemplo do formato de relógio</string>\n    <string name=\"system_ui_statusbar_clock_size\">Tamanho do relógio</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">Tamanho do relógio de duas linhas</string>\n    <string name=\"system_ui_statusbar_indicator_battery_title\">Relacionado à energia</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">Relacionado à temperatura</string>\n    <string name=\"system_ui_statusbar_battery_size\">Tamanho da fonte</string>\n    <string name=\"system_ui_statusbar_battery_show\">Exibir conteúdo</string>\n    <string name=\"system_ui_statusbar_temp_decimal_places\">Ocultar casas decimais</string>\n    <string name=\"system_ui_statusbar_battery_disable\">Ocultar unidades</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">Exibir à direita</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">A corrente sempre exibe um valor positivo</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">Exibir em linha única</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">Ordem reversa</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">Exibir apenas ao carregar</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">Intervalo de atualização de status</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">Corrigir temperatura da CPU</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">Digite o número de /sys/devices/virtual/thermal/thermal_zone*</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">Centralizado</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">Cantos arredondados</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">Limitar visibilidade</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">Alinhar verticalmente</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">Cor</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">Cor da bateria cheia</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">Cor da bateria baixa</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">Cor do modo de economia de energia</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">Cor do carregamento</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">Altura</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">Margem horizontal</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">Transparência</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">Brilhante</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">Nível de bateria baixa</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">Teste</string>\n    <string name=\"system_ui_controlcenter_title\">Centro de controle</string>\n    <string name=\"system_ui_controlcenter_card_title\">Cartão</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">Magnético</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">Notificação</string>\n    <string name=\"system_control_center_qs_detail_bg\">Transparência do fundo do cartão</string>\n    <string name=\"system_control_center_5g_tile\">Interruptor de rede 5G</string>\n    <string name=\"system_control_center_5g_toggle_label\">Rede 5G</string>\n    <string name=\"system_control_center_sunshine_mode\">Modo luz solar</string>\n    <string name=\"system_ui_control_auto_close\">Os blocos magnéticos retraem automaticamente</string>\n    <string name=\"system_ui_control_auto_close_more\">Após abrir, ao clicar no bloco da barra de status, a barra de status será automaticamente retraída</string>\n    <string name=\"system_control_center_qs_tile_label\">Remover nomes</string>\n    <string name=\"system_control_center_qs_rows\">Linhas</string>\n    <string name=\"system_control_center_qs_rows_format\">%d linhas</string>\n    <string name=\"system_control_center_qs_rows_horizontal\">Linhas (Paisagem)</string>\n    <string name=\"system_control_center_qs_columns\">Colunas</string>\n    <string name=\"system_control_center_qs_columns_format\">%d colunas</string>\n    <string name=\"system_control_center_qs_columns_horizontal\">Colunas (Paisagem)</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">Entrada do MiPlay</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">Entrada do Mi Smart Hub</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">Entrada de controle do dispositivo</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">Valor do blur do detalhe de fundo do controle</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">Modelo do blur de notificação</string>\n    <string name=\"system_ui_control_center_notification_blur_fix\">Otimização de notificação</string>\n    <string name=\"system_ui_control_center_notification_blur_fix_desc\">Função experimental, disponível apenas para modelos Android 13 e superiores. Após a ativação, o blur de notificação em algumas áreas será otimizado.\\nPode haver um problema de travamento da interface do sistema em alguns modelos.</string>\n    <string name=\"system_ui_control_center_blur_radius\">Raio do blur</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">Sem notificação suspensa</string>\n    <string name=\"system_ui_control_center_corner_radius\">Raio do canto</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">O tema padrão não precisa ser ajustado</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">Valor do blur de fundo</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">Valor padrão de fundo</string>\n    <string name=\"system_ui_control_center_fix_media_control_panel\">Corrigir painel de controle de mídia</string>\n    <string name=\"system_ui_control_center_compact_notice\">Notificações compactas</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">Reduza o espaçamento vertical das notificações</string>\n    <string name=\"system_ui_control_center_redirect_notice\">Redirecionar configurações de notificação</string>\n    <string name=\"system_ui_control_center_redirect_notice_desc\">Ao abrir o menu de configurações de notificações, navega-se para as configurações do canal de destino em vez de aplicar as configurações de notificação</string>\n    <string name=\"system_ui_control_center_show_weather\">Exibir clima</string>\n    <string name=\"system_ui_control_center_show_weather_city\">Exibir cidade</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">Silenciar quando a tela estiver ligada</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">Quando a tela está ligada, a notificação pop-up não reproduz o som de aviso</string>\n    <string name=\"system_ui_control_center_rounded_rect\">Retângulo arredondado</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">Altere o centro de controle e a gaveta de notificações</string>\n    <string name=\"system_ui_controlcenter_new_title\">Novo centro de controle</string>\n    <string name=\"system_ui_controlcenter_old_title\">Centro de controle antigo</string>\n    <string name=\"system_ui_controlcenter_unlock_old_title\">Desbloquear estilos do centro de controle</string>\n    <string name=\"system_ui_controlcenter_enable_title\">Personalize o número de linhas e colunas</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">Os nomes ficarão ocultos por 5 linhas na orientação retrato. O número de linhas é limitado a 3 com nomes ocultos na orientação paisagem.</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">A orientação paisagem terá uma coluna adicional\\nSe sua ROM tiver uma opção compacta de layout de configurações rápidas, ela adicionará outra coluna em ambas as orientações</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">A orientação paisagem terá uma coluna adicional</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">Número de colunas no painel recolhido</string>\n    <string name=\"system_control_center_old_qs_grid_columns_horizontal\">Número de colunas no painel recolhido (Paisagem)</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">Estilo do ícone bluetooth</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">Mova o ícone do bluetooth para perto do ícone de rede</string>\n    <string name=\"system_ui_other_title\">Outros</string>\n    <string name=\"system_ui_charge_animation_title\">Animação de carregamento</string>\n    <string name=\"system_ui_charge_animation_style\">Estilo da animação de carregamento</string>\n    <string name=\"system_ui_charge_animation_style_desc\">Selecione o estilo da animação de carregamento da tela de bloqueio</string>\n    <string name=\"system_ui_origin_charge_animation\">Animação de carregamento nativo</string>\n    <string name=\"system_ui_another_title\">Outros</string>\n    <string name=\"system_ui_notification_freeform\">Puxe para baixo a barra de notificação de mais apps para abrir uma janela flutuante</string>\n    <string name=\"system_ui_notification_freeform_desc\">As notificações do Mi Push podem não ser suportadas</string>\n    <string name=\"system_ui_monet_title\">Monet</string>\n    <string name=\"system_ui_monet_overlay_custom\">Personalizar cores do tema</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">Personalize as cores do tema em vez de retirar as cores do papel de parede do sistema</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">Escolha a cor do tema</string>\n    <string name=\"system_ui_volume_timer\">Timer estendido</string>\n    <string name=\"system_ui_qs_label\">Guia de troca rápida</string>\n    <string name=\"system_ui_notification_title\">Notificação</string>\n    <string name=\"system_ui_other_notification_fix\">Desativar lista de permissões de notificação</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">Ativar blur na barra de volume</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">Somente para modelos Android12+ MTK, pode haver alta carga na GPU</string>\n    <!--Settings-->\n    <string name=\"system_settings\">Configurações</string>\n    <string name=\"system_settings_international_build\">Versão internacional das configurações</string>\n    <string name=\"system_settings_safe_wifi\">Ver suas senhas de Wi-Fi salvas</string>\n    <string name=\"system_settings_safe_wifi_desc\">Caminho: Configurações - Wi-Fi - Configurações adicionais - Gerenciar redes salvas</string>\n    <string name=\"system_settings_wifipassword_btn_title\">Verificar</string>\n    <string name=\"system_settings_wifi_password_label\">Senha</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">Detalhes do Wi-Fi</string>\n    <string name=\"system_settings_novelty_haptic_title\">Desbloquear nova versão da página de retorno tátil</string>\n    <string name=\"system_settings_novelty_haptic_desc\">Apenas para dispositivos com Sons e Retorno tátil - Página de retorno tátil</string>\n    <string name=\"system_settings_enable_pad_area\">Desbloquear área do Pad</string>\n    <string name=\"system_settings_enable_fold_area\">Desbloquear área Fold</string>\n    <string name=\"system_settings_enable_area_desc\">Dispositivos não suportados farão com que as Configurações travem após serem desbloqueadas</string>\n    <string name=\"system_settings_connection_sharing_title\">Conexão e compartilhamento</string>\n    <string name=\"system_settings_new_nfc_page\">Nova página NFC</string>\n    <string name=\"system_settings_new_nfc_page_desc\">Após a abertura, o app de pagamento padrão para modelos não suportados não pode selecionar Mi Wallet</string>\n    <string name=\"system_settings_accessibility_title\">Atalhos de gestos</string>\n    <string name=\"system_settings_area_screenshot\">Desbloquear captura de tela da área</string>\n    <string name=\"system_settings_lab_title\">Funções em destaque</string>\n    <string name=\"system_settings_voip_assistant_controller\">Assistente VoIP</string>\n    <string name=\"system_settings_ai_image_title\">Motor de imagens IA</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">Desbloquear Super resolução</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">Desbloquear o Aprimoramento de imagens IA e o Aprimoramento HDR por IA</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">Desbloquear MEMC</string>\n    <string name=\"system_settings_permission_title\">Permissão</string>\n    <string name=\"system_settings_permission_show_app_up\">Permissões de nível superior sem pesquisar na lista de apps</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">Restaure o comportamento antigo, pule diretamente para a chave de permissão do app correspondente “exibido no topo de outros apps”</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">Instale permissões de apps desconhecidos sem pesquisar na lista de apps</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">Use a compilação internacional e vá diretamente para o interruptor de permissão correspondente do app \\\"exibido sobre outros apps\\\"</string>\n    <string name=\"system_settings_develop_title\">Opções do desenvolvedor</string>\n    <string name=\"system_settings_apps_freezer\">Forçar a exibição de apps congelados em cache</string>\n    <string name=\"system_settings_apps_freezer_more\">Uma vez ativado, esse recurso pode ser encontrado em “Opções do desenvolvedor”, mas sua funcionalidade não é garantida</string>\n    <string name=\"system_settings_develop_speed_mode\">Modo extremo</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">A entrada não será exibida após a abertura em modelos não suportados</string>\n    <string name=\"system_settings_window_animation_scale\">Escala de animação da janela</string>\n    <string name=\"system_settings_transition_animation_scale\">Escala de animação de transição</string>\n    <string name=\"system_settings_animator_duration_scale\">Escala de duração da animação</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">Temas</string>\n    <string name=\"theme_manager_version_code_modify\">Desativar detecção de versão da MIUI</string>\n    <string name=\"theme_manager_diable_ads\">Desativar anúncios</string>\n    <string name=\"theme_manager_diable_ads_desc\">Substitua anúncios de \\\"adivinhe o que você gosta\\\" por cartões em branco e remova completamente o restante dos anúncios</string>\n    <string name=\"theme_manager_crack\">Correção do tema</string>\n    <string name=\"theme_manager_enable_pad_theme\">Ativar tema Pad</string>\n    <string name=\"theme_manager_enable_fold_theme\">Ativar tema Fold</string>\n    <!--Updater-->\n    <string name=\"updater\">Atualizações</string>\n    <string name=\"updater_fuck_vab\">Remover verificação OTA</string>\n    <string name=\"updater_fuck_vab_desc\">Apenas dispositivos VAB são suportados, por favor, não habilite outros dispositivos não-VAB!\\n- Você pode deslizar para o pacote completo de passagem do cartão de teste interno sem permissões de teste interno\\n- Recomenda-se limpar os dados após o flash em diferentes tipos de versão\\n- Não suporta nenhum uso de ROM não oficial\\n- Esta função é perigosa, por favor, avalie se deve ativá-la após entender a operação do Fastboot</string>\n    <string name=\"updater_version_mode\">Tipo de disfarce</string>\n    <string name=\"updater_big_version\">Versão grande falsa</string>\n    <string name=\"updater_big_version_desc\">Itens que precisam ser preenchidos ao disfarçar a versão Xiaomi HyperOS, o padrão é V816</string>\n    <string name=\"updater_miui_version\">Versão falsa para Atualizações</string>\n    <string name=\"updater_miui_version_desc\">Modifique apenas a atualização do sistema, que pode proteger a atualização do sistema até certo ponto</string>\n    <string name=\"updater_device\">Dispositivo falso para Atualizações</string>\n    <string name=\"updater_device_desc\">Insira o código do modelo do dispositivo de destino para especificar o modelo, que pode ser usado para obter pacotes de ROM para outros modelos, o que é extremamente perigoso</string>\n    <!--Permissions-->\n    <string name=\"lbe\">Permissões</string>\n    <string name=\"clipboard\">Área de transferência</string>\n    <string name=\"lbe_disable_clipboard_tip\">Ocultar dicas rápidas</string>\n    <string name=\"lbe_clipboard_tip_toast\">Leia a área de transferência usando dicas rápidas</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">Oculte a caixa de diálogo e permita que o app leia a área de transferência por padrão</string>\n    <string name=\"lbe_clipboard_tip\">Ler área de transferência</string>\n    <!--Cast-->\n    <string name=\"milink\">Transmitir</string>\n    <string name=\"milink_unlock_mishare\">Desbloquear Interconexão do dispositivo</string>\n    <!--Always-on display-->\n    <string name=\"aod\">Tela sempre ativa</string>\n    <string name=\"aod_unlock_always_on_display\">Desbloquear limite de tempo de exibição da tela sempre ativa</string>\n    <!--Taplus-->\n    <string name=\"content_extension\">Taplus</string>\n    <string name=\"content_extension_browser\">Usar navegador de terceiros</string>\n    <string name=\"content_extension_browser_desc\">Torne o Taplus não obrigatório para usar o Navegador MIUI para pesquisas, você precisa escolher o navegador padrão por conta própria</string>\n    <string name=\"content_extension_unlock_taplus_title\">Desbloquear Taplus</string>\n    <string name=\"content_extension_unlock_taplus_horizontal_title\">Permitir o uso do taplus em telas de paisagem</string>\n    <string name=\"content_extension_double_press\">Gesto: 2 dedos</string>\n    <string name=\"content_extension_super_image\">Qualidade das imagens salvas: Super resolução</string>\n    <string name=\"content_extension_super_image_summary\">A verdadeira preservação requer suporte subjacente do modelo do dispositivo</string>\n    <string name=\"content_extension_link_open_mode\">Como abrir o link</string>\n    <string name=\"content_extension_link_open_mode_desc\">Escolha um navegador para abrir o link</string>\n    <!--Mi Canvas-->\n    <string name=\"creation\">Mi Canvas</string>\n    <string name=\"creation_unlock\">Remover restrições sobre o uso de telefones móveis</string>\n    <!--Gallery-->\n    <string name=\"gallery\">Galeria</string>\n    <string name=\"gallery_enable_hdr_enhanced\">Desbloquear alta faixa dinâmica da tela</string>\n    <string name=\"gallery_enable_pdf\">Desbloquear Criar PDF</string>\n    <string name=\"gallery_enable_ocr\">Desbloquear Reconhecer texto</string>\n    <string name=\"gallery_enable_ocr_form\">Desbloquear tabela de digitalização</string>\n    <string name=\"gallery_enable_id_photo\">Desbloquear Identificação</string>\n    <string name=\"gallery_enable_photo_movie\">Desbloquear Clipe</string>\n    <string name=\"gallery_enable_video_post\">Desbloquear Efeitos de vídeo</string>\n    <string name=\"gallery_enable_video_editor\">Desbloquear Editor de vídeo</string>\n    <string name=\"gallery_enable_text_yanhua\">Desbloquear Fogos de artifício de texto</string>\n    <string name=\"gallery_enable_remover_2\">Desbloquear Apagar</string>\n    <string name=\"gallery_enable_magic_matting\">Desbloquear Corte</string>\n    <string name=\"gallery_enable_magic_sky\">Desbloquear Céu</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">Componentes de segurança da MIUI</string>\n    <string name=\"guard_provider_disable_upload_applist\">Impedir o upload automático da lista de apps instalados</string>\n    <!--System launcher-->\n    <string name=\"home\">Launcher do sistema</string>\n    <string name=\"home_gesture\">Gestos e Navegação</string>\n    <string name=\"home_navigation_title\">Navegação</string>\n    <string name=\"home_navigation_quick_back\">Volte para o app anterior</string>\n    <string name=\"home_navigation_quick_back_more\">Deslize pela tela começando pela borda para voltar ao app anterior</string>\n    <string name=\"home_navigation_back_area_height\">Altura da área do gesto de retorno</string>\n    <string name=\"home_navigation_back_area_width\">Largura da área do gesto de retorno</string>\n    <string name=\"home_gesture_title2\">Gestos</string>\n    <string name=\"home_gesture_mainscreen_title\">Tela principal</string>\n    <string name=\"home_gesture_gesture_title\">Gesto em tela cheia</string>\n    <string name=\"home_gesture_double_tap\">Duplo clique</string>\n    <string name=\"home_gesture_double_tap_desc\">Toque duas vezes em qualquer lugar da tela inicial</string>\n    <string name=\"home_gesture_shake\">Agitar</string>\n    <string name=\"home_gesture_shake_desc\">Agite o dispositivo em qualquer tela inicial</string>\n    <string name=\"home_gesture_left_swipe\">Deslize para esquerda</string>\n    <string name=\"home_gesture_left_swipe_desc\">Deslize para esquerda na tela inicial da dock</string>\n    <string name=\"home_gesture_right_swipe\">Deslize para direita</string>\n    <string name=\"home_gesture_right_swipe_desc\">Deslize para direita na tela inicial da dock</string>\n    <string name=\"home_gesture_up_swipe\">Deslize para cima</string>\n    <string name=\"home_gesture_up_swipe_desc\">Deslize para cima com um dedo em qualquer tela inicial</string>\n    <string name=\"home_gesture_down_swipe\">Deslize para baixo</string>\n    <string name=\"home_gesture_down_swipe_desc\">Deslize para baixo com um dedo em qualquer tela inicial</string>\n    <string name=\"home_gesture_up_swipe2\">Deslize para cima com dois dedos</string>\n    <string name=\"home_gesture_up_swipe2_desc\">Deslize para cima com dois dedos em qualquer tela inicial</string>\n    <string name=\"home_gesture_down_swipe2\">Deslizar para baixo com dois dedos</string>\n    <string name=\"home_gesture_down_swipe2_desc\">Deslize para baixo com dois dedos em qualquer tela inicial</string>\n    <string name=\"home_gesture_pinch\">Pince com dois dedos</string>\n    <string name=\"home_gesture_spread\">Espalhe com dois dedos</string>\n    <string name=\"home_gesture_swipe_and_stop\">Deslize e pare</string>\n    <string name=\"home_gesture_swipe_and_stop_desc\">Deslize e pare na tela que não é a inicial</string>\n    <string name=\"home_gesture_multi_choose_app\">Selecione um app</string>\n    <string name=\"home_gesture_multi_choose_app_none\">Nenhum</string>\n    <string name=\"home_layout\">Layout</string>\n    <string name=\"home_layout_home_title\">Tela inicial</string>\n    <string name=\"home_layout_hotseats_title\">Dock</string>\n    <string name=\"home_layout_searchbar_title\">Barra de pesquisa</string>\n    <string name=\"home_layout_seek_points\">Indicador de página</string>\n    <string name=\"home_layout_show_clock\">Mostrar hora</string>\n    <string name=\"home_layout_show_clock_desc\">A página onde o widget de relógio está localizado sempre exibe a hora</string>\n    <string name=\"home_layout_unlock_grids\">Desbloquear layout</string>\n    <string name=\"home_layout_unlock_grids_desc\">Desbloquear limite de tamanho de layout do ícone da tela inicial</string>\n    <string name=\"home_layout_unlock_grids_no_words\">Desbloquear layout (sem modo de palavra)</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">Desbloquear limite de tamanho de layout do ícone da tela inicial</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">Distância da tela inicial da margem inferior da tela</string>\n    <string name=\"home_layout_workspace_padding_top_desc\">Distância da tela inicial da margem superior da tela</string>\n    <string name=\"home_layout_hotseats_height\">Altura</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">Distância da dock da margem do indicador de página</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">Distância da dock da margem inferior da tela</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">Distância da barra de pesquisa da margem inferior da tela</string>\n    <string name=\"home_folder\">Pasta</string>\n    <string name=\"home_small_folder_title\">Pasta Pequena</string>\n    <string name=\"home_big_folder_title\">Pasta Grande</string>\n    <string name=\"home_small_folder_icon_bg\">Fundo do ícone</string>\n    <string name=\"home_small_folder_icon_bg_custom\">Fundo personalizado</string>\n    <string name=\"home_small_folder_icon_bg_size\">Tamanho do fundo</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">Fundo horizontal de três grades personalizado</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">Personalizado</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">Largura do fundo</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">Altura do fundo</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">Fundo vertical de três grades personalizado</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">Personalizado</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">Largura do fundo</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">Altura do fundo</string>\n    <string name=\"home_big_folder_icon_bg\">Fundo XXL personalizado</string>\n    <string name=\"home_big_folder_icon_bg_custom\">Personalizado</string>\n    <string name=\"home_big_folder_icon_bg_width\">Largura do fundo</string>\n    <string name=\"home_big_folder_icon_bg_height\">Altura do fundo</string>\n    <string name=\"home_big_folder_item_max_count\">Pasta grande</string>\n    <string name=\"home_big_folder_icon_bg_2x1_n\">4*2 fundo personalizado</string>\n    <string name=\"home_big_folder_icon_bg_1x2_n\">2*2 fundo personalizado</string>\n    <string name=\"home_big_folder_icon_bg_n\">3*3 e 4*4 fundo personalizado</string>\n    <string name=\"home_auto_close_folder_title\">Fechar automaticamente</string>\n    <string name=\"home_auto_close_folder_summary\">Feche a pasta após a abertura do app</string>\n    <string name=\"home_wallpaper\">Fundo</string>\n    <string name=\"home_wallpaper_blur\">Blur do fundo</string>\n    <string name=\"home_enable_blur\">Iniciar blur</string>\n    <string name=\"home_blur_radius_title\">Raio do blur</string>\n    <string name=\"home_folder_shade_title\">Cor de sobreposição</string>\n    <string name=\"home_folder_shade_summary\">Melhore ou enfraqueça a cor do fundo</string>\n    <string name=\"home_folder_shade_solid\">Fundo inteiro</string>\n    <string name=\"home_folder_shade_gradient\">Somente meio</string>\n    <string name=\"home_folder_shade_level_title\">Intensidade da cor</string>\n    <string name=\"home_folder_cols_title\">Número de colunas nas pastas</string>\n    <string name=\"home_folder_cols_format\">%d colunas</string>\n    <string name=\"home_folder_vertical_padding_title\">Espaçamento horizontal da pasta</string>\n    <string name=\"home_folder_width_title\">Use a largura total da pasta</string>\n    <string name=\"home_folder_space_title\">Reduzir margens</string>\n    <string name=\"home_folder_blur_title\">Blur do fundo</string>\n    <string name=\"home_folder_anim_title\">Animação de recuo</string>\n    <string name=\"home_folder_anim_1\">Velocidade de abertura 1</string>\n    <string name=\"home_folder_anim_2\">Velocidade de abertura 2</string>\n    <string name=\"home_folder_anim_3\">Velocidade de encerramento 1</string>\n    <string name=\"home_folder_anim_4\">Velocidade de encerramento 2</string>\n    <string name=\"home_drawer\">Gaveta de apps</string>\n    <string name=\"home_drawer_all\">Remover aba \\\"Todos\\\"</string>\n    <string name=\"home_drawer_all_desc\">Remover a aba \\\"Todos\\\" para agrupar apps na gaveta</string>\n    <string name=\"home_drawer_editor\">Ocultar botão \\\"Editar\\\"</string>\n    <string name=\"home_drawer_editor_desc\">Remover o botão \\\"Editar\\\" da guia de apps na gaveta</string>\n    <string name=\"home_drawer_blur\">Ativar blur de exibição de contêiner de todos os apps</string>\n    <string name=\"home_drawer_blur_desc\">Por favor, defina a transparência da gaveta de apps de fundo para 100% para usar este recurso</string>\n    <string name=\"home_drawer_pinyin\">Organizado em ordem Pinyin</string>\n    <string name=\"home_drawer_pinyin_more\">Quando o idioma não é o Chinês Simplificado, os apps na gaveta ainda são organizados de acordo com o Pinyin</string>\n    <string name=\"home_title\">Ícone e título</string>\n    <string name=\"home_title_icon_title\">Ícone</string>\n    <string name=\"home_title_bigicon_title\">Ícone grande</string>\n    <string name=\"home_title_title_title\">Título</string>\n    <string name=\"home_title_title_marquee\">Rolagem de texto</string>\n    <string name=\"home_title_title_marquee_desc\">Nomes de apps muito longos serão rolados em vez de agrupados</string>\n    <string name=\"home_title_title_new_install\">Não mostrar novo indicador de instalação do app</string>\n    <string name=\"home_title_drawer_font_hidden\">Ocultar todos os nomes dos apps</string>\n    <string name=\"home_title_drawer_font_hidden_more\">O nome do app na gaveta também ficará oculto.\\nSe você quiser manter o nome do app na gaveta, use Tamanho da fonte para ajustá-lo.</string>\n    <string name=\"home_title_title_new_install_more\">Não exiba o indicador próximo ao nome do app ao instalar um novo app</string>\n    <string name=\"home_title_font_size\">Tamanho da fonte</string>\n    <string name=\"home_title_title_color\">Cor do título</string>\n    <string name=\"home_title_animation_speed\">Velocidade da animação</string>\n    <string name=\"home_title_big_icon_corner\">Siga o canto redondo do ícone médio</string>\n    <string name=\"home_title_download_animation\">Baixar animação</string>\n    <string name=\"home_title_fix_animation\">Animação de interrupção otimizada</string>\n    <string name=\"home_title_icon_scale\">Dimensionamento de ícones</string>\n    <string name=\"home_title_disable_hide_file\">Desative a ocultação do ícone \\\"arquivo\\\"</string>\n    <string name=\"home_title_disable_hide_theme\">Não esconda o ícone do \\\"gerenciador de temas\\\"</string>\n    <string name=\"home_title_custom_anim_param\">Parâmetro de animação personalizado</string>\n    <string name=\"home_title_custom_anim_param_damping_title\">Amortecimento</string>\n    <string name=\"home_title_custom_anim_param_stiffness_title\">Rigidez</string>\n    <string name=\"home_recent\">Recentes</string>\n    <string name=\"home_recent_animation_speed\">Velocidade da animação</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">Desativar o escurecimento do papel de parede</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">Ocultar barra de status nos recentes</string>\n    <string name=\"home_recent_hide_freeform\">Ocultar botão Janelas flutuantes</string>\n    <string name=\"home_recent_hide_clean_up\">Ocultar botão de limpeza</string>\n    <string name=\"home_recent_remove_icon\">Remover ícone</string>\n    <string name=\"home_recent_modify_animation\">Modifique a animação para remover apps</string>\n    <string name=\"home_recent_text\">Texto exibido quando não há tarefas recentes</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">Distância do nome e ícone do app nos recentes</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">Cantos arredondados do cartão nos recentes</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">Tamanho da miniatura para Horizontalmente-Vertical</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">Tamanho da miniatura para Horizontalmente-Horizontal</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">Tamanho da miniatura para Verticalmente</string>\n    <string name=\"home_recent_text_size\">Tamanho do texto das miniaturas</string>\n    <string name=\"home_recent_text_color\">Cor do texto das miniaturas</string>\n    <string name=\"home_recent_freeform_background_color\">Cor de fundo do cartão do app Janelas flutuantes</string>\n    <string name=\"home_recent_show_real_memory\">Exibir memória real</string>\n    <string name=\"home_recent_show_memory_info_sum\">Apenas para uso em tablets</string>\n    <string name=\"home_recent_show_memory_info\">Mostrar informações de memória</string>\n    <string name=\"home_recent_always_show_clean_up\">Não ocultar o botão de limpeza quando não houver apps em segundo plano</string>\n    <string name=\"home_widget\">Widget</string>\n    <string name=\"home_widget_all_widget_animation\">Animação do widget</string>\n    <string name=\"home_widget_show_miui_widget\">Exibir widgets da MIUI</string>\n    <string name=\"home_widget_show_miui_widget_desc\">Exibir widgets da MIUI na página Widgets Android</string>\n    <string name=\"home_widget_corner_radius\">Cantos arredondados do widget</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">Permitir que o widget clássico seja movido para a tela negativa</string>\n    <string name=\"home_widget_hide_title\">Ocultar nome dos widgets</string>\n    <string name=\"home_widget_resizable\">Remover quaisquer limitações de tamanho do widget</string>\n    <string name=\"home_dock\">Dock</string>\n    <string name=\"home_dock_bg_enable\">Adicionar blur do fundo na dock</string>\n    <string name=\"home_dock_bg_height\">Altura</string>\n    <string name=\"home_dock_bg_height_desc\">Altura da dock</string>\n    <string name=\"home_dock_bg_margin_horizontal\">Margem vertical</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Distância da dock de ambos os lados da tela</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Margem da dock do indicador de tela</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Margem da dock na parte inferior da tela</string>\n    <string name=\"home_dock_icon_margin_bottom\">Margem inferior do ícone</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Distância do ícone da dock da margem inferior da tela</string>\n    <string name=\"home_dock_bg_custom\">Blur do fundo</string>\n    <string name=\"home_dock_icon_bottom_margin\">Distância do ícone da margem inferior</string>\n    <string name=\"home_dock_margin_bottom\">Margem do indicador de página da parte inferior da tela</string>\n    <string name=\"home_dock_unlock_hotseat\">Remover restrição de ícones na dock</string>\n    <string name=\"home_dock_fold\">Dock estilo Fold</string>\n    <string name=\"home_dock_hide_seekpoint\">Ocultar ponto de busca</string>\n    <string name=\"home_dock_icon_title\">Exibir título do ícone na dock</string>\n    <string name=\"home_dock_disable_recents_icon\">Ocultar ícones de apps recentes da dock</string>\n    <string name=\"home_other\">Outros</string>\n    <string name=\"home_other_shortcut_title\">Atalho</string>\n    <string name=\"home_other_home_mode\">Modo desktop</string>\n    <string name=\"home_other_infinite_scroll\">Rolagem infinita</string>\n    <string name=\"home_other_infinite_scroll_desc\">Pule da última página para a primeira e vice-versa</string>\n    <string name=\"home_other_freeform_shortcut_menu\">Modo Janelas flutuantes</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">Adicionar menu de Janelas flutuantes ao menu de atalho</string>\n    <string name=\"home_other_tasks_shortcut_menu\">Modo mais tarefas</string>\n    <string name=\"home_other_tasks_shortcut_menu_desc\">Adicionar novo menu de tarefas ao menu de atalho</string>\n    <string name=\"home_other_user_present_animation\">Otimizar animação de desbloqueio</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">Sempre desfocar o papel de parede na launcher</string>\n    <string name=\"home_other_perfect_icon\">Prioridade de ícone perfeito</string>\n    <string name=\"home_other_icon_mono_chrome\">Cor de fundo do ícone</string>\n    <string name=\"home_other_icon_monet_color\">Usar cor do monet</string>\n    <string name=\"home_other_use_edit_color\">Editar cor</string>\n    <string name=\"home_other_your_color\">Sua cor</string>\n    <string name=\"home_other_portrait_reverse\">Tela vertical oposta</string>\n    <string name=\"home_other_shortcut_background_blur\">Blur do fundo para o menu de atalho</string>\n    <string name=\"home_other_blur_radius\">Raio do blur</string>\n    <string name=\"home_large_icon_corner_radius\">Ícones grandes com cantos arredondados</string>\n    <string name=\"home_other_app_icon_hide\">Gerenciar atalhos da tela inicial</string>\n    <string name=\"home_other_toast_slide_again\">Proibir avisos \\\"por favor, passe novamente\\\"</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">Remover restrições de atalhos</string>\n    <string name=\"home_other_disable_hide_google\">Desativar ocultar o Google</string>\n    <string name=\"home_other_fix_android_r_s\">Corrigir um problema de compatibilidade que fazia com que a tela inicial ficasse preta</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">Valor do blur do menu de atalho</string>\n    <string name=\"home_other_high_models\">Reconhecimento obrigatório como modelo high-end</string>\n    <string name=\"home_recent_blur_level\">Nível do blur</string>\n    <string name=\"home_recent_complete_blur_plus\">Blur Plus completo</string>\n    <string name=\"home_recent_complete_blur\">Blur completo</string>\n    <string name=\"home_recent_test_blur\">Testar blur</string>\n    <string name=\"home_recent_simple_blur\">Blur simples</string>\n    <string name=\"home_recent_none_blur\">Sem blur</string>\n    <string name=\"home_recent_none_blur_simple_anim\">Sem blur (Animação simples)</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_title\">Desbloquear mais opções para configurações da tela inicial</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_desc\">As funções desbloqueadas podem não estar disponíveis e algumas funções requerem suporte do sistema subjacente</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">Editor da Galeria</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">Desbloquear limite mínimo de corte de imagem</string>\n    <string name=\"mediaeditor_filter_manager\">Desbloquear gerenciador de filtros</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">Compartilhamento Mi</string>\n    <string name=\"mishare_disable_mishare_auto_off\">Desativar o fechamento automático do Compartilhamento Mi</string>\n    <string name=\"mishare_unlock_turbo_mode\">Desbloquear transferência turbo</string>\n    <!--Wallpaper-->\n    <string name=\"miwallpaper\">Papéis de Parede Mi</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">Desbloquear Super plano de fundo</string>\n    <!--Package installer-->\n    <string name=\"package_installer\">Instalador de Pacotes</string>\n    <string name=\"miui_package_installer_modify\">Purificar a página</string>\n    <string name=\"miui_package_installer_safe_mode\">Modo limpo</string>\n    <string name=\"miui_package_installer_safe_mode_desc\">Forçar a abertura e bloquear a segurança oficial</string>\n    <string name=\"miui_package_installer_disable_ad\">Desativar promoção</string>\n    <string name=\"miui_package_installer_install_risk\">Desativar detecção de risco</string>\n    <string name=\"miui_package_installer_safe_model_tip\">Desativar alerta de segurança</string>\n    <string name=\"miui_package_installer_count_checking\">Desativar verificação de apps instalados com frequência</string>\n    <string name=\"miui_package_installer_update_system_app\">Remover restrições de instalação de apps do sistema</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">Permitir que qualquer canal que não seja do sistema instale apps do sistema</string>\n    <string name=\"miui_package_installer_install_source\">Fonte de instalação personalizada</string>\n    <string name=\"miui_package_installer_apk_info\">Exibir mais informações do pacote</string>\n    <string name=\"miui_package_installer_apk_info_desc\">Exibir mais informações sobre o app que está sendo instalado</string>\n    <!--networkboost-->\n    <string name=\"various_disable_link_turbo_toast\">Ocultar brinde LinkTurbo</string>\n    <string name=\"various_disable_link_turbo_toast_more\">Por favor, reinicie o NetworkBoost no escopo de reinicialização rápida</string>\n    <!--nfc-->\n    <string name=\"nfc\">Serviço NFC</string>\n    <string name=\"nfc_disable_sound\">Desativar som</string>\n    <string name=\"nfc_allow_information_screen\">Permitir reconhecível quando a tela de informações</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">Assistente</string>\n    <string name=\"personal_assistant_widget_crack\">Correção do widget</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Peso Pad/Fold</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">Ativar widgets de estilo Pad/Fold</string>\n    <string name=\"personal_assistant_overlap_mode\">Estilo de dobra da tela negativa</string>\n    <string name=\"personal_assistant_blur_model\">Modelo do blur do assistente pessoal</string>\n    <string name=\"personal_assistant_blur_value\">Estilo do fundo</string>\n    <string name=\"personal_assistant_blurradius\">Valor do blur do assistente pessoal</string>\n    <string name=\"personal_assistant_color\">Cor do assistente pessoal</string>\n    <!--Music-->\n    <string name=\"music\">Música</string>\n    <string name=\"music_disable_ad\">Remover anúncios</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">Bateria e desempenho</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">Apps personalizados com alta taxa de atualização</string>\n    <string name=\"powerkeeper_lock_max_fps\">Bloquear FPS máximo</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">Tente não encerrar os apps</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">Pode aumentar o consumo de energia</string>\n    <string name=\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\">Impedir a recuperação da lista de permissões de otimização de bateria</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">Gravador de tela</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">Forçar ativação do suporte de gravação de tela AOSP</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">Requer suporte a versão de gravação de tela</string>\n    <string name=\"screen_recorder_config\">Adicionar mais opções de taxa de quadros e taxa de bits</string>\n    <string name=\"screen_recorder_config_desc\">Por favor, escolha de acordo com a situação do hardware</string>\n    <string name=\"screen_recorder_more_volume\">Desbloquear mais volume de</string>\n    <string name=\"screen_recorder_more_volume_desc\">Algumas versões não são suportadas</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">Especifique o local para salvar gravações de tela Movies/ScreenRecorder</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">Captura de tela</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">Desbloquear limite mínimo de recorte de imagem</string>\n    <string name=\"screenshot_unlock_privacy_marking_title\">Desbloquear marcação de privacidade</string>\n    <string name=\"screenshot_unlock_privacy_marking_desc\">Uma versão superior do app \\\"Mi AI Engine\\\" precisa ser pré-instalada para uso normal</string>\n    <string name=\"screenshot_save_to_pictures_desc\">Captura de tela canônica salva em /Pictures/Screenshots</string>\n    <string name=\"screenshot_device_customize_title\">Modelo de captura de tela personalizado com shell</string>\n    <string name=\"screenshot_device_customize_desc\">Por favor, insira o código do modelo</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">Segurança</string>\n    <string name=\"security_center_pad\">Central de segurança para tablets</string>\n    <string name=\"security_center_app_title\">Gerenciar apps</string>\n    <string name=\"security_center_battery_title\">Economia de bateria e Bateria</string>\n    <string name=\"security_center_privacy_title\">Proteção de privacidade</string>\n    <string name=\"security_center_beauty_title\">Assistente da câmera frontal</string>\n    <string name=\"security_center_bubble_and_freeform_title\">Bolha e janelas flutuantes</string>\n    <string name=\"security_center_newbox_title\">Barra lateral</string>\n    <string name=\"security_center_dolby_open\">Feche a janela pop-up Dolby</string>\n    <string name=\"security_center_show_battery_temperature\">Exibir temperatura da bateria</string>\n    <string name=\"security_center_ai_clipboard\">Proteger área de transferência</string>\n    <string name=\"security_center_blur_location\">Precisão de localização mais baixa</string>\n    <string name=\"security_center_gms_open\">Serviço GMS</string>\n    <string name=\"security_center_flash_light\">Controle de brilho da lanterna</string>\n    <string name=\"security_center_flash_light_more\">Permite que você controle o brilho da lanterna arrastando o controle deslizante de brilho</string>\n    <string name=\"security_center_get_number\">Gerencie o app para obter o número do celular e faça login com um clique</string>\n    <string name=\"security_center_applock_pin_scramble\">Bloqueio de apps com PIN embaralhado</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">Alterar aleatoriamente a sequência do PIN do Bloqueio de apps</string>\n    <string name=\"security_center_beauty_light_auto\">Desbloquear Brilho da luz de preenchimento</string>\n    <string name=\"security_center_beauty_face\">Desbloquear Embelezar para videochamadas</string>\n    <string name=\"security_center_beauty_privacy\">Desbloquear Câmera de privacidade</string>\n    <string name=\"security_center_beauty_pc\">Desbloquear Mantenha os rostos centralizados</string>\n    <string name=\"security_center_disable_root_check\">Desativar detecção de root</string>\n    <string name=\"security_center_remove_macro_black_list\">Remover lista negra de combinação automática</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">Desativar notificações de \\\"App malicioso encontrado\\\"</string>\n    <string name=\"security_center_newbox_custom_enable\">Ativar personalização</string>\n    <string name=\"security_center_newbox_bg_custom\">Blur do fundo</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">Margem horizontal</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">Margem vertical</string>\n    <string name=\"security\">Segurança</string>\n    <string name=\"security_app_title\">Exibir detalhes adicionais do app</string>\n    <string name=\"security_app_summary\">Adicione novos campos à página de informações do app:\\n- Número da versão do app\\n- ID do usuário\\n- Diretório de dados\\n- Diretório APK\\n- Versão mínima do SDK\\n- Versão do SDK de destino\\n- Abrir com a Play Store \\n- Iniciar</string>\n    <string name=\"security_app_sort_title\">Classificação da lista de gerenciar apps</string>\n    <string name=\"security_app_sort_summary\">Modifique a classificação padrão da lista de gerenciar apps</string>\n    <string name=\"security_restrict_app_title\">Restrições completas</string>\n    <string name=\"security_restrict_app_summary\">Permite configurar a economia de bateria e acesso ao Wi-Fi para apps do sistema</string>\n    <string name=\"security_disable_app_title\">Controle de estado do app</string>\n    <string name=\"security_disable_app_summary\">Permite desativar qualquer app na página de informações do app</string>\n    <string name=\"security_disable_app_url_title\">Aplicar gerenciamento de link aberto</string>\n    <string name=\"security_disable_app_url_summary\">Altere a configuração \\\"Limpar padrões\\\" para \\\"Abrir por padrão\\\" nas informações do app</string>\n    <string name=\"app_link_open_always\">Permite que o app abra links compatíveis</string>\n    <string name=\"app_link_open_never\">Não permitir que apps abram links</string>\n    <string name=\"open_by_default\">Abrir por padrão</string>\n    <string name=\"security_score\">Desativar otimização de verificação de saúde</string>\n    <string name=\"security_score_summary\">Bloquear 100 pontos e desativar a otimização</string>\n    <string name=\"security_center_skip_waiting_time\">Ignorar limite de contagem regressiva</string>\n    <string name=\"security_center_skip_waiting_time_desc\">Ignorar a contagem regressiva de espera para opções perigosas</string>\n    <string name=\"security_center_newbox_blur\">Blur da barra lateral</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">Remover restrições do app de notificação em bolha</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">Ocultar aviso sobre nível de bateria fraca</string>\n    <string name=\"security_center_remove_low_battery_reminder_summary\">Quando a bateria estiver abaixo de 20%, a caixa de diálogo de aviso para ativar o modo de economia de bateria não aparecerá mais</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">Remover pop-up de app aberto</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">Remover o pop-up \\\"Permitir que XXX abra XXX\\\" do início da cadeia</string>\n    <string name=\"security_center_no_permission\">Permissões necessárias não concedidas</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">Desbloquear ocultar na lateral em janelas flutuantes</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">Desbloquear ocultar na lateral em janelas flutuantes para dispositivos com suporte limitado, porém restritos. Isso também afetará o comportamento do widget quando o telefone for cortado em segundo plano</string>\n    <string name=\"security_center_unlock_smart_charge_title\">Desbloqueie as funções Proteção inteligente contra carga e Carga rápida de bateria fraca</string>\n    <string name=\"security_center_super_wireless_charge\">Desbloquear Carregamento rápido sem fios</string>\n    <string name=\"security_center_blur_model\">Modelo do blur da barra lateral</string>\n    <string name=\"security_center_blurradius\">Valor do blur da barra lateral</string>\n    <string name=\"security_center_color\">Cor da barra lateral</string>\n    <string name=\"security_center_other_title\">Outros</string>\n    <string name=\"security_center_sidebar_line_color\">Cor da linha da barra lateral personalizada</string>\n    <string name=\"security_center_sidebar_line_color_default\">Cor padrão da linha da barra lateral</string>\n    <string name=\"security_center_sidebar_line_color_dark\">Cor da linha da barra lateral escura</string>\n    <string name=\"security_center_sidebar_line_color_light\">Cor da linha da barra lateral clara</string>\n    <string name=\"security_center_disable_ban\">Remover botão de relatório</string>\n    <string name=\"security_center_unlock_screen_time\">Exibir dados detalhados do consumo de energia</string>\n    <string name=\"security_center_unlock_screen_time_desc\">Exibir informações do uso de energia da tela na parte superior da bateria e retomar a exibição do consumo de energia e do tempo de todos os outros apps</string>\n    <string name=\"security_center_unlock_gun_service\">Desbloquear Serviço de armas</string>\n    <string name=\"security_center_disable_remove_screen_hold_on\">Desativar remover tela em espera</string>\n    <string name=\"security_center_unlock_memc\">Desbloquear MEMC</string>\n    <string name=\"security_center_unlock_enhance_contours\">Desbloquear Melhorar contornos</string>\n    <string name=\"security_center_unlock_s_resolution\">Desbloquear Super resolução</string>\n    <string name=\"security_center_hide_sidebar\">Ocultar barra lateral</string>\n    <string name=\"security_center_leave_open\">Deixe o slide desdobrado</string>\n    <string name=\"security_center_disable_sidebar_show_suggest\">Desativar mostrar sugestões de apps</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">Cartões inteligentes</string>\n    <string name=\"tsmclient_auto_nfc\">Gerenciar NFC automaticamente</string>\n    <string name=\"tsmclient_auto_nfc_desc\">O NFC é ativado automaticamente ao entrar na página de passagem do cartão e é desativado automaticamente ao sair</string>\n    <string name=\"tsmclient_nfc_turning_on\">Ativando o NFC automaticamente…</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">Ative o NFC manualmente</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">Falha ao ativar o NFC automaticamente</string>\n    <!--Weather-->\n    <string name=\"weather\">Clima</string>\n    <string name=\"weather_device_level_title\">Nível da animação</string>\n    <string name=\"weather_device_level_title_low\">Baixa</string>\n    <string name=\"weather_device_level_title_middle\">Média</string>\n    <string name=\"weather_device_level_title_high\">Alta</string>\n    <!--AI Translate-->\n    <string name=\"aiasst\">Tradutor IA</string>\n    <string name=\"aiasst_ai_captions\">Forçar legendas IA habilitadas</string>\n    <string name=\"aiasst_ai_captions_desc\">Somente Chinês e Inglês podem ser reconhecidos e traduzidos</string>\n    <!--Barrage-->\n    <string name=\"barrage\">Barragem</string>\n    <string name=\"barrage_any_barrage\">Permitir que todos os apps usem barragem</string>\n    <string name=\"barrage_custom_barrage_length\">Comprimento de barragem personalizado</string>\n    <!--Joyose-->\n    <string name=\"joyose\">Joyose</string>\n    <string name=\"joyose_cloud_control_title\">Controle de nuvem</string>\n    <string name=\"joyose_disable_cloud_control\">Desativar Controle de nuvem</string>\n    <string name=\"joyose_game_title\">Game Space</string>\n    <string name=\"joyose_enable_gpu_tuner\">Agendamento de desempenho</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">Após abrir, adicione as configurações relacionadas à GPU dos jogos na parte inferior do Game Space</string>\n    <!--GetApps-->\n    <string name=\"market\">GetApps</string>\n    <string name=\"market_device_modify\">Disfarçar modelo</string>\n    <string name=\"market_device_modify_desc\">O modelo do dispositivo disfarçado é o Xiaomi 13 Ultra</string>\n    <string name=\"market_disable_new_icon\">Proibir o uso de ícones de terceiros</string>\n    <string name=\"market_disable_new_icon_desc\">Deixe a tela inicial mais limpa</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">Desbloquear MIUI+</string>\n    <!--Mi Settings-->\n    <string name=\"mi_settings\">Configurações Mi</string>\n    <string name=\"mi_input_settings\">Configurações de entrada</string>\n    <string name=\"mi_settings_show_fps\">Exibir mais lista de FPS</string>\n    <string name=\"mi_settings_show_fps_desc\">O módulo desbloqueia todas as taxas de quadros por padrão, não é garantido que estejam disponíveis</string>\n    <!--MTB-->\n    <string name=\"mtb\">MTB</string>\n    <string name=\"mtb_auth\">Ignorar autenticação MTB</string>\n    <string name=\"mtb_auth_desc\">Este é um recurso de alto risco, quaisquer problemas decorrentes disso será de responsabilidade do usuário. Por favor, tenha cuidado para fazer backup de sua banda base. Digite *#*#MODEMTEST#*#* na interface de discagem para abrir as Configurações do MTB</string>\n    <!--Scanner-->\n    <string name=\"scanner\">Scanner</string>\n    <string name=\"scanner_card\">Desbloquear Escanear cartão ID</string>\n    <string name=\"scanner_translation\">Desbloquear Tradução</string>\n    <string name=\"scanner_ocr\">Desbloquear OCR</string>\n    <string name=\"scanner_document\">Desbloquear Escanear documento</string>\n    <string name=\"scanner_excel\">Desbloquear Escanear tabela</string>\n    <string name=\"scanner_ppt\">Desbloquear Escanear PPT</string>\n    <string name=\"scanner_doc_ppt\">Desbloquear Escanear arquivos</string>\n    <!--Other-->\n    <string name=\"various\">Outros</string>\n    <string name=\"notes\">Notas</string>\n    <string name=\"share_center\">Mi Smart Hub</string>\n    <string name=\"new_task\">Nova tarefa</string>\n    <string name=\"custom_hook\">Personalizado</string>\n    <string name=\"app_version_not_supported\">Versão não suportada</string>\n    <string name=\"various_location_simulation_title\">Localização falsa</string>\n    <string name=\"various_dialog_title\">Caixa de diálogo</string>\n    <string name=\"various_mipad_title\">MiPad</string>\n    <string name=\"various_open_aosp_something_title\">Recursos ocultos</string>\n    <string name=\"various_open_aosp_something_desc\">Abra a interface AOSP \\\"oculta\\\"</string>\n    <string name=\"settings_notfication_importance\">Exibir importância da notificação</string>\n    <string name=\"various_no_overscroll\">Desativar rejeição fora dos limites</string>\n    <string name=\"various_disable_bluetooth_restrict\">Impedir que o bluetooth seja desligado temporariamente</string>\n    <string name=\"various_disable_access_device_logs\">Ignorar diálogo de solicitação de logs do dispositivo de acesso</string>\n    <string name=\"various_unlock_ime\">Desbloquear IME</string>\n    <string name=\"various_unlock_ime_desc\">Após abrir, verifique o escopo do método de entrada correspondente no gerenciador Xposed</string>\n    <string name=\"various_collapse_miui_title\">Título MIUI</string>\n    <string name=\"various_collapse_miui_title_desc\">Ajuste o título da barra superior em apps da MIUI</string>\n    <string name=\"various_disable_folder_cantuse\">Remover limite de pastas indisponíveis</string>\n    <string name=\"various_super_clipboard_title\">Super Área de Transferência</string>\n    <string name=\"various_unlock_super_clipboard\">Desbloquear Super área de transferência</string>\n    <string name=\"various_super_clipboard_summary\">Somente apps que contêm metadados is_support_miui_super_clipboard são suportados</string>\n    <string name=\"various_super_clipboard_picture_desc\">Permitir copiar imagem para a área de transferência</string>\n    <string name=\"various_super_clipboard_files_desc\">Permitir copiar arquivos para a área de transferência</string>\n    <string name=\"various_open_aosp_battery_title\">Otimização de bateria</string>\n    <string name=\"various_open_aosp_notification_title\">Notificações</string>\n    <string name=\"various_open_aosp_app_manage_title\">Gerenciamento de apps</string>\n    <string name=\"various_open_aosp_language_title\">Idiomas, entrada e gestos</string>\n    <string name=\"various_open_aosp_extremely_dark_title\">Extra escuro</string>\n    <string name=\"various_mipad_input_title\">Entrada</string>\n    <string name=\"various_mipad_input_close_magic_title\">Sem ponteiro mágico</string>\n    <string name=\"various_mipad_input_close_magic_desc\">Transforme o ponteiro redondo da MIUI em ponteiro AOSP.</string>\n    <string name=\"various_mipad_input_restore_esc_title\">Restaurar função ESC</string>\n    <string name=\"various_mipad_input_restore_esc_desc\">Restaure a função ESC que foi mapeada para a função \\\"voltar\\\" pela MIUI.</string>\n    <string name=\"various_mipad_input_disable_bluetooth_title\">Remover restrição da caneta bluetooth</string>\n    <string name=\"various_mipad_input_disable_bluetooth_desc\">Faça com que todas as canetas compatíveis funcionem sem a necessidade de conexão bluetooth com a caneta oficial.</string>\n    <string name=\"various_mipad_input_bluetooth_version_title\">Versão do driver</string>\n    <string name=\"various_mipad_input_bluetooth_version_desc\">Versão do driver para remover a restrição da caneta bluetooth</string>\n    <string name=\"various_mipad_input_ingore_gesture_title\">Ignorar o gesto dos botões da caneta</string>\n    <string name=\"various_mipad_input_ingore_gesture_desc\">Ignorar o gesto de pressão longa nos botões da caneta</string>\n    <string name=\"various_mipad_input_need_finger_num_title\">Troque o número de dedos necessários para gestos</string>\n    <string name=\"various_mipad_input_need_finger_num_desc\">Altere o gesto de captura de tela, o gesto de captura de tela parcial e o gesto de tela dividida horizontal para serem acionados por quatro dedos e mude o gesto de apps para ser acionado por três dedos</string>\n    <string name=\"custom_background_blur_enabled\">Blur do fundo</string>\n    <string name=\"custom_background_blur_radius\">Raio do blur</string>\n    <string name=\"custom_background_color\">Cor do fundo</string>\n    <string name=\"custom_background_color_alpha\">Transparência da cor do fundo</string>\n    <string name=\"custom_background_corner_radius\">Cantos arredondados do fundo</string>\n    <string name=\"custom_blur_enabled\">Blur do fundo</string>\n    <string name=\"various_blur_radius\">Raio do blur</string>\n    <string name=\"various_background_corner_radius\">Cantos arredondados do fundo</string>\n    <string name=\"various_background_alpha\">Transparência da máscara de fundo</string>\n    <string name=\"various_background_color\">Cor de fundo</string>\n    <string name=\"various_dialog_window_blur_title\">Blur</string>\n    <string name=\"various_dialog_gravity\">Localização da janela pop-up</string>\n    <string name=\"various_dialog_margin_horizontal\">Janela pop-up para margem vertical</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">A distância entre a janela pop-up e as laterais da tela</string>\n    <string name=\"various_dialog_margin_bottom\">Janela pop-up para margem vertical</string>\n    <string name=\"various_dialog_margin_bottom_desc\">A distância da janela pop-up até a parte inferior da tela</string>\n    <string name=\"various_dialog_window_blur\">Blur da janela</string>\n    <string name=\"various_dialog_window_blur_radius\">Raio do blur da janela</string>\n    <string name=\"location_data_title\">Base de dados</string>\n    <string name=\"various_location_simulation_1_title\">Tarefa 1</string>\n    <string name=\"various_location_simulation_2_title\">Tarefa 2</string>\n    <string name=\"various_location_simulation_3_title\">Tarefa 3</string>\n    <string name=\"various_location_simulation_all_title\">Universal</string>\n    <string name=\"location_simulation_package_name\">Nomes de pacotes</string>\n    <string name=\"location_simulation_location\">Localização</string>\n    <string name=\"location_simulation_location_custom\">Selecionar localização</string>\n    <string name=\"location_simulation_network\">Rede</string>\n    <string name=\"location_simulation_operator_fix\">Correção de mascaramento da operadora</string>\n    <string name=\"location_simulation_mac\">Endereço MAC</string>\n    <string name=\"location_simulation_wifi\">Wi-Fi</string>\n    <string name=\"location_simulation_router_mac\">Endereço MAC do roteador</string>\n    <string name=\"location_simulation_work_title\">Título</string>\n    <string name=\"location_simulation_work_offset\">Deslocamento</string>\n    <string name=\"location_simulation_work_base_station\">Estação base</string>\n    <string name=\"location_simulation_work_longitude_latitude\">Longitude e latitude</string>\n    <string name=\"location_simulation_work_remarks\">Marca</string>\n    <string name=\"app_details_playstore\">Abrir com a Play Store</string>\n    <string name=\"app_details_launch\">Iniciar</string>\n    <string name=\"app_details_nolaunch\">O app não tem nenhuma atividade padrão para inicializar</string>\n    <string name=\"app_details_apk_file\">Diretório APK</string>\n    <string name=\"app_details_apk_version_code\">Número da versão do app</string>\n    <string name=\"app_details_data_path\">Diretório de dados</string>\n    <string name=\"app_details_app_uid\">ID do usuário</string>\n    <string name=\"app_details_sdk\">Versão do SDK de destino</string>\n    <string name=\"app_details_min_sdk\">Versão mínima do SDK</string>\n    <string name=\"disable_app_settings\">É uma má ideia!</string>\n    <string name=\"disable_app_title\">Você tem certeza de que deseja desativar este app?</string>\n    <string name=\"disable_app_text\">Se este for um app de sistema necessário, desativá-lo pode causar danos</string>\n    <string name=\"disable_app_fail\">Falha ao alterar o estado do app</string>\n    <string name=\"unlimited\">Ilimitado</string>\n    <string name=\"calls\">Ligar</string>\n    <string name=\"system_volume\">Sistema</string>\n    <string name=\"notification_volume\">Notificação</string>\n    <string name=\"freeform_notification\">Janela flutuante de notificação</string>\n    <string name=\"share_app\">Compartilhar com apps de terceiros</string>\n    <string name=\"show_newmods_title\">Marcar novo módulo</string>\n    <string name=\"default_volume_stream_ring\">Tocar</string>\n    <string name=\"default_volume_stream_media\">Mídias</string>\n    <string name=\"default_volume_stream_tip\">Notificação</string>\n    <string name=\"open_with_test_picture\">Imagem</string>\n    <string name=\"open_with_test_audio\">Áudio</string>\n    <string name=\"open_with_test_media\">Vídeo</string>\n    <string name=\"open_with_test_doc\">Documento</string>\n    <string name=\"open_with_test_zip\">Arquivo</string>\n    <string name=\"open_with_test_all\">Todos</string>\n    <string name=\"location_custom\">Personalizado</string>\n    <string name=\"operator_fix_none\">Não reparar</string>\n    <string name=\"operator_fix_1\">Método 1</string>\n    <string name=\"operator_fix_2\">Método 2 (recomendado)</string>\n    <string name=\"custom_hook_new\">Adicionar gancho</string>\n    <string name=\"custom_hook_mode\">Selecionar modo</string>\n    <string name=\"cemiuiler_notice\">Puxe a barra de status para baixo para exibir os interruptores de atalho e as notificações do sistema</string>\n    <string name=\"cemiuiler_restart_quick\">Reiniciar apps rapidamente</string>\n    <string name=\"location_add\">Adicionar</string>\n    <string name=\"location_delete\">Excluir</string>\n    <!--Tip-->\n    <string name=\"tip_0\">Dica: Aqui vai uma dica!</string>\n    <string name=\"tip_1\">Dica: Você pode nos apoiar doando em \\\"Sobre - Patrocinadores\\\".</string>\n    <string name=\"tip_2\">Dica: Quer entrar em contato com o desenvolvedor? Telegram: @Sevtinge_PM_bot ou Bilibili: @绀漓丨Sevtinge.</string>\n    <string name=\"tip_3\">Dica: Quer entrar no grupo oficial? Telegram: @cemiuiler ou pesquise 247909573 no QQ.</string>\n    <string name=\"tip_4\">Dica: Cemiuiler = Ceiler + MIUI, Ceiler = Ceil + er.</string>\n    <string name=\"tip_5\">Dica: Adivinhe quantas vezes mais você terá que ver essa dica novamente?</string>\n    <string name=\"tip_6\">Dica: Torne a MIUI ótima novamente!</string>\n    <string name=\"tip_7\">Dica: Seja bem-vindo para seguir no Github: @sevtinge ou Bilibili: @绀漓丨Sevtinge.</string>\n    <string name=\"tip_8\">Dica: A utopia ideal não existe na realidade.</string>\n    <string name=\"tip_9\">Dica: A cidade de Sanjiang tende a entrar em colapso.</string>\n    <string name=\"tip_10\">Dica: Ah, esse mundo é tão lindo…       Pena que essa beleza não pertença ao Sevtinge.</string>\n    <string name=\"tip_11\">Dica: Guardei alguns bugs para que você saiba que está usando o Cemiuiler.</string>\n    <string name=\"tip_12\">Dica: Você sabe? Na verdade, Dicas é tudo bobagem. (Convencido)</string>\n    <string name=\"tip_13\">Dica: Você sabe? O aniversário do Cemiuiler é em 1 de maio e o aniversário de Sevtinge é em 2 de fevereiro.</string>\n    <string name=\"tip_14\">Dica: Sevtinge estudou na Escola de Engenharia e Tecnologia da Informação do Campus da cidade de Sanjiang da Universidade de Shanhe.</string>\n    <string name=\"tip_15\">Dica: Eu ouvi dizer que o Sevtinge tem duas formas diferentes.</string>\n    <string name=\"tip_16\">Dica: Sevtinge é uma raposinha! (Descartar)</string>\n    <string name=\"tip_17\">Dica: Ling Qiqi tem duas personalidades, uma é um controle de garota-gato e a outra é um controle de loli</string>\n    <string name=\"tip_18\">Dica: Cemiuiler é o app de sistema com consumo de bateria mais rápido (fala mal-humorada)</string>\n    <string name=\"tip_19\">Dica: Se não houver nenhuma anotação especial para a função que fica cinza, significa que a função está anormal e não está planejada para ser aberta aos usuários por enquanto</string>\n    <string name=\"tip_20\">Dica: Não persiga a nova versão do Canary se não tiver nada para fazer e não se apresse em atualizar se ela estiver quebrada</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru-rRU/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">Сделайте MIUI снова великой!</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">Русский</string>\n    <string name=\"translator\">EvilGoodd</string>\n    <string name=\"translator_url\">https://github.com/evilgoodd</string>\n    <string name=\"settings\">Настройки</string>\n    <string name=\"about\">О приложении</string>\n    <string name=\"about_use\">Цитирование</string>\n    <string name=\"about_use_desc\">Cemiuiler использует некоторые или все из данных проектов с открытым исходным кодом, спасибо разработчикам этих проектов за их поддержку (в произвольном порядке)</string>\n    <string name=\"about_contributer\">Участники</string>\n    <string name=\"about_contributer_desc\">Спасибо данным участникам за их помощь в разработке Cemiuiler (в произвольном порядке)</string>\n    <string name=\"about_donation\">Спонсоры</string>\n    <string name=\"about_donation_desc\">Вы можете поддержать нас, сделав пожертвование</string>\n    <string name=\"settings_data_title\">Резервное копирование и восстановление</string>\n    <string name=\"settings_bug_title\">Диагностика</string>\n    <string name=\"settings_debug_title\">Отладка</string>\n    <string name=\"settings_hide_app_icon\">Значок на раб.столе</string>\n    <string name=\"settings_icon\">Значок в настройках</string>\n    <string name=\"settings_icon_desc\">Установите местоположение модуля в системных настройках</string>\n    <string name=\"settings_icon_disable\">Отключить</string>\n    <string name=\"settings_icon_top\">Вверху</string>\n    <string name=\"settings_icon_medium\">Посередине</string>\n    <string name=\"settings_icon_down\">Внизу</string>\n    <string name=\"settings_icon_mode\">Стиль значка</string>\n    <string name=\"settings_icon_miui_14\">Закругленный квадрат</string>\n    <string name=\"settings_icon_miui_13\">Стиль удаления фона</string>\n    <string name=\"settings_reboot\">Перезапустить выбранное приложение</string>\n    <string name=\"settings_back\">Сохранить настройки модуля</string>\n    <string name=\"settings_rest\">Восстановить настройки модуля</string>\n    <string name=\"settings_reset\">Сбросить настройки модуля</string>\n    <string name=\"reset_title\">Выполнить сброс?</string>\n    <string name=\"reset_desc\">После сброса конфигурации модуля все его данные будут удалены!</string>\n    <string name=\"reset_okay\">Конфигурация модуля сброшена</string>\n    <string name=\"backup_success\">Готово</string>\n    <string name=\"backup_failed\">Не удалось</string>\n    <string name=\"rest_title\">Восстановить</string>\n    <string name=\"rest_success\">Восстановлено успешно</string>\n    <string name=\"rest_failed\">Сбой восстановления</string>\n    <string name=\"backup_ask\">Создать резервную копию?</string>\n    <string name=\"backup_permission\">Необходимо вручную включить разрешения для этой опции</string>\n    <string name=\"rest_ask\">Восстановить резервную копию?</string>\n    <string name=\"rest_permission\">Теперь нужно вручную включить разрешения для этой опции</string>\n    <string name=\"disable_detailed_log\">Отключить подробный журнал</string>\n    <string name=\"disable_detailed_log_desc\">Перезагрузите телефон для применения эффекта</string>\n    <string name=\"settings_safe_mode\">Безопасный режим</string>\n    <string name=\"settings_safe_mode_desc\">Остановить работу модуля</string>\n    <string name=\"about_developer_title\">Разработчики</string>\n    <string name=\"about_translator_title\">Переводчик</string>\n    <string name=\"about_chat_title\">Обсуждение</string>\n    <string name=\"about_other_title\">Другое</string>\n    <string name=\"about_qq_group\">QQ Group</string>\n    <string name=\"about_qq_channel\">QQ Channel</string>\n    <string name=\"about_tg_group\">Telegram Группа</string>\n    <string name=\"about_tg_channel\">Telegram Канал</string>\n    <string name=\"about_github\">Исходный код</string>\n    <string name=\"about_github_desc\">Этот проект с открытым исходным кодом основан на лицензии AGPL-3.0.</string>\n    <string name=\"about_offical\">Официальный сайт</string>\n    <string name=\"about_crwd\">Crowdin</string>\n    <string name=\"about_crwd_desc\">Помогите нам перевести Cemiuiler на ваш язык</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">Перезагрузка </string>\n    <string name=\"tip\">Совет</string>\n    <string name=\"hook_failed\">Модуль не активирован</string>\n    <string name=\"preference_default_value_text\">Стандарт</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">Верхняя граница</string>\n    <string name=\"bottom_margin\">Нижняя граница</string>\n    <string name=\"left_margin\">Левый интервал</string>\n    <string name=\"right_margin\">Правый интервал</string>\n    <string name=\"vertical_offset\">Смещение вверх и вниз</string>\n    <string name=\"horizontal_alignment\">Горизонтальное выравнивание</string>\n    <string name=\"feature\">Функции</string>\n    <string name=\"recommend\">Рекомендованное</string>\n    <string name=\"editor\">Редактор</string>\n    <string name=\"record\">Видео</string>\n    <string name=\"shot\">Фото</string>\n    <string name=\"portrait\">Портрет</string>\n    <string name=\"camera_pro\">ПРО</string>\n    <string name=\"enable\">Активировать</string>\n    <string name=\"custom_enable\">Настройка дока</string>\n    <string name=\"search\">Поиск</string>\n    <string name=\"floating_window\">Всплывающее окно</string>\n    <string name=\"save_to_screen_title\">Место сохранения</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">По умолчанию</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">Развернуть</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">Исправить ширину содержимого</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">Предотвратить дрожание соседних элементов влево и вправо</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">Жирный</string>\n    <!--Multi-list Array-->\n    <string name=\"array_close\">Закрыть</string>\n    <string name=\"array_default\">Стандарт</string>\n    <string name=\"array_align_left\">Слева</string>\n    <string name=\"array_align_right\">Справа</string>\n    <string name=\"array_align_center\">По центру</string>\n    <string name=\"array_netspeedicons_no\">Без значков</string>\n    <string name=\"array_bold\">Жирный</string>\n    <string name=\"array_theme\">Отслеживать тему</string>\n    <string name=\"array_clock_default\">По умолчанию</string>\n    <string name=\"array_clock_geek\">Для гиков</string>\n    <string name=\"array_battery_both\">Обе</string>\n    <string name=\"array_battery_power\">Мощность</string>\n    <string name=\"array_battery_current\">Ток</string>\n    <string name=\"array_battery_temp\">Темп.батареи</string>\n    <string name=\"array_cpu_temp\">Темп.проца</string>\n    <string name=\"array_global_actions_none\">Без действий</string>\n    <string name=\"array_global_actions_notif\">Открыть панель уведомлений</string>\n    <string name=\"array_global_actions_eqs\">Открыть панель Быстрых Настроек</string>\n    <string name=\"array_global_actions_lock\">За​бло​ки​ро​вать устройство</string>\n    <string name=\"array_global_actions_sleep\">Выключить экран</string>\n    <string name=\"array_global_actions_screenshot\">Сделать снимок экрана</string>\n    <string name=\"array_global_actions_menu\">Открыть меню</string>\n    <string name=\"array_global_actions_recents\">Открыть недавние приложения</string>\n    <string name=\"array_global_actions_volume\">Открыть диалог громкости</string>\n    <string name=\"array_global_actions_volume_up\">Громкость +</string>\n    <string name=\"array_global_actions_volume_down\">Громкость -</string>\n    <string name=\"array_global_actions_launch\">Запустить приложение</string>\n    <string name=\"array_global_actions_launch_choose\">Выбор приложения</string>\n    <string name=\"array_global_actions_shortcut\">Запустить ярлык</string>\n    <string name=\"array_global_actions_activity\">Запустить компонент</string>\n    <string name=\"array_global_actions_toggle\">Вкл/выкл настройку</string>\n    <string name=\"array_global_actions_back\">Предыдущее приложение</string>\n    <string name=\"array_global_actions_forceclose\">Принудительно закрыть текущее приложение</string>\n    <string name=\"array_global_actions_powermenu\">Открыть меню управления питанием</string>\n    <string name=\"array_global_actions_powermenu_short\">Управление питанием</string>\n    <string name=\"array_global_actions_clear_memory\">Очистить память</string>\n    <string name=\"array_global_actions_invert_colors\">Ин​вер​ти​ро​вать цвета</string>\n    <string name=\"array_global_actions_switchkeyboard\">Выбор клавиатуры</string>\n    <string name=\"array_global_actions_goback\">Назад</string>\n    <string name=\"array_global_actions_onehanded_left\">Управление одной рукой (Слева)</string>\n    <string name=\"array_global_actions_onehanded_right\">Управление одной рукой (Справа)</string>\n    <string name=\"array_global_actions_scrolltotop\">Прокрутка вверх</string>\n    <string name=\"array_global_actions_expandsidebar\">Показать боковую панель</string>\n    <string name=\"array_global_actions_floatingwindow\">Плавающее окно</string>\n    <string name=\"array_global_actions_pinningwindow\">Закрепить окно</string>\n    <string name=\"array_align_top\">Сверху</string>\n    <string name=\"array_align_bottom\">Снизу</string>\n    <string name=\"array_discrete\">Раздельно</string>\n    <string name=\"array_gradual\">Градиент</string>\n    <string name=\"array_rainbow\">Цвета радуги</string>\n    <string name=\"various_install_app_info_version_name\">Версия</string>\n    <string name=\"various_install_app_info_version_code\">Код</string>\n    <string name=\"various_install_app_info_sdk\">Поддерживает SDK</string>\n    <string name=\"various_install_app_size\">Размер</string>\n    <string name=\"charge_animation_entries_disable\">Откл</string>\n    <string name=\"charge_animation_entries_aura\">Аура</string>\n    <string name=\"charge_animation_entries_stream\">Блики</string>\n    <string name=\"charge_animation_entries_alpha\">Ритм</string>\n    <string name=\"status_bar_icon_mode_default\">По умолчанию</string>\n    <string name=\"status_bar_icon_mode_on\">Всегда показывать</string>\n    <string name=\"status_bar_icon_mode_off\">Всегда скрывать</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">Скрывать только когда не подключено</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">Показывать перед срабатыванием</string>\n    <string name=\"seek_points_roll\">Показывать только при пролистывании экрана</string>\n    <string name=\"seek_points_edit\">Показывать только в режиме редактирования</string>\n    <string name=\"home_mode_day\">Светлый режим</string>\n    <string name=\"home_mode_dark\">Темный режим</string>\n    <string name=\"dialog_gravity_medium\">По центру</string>\n    <string name=\"dialog_gravity_down\">Внизу</string>\n    <string name=\"collapse_miui_title_off\">Свернуть</string>\n    <string name=\"collapse_miui_title_on\">Развернуть</string>\n    <string name=\"collapse_miui_title_off_always\">Всегда свернуто</string>\n    <string name=\"collapse_miui_title_on_always\">Всегда развернуто</string>\n    <string name=\"link_open_mode_default\">Системный по умолчанию</string>\n    <string name=\"link_open_mode_mi\">Mi Браузер</string>\n    <string name=\"app_sort_running\">По умолчанию</string>\n    <string name=\"app_sort_name\">Имя приложения</string>\n    <string name=\"app_sort_frequency\">Частота использования</string>\n    <string name=\"app_sort_storage\">Занимаемое место</string>\n    <string name=\"app_sort_install\">Время установки</string>\n    <string name=\"array_bluetooth_tile_style_3rows\">Три большие плитки</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\">Одна большая и две маленькие плитки</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">Системный фреймворк</string>\n    <string name=\"system_framework_volume_title\">Громкость</string>\n    <string name=\"system_framework_other_title\">Другое</string>\n    <string name=\"system_framework_display_title\">Экран</string>\n    <string name=\"system_framework_phone_title\">Сеть</string>\n    <string name=\"system_framework_bubble_title\">Всплывающее уведомление</string>\n    <string name=\"system_framework_freeform_count\">Многооконный режим</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">Разрешить плавающие окна принудительно</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">Игнорирует системный черный список и программный запрет на малые окна</string>\n    <string name=\"system_framework_freeform_sticky\">Запомнить состояние</string>\n    <string name=\"system_framework_freeform_bubble\">Всплывающее окно</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">Многооконный режим для всех</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">Включает многооконный режим для всех малых окон в недавних задачах\nЭта функция является экспериментальной и очень нестабильна</string>\n    <string name=\"system_framework_freeform_jump\">При переходе в другое приложение, открывать с помощью плавающего окна</string>\n    <string name=\"system_framework_freeform_title_desc\">В следующих сценариях, для перехода к другим приложениям, будет использоваться плавающее окно для открытия</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">Только поддерживаемые ссылки</string>\n    <string name=\"system_framework_default_volume_stream\">Настройка громкости по умолчанию</string>\n    <string name=\"system_framework_volume_first_press\">Мгновенная регулировка громкости</string>\n    <string name=\"system_framework_volume_separate_control\">Независимый регулятор громкости</string>\n    <string name=\"system_framework_volume_disable_safe\">Убрать предупреждение безопасности для высокой громкости</string>\n    <string name=\"system_framework_volume_separate_slider\">Ползунок громкости уведомлений</string>\n    <string name=\"system_framework_volume_media_steps\">Уровень громкости мультимедиа</string>\n    <string name=\"system_framework_volume_media_steps_desc\">Это может привести к зависанию прокрутки панели громкости или неправильному уровню громкости Bluetooth</string>\n    <string name=\"system_framework_volume_steps\">Множитель уровня громкости</string>\n    <string name=\"system_ui_display_brightness_title\">Яркость</string>\n    <string name=\"system_ui_display_auto_brightness\">Автоматический диапазон яркости</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">Определение минимальных и максимальных значений для автояркости</string>\n    <string name=\"system_ui_display_min_brightness\">Минимальная автояркость</string>\n    <string name=\"system_ui_display_max_brightness\">Максимальная автояркость</string>\n    <string name=\"system_framework_phone_network_title\">Настройки сети</string>\n    <string name=\"phone_double_5g_nr\">Обе SIM 5G (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">Основная и дополнительная SIM-карты одновременно включают 5G (дополнительная SIM-карта поддерживает только NSA)</string>\n    <string name=\"phone_double_5g_sa\">Обе SIM SA (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">Экспериментальные функции. Делает дополнительную SIM-карту с поддержкой SA</string>\n    <string name=\"system_framework_phone_band_title\">Настройки частоты</string>\n    <string name=\"phone_n1\">N1 Band</string>\n    <string name=\"phone_n1_desc\">Поддержка N1 Band (NR)</string>\n    <string name=\"phone_n28\">N28 Band</string>\n    <string name=\"phone_n28_desc\">Поддержка N28 Band (NR)</string>\n    <string name=\"phone_n5_n8\">N5/N8 Band</string>\n    <string name=\"phone_n5_n8_desc\">Введите *#*#65686633#*#* в интерфейсе набора номера для поддержки диапазона N5/N8. Если на нем отображается включить режим N5 и N8, функция будет включена.</string>\n    <string name=\"system_framework_screen_all_rotations\">Все ориентации автоповорота экрана</string>\n    <string name=\"system_framework_allow_untrusted_touch\">Разрешить подозрительное нажатие</string>\n    <string name=\"system_framework_allow_uninstall\">Разрешить удаление некоторых предустановленных приложений</string>\n    <string name=\"system_framework_allow_uninstall_desc\">Эта функция представляет опасность</string>\n    <string name=\"system_framework_disable_app_link_verify\">Отключить проверку ссылки на приложение</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">Возвращает к открытию поддерживаемых приложений непосредственно при открытии ссылок, не включая поддерживаемые ссылки в настройках приложения</string>\n    <string name=\"system_framework_clean_share_menu\">Настроить меню \\\"Поделиться\\\"</string>\n    <string name=\"system_framework_clean_share_apps\">Выбранные приложения</string>\n    <string name=\"system_framework_clean_share_apps_desc\">Выбранное приложение не будет отображаться в меню \\\"Поделиться\\\"</string>\n    <string name=\"system_framework_clean_open_menu\">Настроить меню \\\"Открыть с помощью\\\"</string>\n    <string name=\"system_framework_clean_open_apps\">Выбранные приложения</string>\n    <string name=\"system_framework_clean_open_apps_desc\">Выбранное приложение не будет отображаться в меню \\\"Открыть с помощью\\\"</string>\n    <string name=\"system_other_flag_secure\">Скриншот для всех приложений</string>\n    <string name=\"system_other_flag_secure_desc\">Позволяет делать скриншоты и запись экрана любого приложения</string>\n    <string name=\"system_other_delete_on_post_notification\">Отключить уведомление о отображении поверх других</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">Убирает уведомление \\\"Это приложение отображается поверх других приложений на экране\\\"</string>\n    <string name=\"system_framework_share_menu_test\">Тест меню \\\"Поделиться\\\"</string>\n    <string name=\"system_framework_open_with_menu_test\">Тест меню \\\"Открыть с помощью\\\"</string>\n    <string name=\"system_framework_other_use_original_animation\">В анимации перехода используются собственные стили</string>\n    <string name=\"system_framework_other_speed_install\">Быстрая установка</string>\n    <string name=\"system_framework_other_speed_install_desc\">Установка в оперативную память для ускоренния процедуры</string>\n    <string name=\"system_framework_other_disable_cleaner\">Отключить выгрузку фоновых приложений</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">Это экспериментальная функция, которая может привести к неправильному использованию оперативной памяти</string>\n    <string name=\"system_framework_disable_72h_verify\">Отключить проверку экрана блокировки каждые 72 часа</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">Патч ядра</string>\n    <string name=\"system_framework_core_patch_downgr\">Разрешить понижение версии</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">Позволяет понизить версию приложений</string>\n    <string name=\"system_framework_core_patch_auth_creak\">Отключить проверку подписи</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">Позволяет устанавку приложения после изменения apk (игнорирует ошибку неверной подписи)</string>\n    <string name=\"system_framework_core_patch_digest_creak\">Отключить сравнение подписей</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">Позволяет повторную установку приложения с другими подписями</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">Использовать установленные подписи</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">Эта функция чрезвычайно опасна и следует включать ее только в случае крайней необходимости</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">Расширенный режим</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">Пройдите проверку в приложении</string>\n    <!--Browser-->\n    <string name=\"browser\">Браузер</string>\n    <string name=\"browser_debug_mode\">Параметры разработчика</string>\n    <string name=\"browser_debug_mode_desc\">17.5.xxxxx и выше не поддерживается</string>\n    <!--Camera-->\n    <string name=\"camera\">Камера</string>\n    <string name=\"camera_features_unlock_aiwatermark\">Умный водяной знак</string>\n    <string name=\"camera_features_unlock_ambilight\">Длинная выдержка</string>\n    <string name=\"camera_features_unlock_clone\">Режим Клон</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">Карманное зеркало</string>\n    <string name=\"camera_features_unlock_doc\">Режим Документ</string>\n    <string name=\"camera_features_unlock_idcard\">Режим ID-карта</string>\n    <string name=\"camera_features_unlock_dualcam\">Двойная камера</string>\n    <string name=\"camera_features_unlock_duration\">Замедленная съемка</string>\n    <string name=\"camera_features_unlock_milive\">Короткие видео</string>\n    <string name=\"camera_features_unlock_moon\">Режим Супер-луны</string>\n    <string name=\"camera_features_unlock_pano\">Панорама</string>\n    <string name=\"camera_features_unlock_pixel\">Режим Pixel</string>\n    <string name=\"camera_features_unlock_portrait\">Портрет</string>\n    <string name=\"camera_features_unlock_slow\">Замедленная съемка</string>\n    <string name=\"camera_features_unlock_videosky\">Video-sky</string>\n    <string name=\"camera_features_unlock_vlog\">Vlog</string>\n    <string name=\"camera_features_unlock_vlog_pro\">Vlog Pro</string>\n    <string name=\"camera_features_unlock_film\">Кино-камера</string>\n    <string name=\"camera_features_unlock_film_delay\">Длительная выдержка</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">Масштабирование</string>\n    <string name=\"camera_features_unlock_film_dream\">Мечты</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">Замедленная выдержка</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">Обратный поток</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">Заморозка</string>\n    <string name=\"camera_shot_hand_gesture\">Снимок ладонью</string>\n    <string name=\"camera_shot_color_enhance\">Улучшение цвета</string>\n    <string name=\"camera_shot_makeup\">Макияж</string>\n    <string name=\"camera_shot_makeup_desc\">Работает только с фронтальной камерой</string>\n    <string name=\"camera_record_60fps\">60 FPS</string>\n    <string name=\"camera_record_60fps_desc\">Недоступно в некоторых качествах, убедитесь, что ваше устройство поддерживается</string>\n    <string name=\"camera_record_120fps\">120 FPS</string>\n    <string name=\"camera_record_120fps_desc\">Поддерживает только качество 4K, убедитесь, что ваше устройство поддерживается</string>\n    <string name=\"camera_record_audio_zoom\">Фокусировка микрофона</string>\n    <string name=\"camera_record_hdr\">HDR</string>\n    <string name=\"camera_record_ai\">AI улучшения</string>\n    <string name=\"camera_portrait_new_beauty\">Новая красота</string>\n    <string name=\"camera_portrait_new_beauty_desc\">Работает только с фронтальной камерой</string>\n    <string name=\"camera_portrait_cvlens\">Мастер-объектив</string>\n    <string name=\"camera_portrait_cvlens_desc\">Может не работать на некоторых устройствах</string>\n    <string name=\"camera_pro_raw\">RAW</string>\n    <string name=\"camera_pro_log\">LOG</string>\n    <string name=\"camera_settings_heic\">HEIF</string>\n    <string name=\"camera_settings_track_focus\">Следящий автофокус</string>\n    <string name=\"camera_settings_predictive\">Захват движения</string>\n    <string name=\"camera_settings_nevus\">Удалить родинки</string>\n    <string name=\"camera_settings_men_makeup\">Настройка макияжа для мужчин</string>\n    <string name=\"camera_settings_lab_options\">Тестовые функции</string>\n    <string name=\"camera_settings_track_eyes\">Следить за глазами</string>\n    <!--Clock-->\n    <string name=\"clock\">Часы</string>\n    <string name=\"clock_enable_hour_glass\">Анимация песочных часов</string>\n    <string name=\"clock_enable_hour_glass_desc\">Версии 13.65.0 и выше не поддерживаются</string>\n    <!--File Manager-->\n    <string name=\"fileexplorer\">Проводник</string>\n    <string name=\"file_explorer_can_selectable\">Название папки, при длительном нажатии, позволяет выбрать действие</string>\n    <string name=\"file_explorer_is_single_line\">Название папки в одну строку</string>\n    <!--Phone-->\n    <string name=\"incallui\">Телефон</string>\n    <string name=\"incallui_hide_crbt\">Скрыть мелодию вызова</string>\n    <!--Message-->\n    <string name=\"mms\">Сообщения</string>\n    <string name=\"mms_disable_ad\">Отключить рекламу</string>\n    <string name=\"mms_disable_ad_desc\">Удалить ярлыки в нижней части экрана и рекламу под содержимым SMS</string>\n    <!--Phone Service-->\n    <string name=\"phone\">Телефонный сервис</string>\n    <string name=\"phone_smart_dual_sim\">Умная двойная SIM</string>\n    <string name=\"phone_vice_slot_volte\">Интернет во время вызовов VoLTE</string>\n    <string name=\"phone_vice_slot_volte_desc\">Используйте мобильные данные во время вызовов VoLTE на дополнительной SIM-карте</string>\n    <!--Download management program-->\n    <string name=\"downloads\">Программа управления загрузкой</string>\n    <string name=\"various_fuck_xlDownload\">Заблокировать создание папки .xl Download</string>\n    <string name=\"various_fuck_xlDownload_desc\">Запретить менеджеру загрузок создавать папку .xl Download в корневом каталоге внутреннего хранилища</string>\n    <!--System UI-->\n    <string name=\"system_ui\">Системный интерфейс</string>\n    <string name=\"system_ui_lockscreen_title\">Экран блокировки</string>\n    <string name=\"system_ui_lockscreen_safe_title\">Безопасность</string>\n    <string name=\"system_ui_lockscreen_ui_title\">Интерфейс</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">Случайный PIN</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">Случайный порядок ввода PIN с клавиатуры</string>\n    <string name=\"system_ui_lock_screen_password_free\">Без ввода пароля при загрузке</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">Эта опция будет работать только в том случае, если на устройстве не включено шифрование</string>\n    <string name=\"system_ui_lock_screen_default_theme\">Поддерживает только тему по умолчанию</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">Отображение информации о заряде в нижней части экрана блокировки</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">Показывать подробную информацию о токах</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">Скрыть камеру</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">Скрыть умный экран</string>\n    <string name=\"system_ui_lock_screen_current\">Ток</string>\n    <string name=\"system_ui_lock_screen_show_second\">Показывать секунды на часах</string>\n    <string name=\"system_ui_lock_screen_blur_button\">Размытие камеры и кнопки умного экрана</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">Заставить часы использовать системные шрифты</string>\n    <string name=\"system_ui_lock_screen_double_lock\">Блокировка экрана двойным касанием</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">Дважды коснитесь пустого места, чтобы заблокировать экран</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">Скрыть злые уведомления</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">Удаляет строку состояния с экрана блокировки</string>\n    <string name=\"system_ui_navigation_title\">Навигация</string>\n    <string name=\"system_ui_navigation_handle_title\">Строка подсказки жеста</string>\n    <string name=\"system_ui_navigation_handle_custom\">Строка подсказки пользовательского жеста</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">Высота</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">Ширина портретной ориентации</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">Ширина в альбомной ориентации</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">Толщина</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">Цвет в светлом режиме</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">Цвет в темном режиме</string>\n    <string name=\"system_ui_navigation_custom\">Свои настройки панели навигации</string>\n    <string name=\"system_ui_navigation_custom_height\">Высота панели</string>\n    <string name=\"system_ui_navigation_custom_height_land\">Высота панели в альбомной ориентации</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">Высота рамки навигационной панели</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">Высота рамки навигационной панели в альбомной ориентации</string>\n    <string name=\"system_ui_statusbar_title\">Строка состояния</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">Управление значками</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">Управление индикатором скорости сети</string>\n    <string name=\"system_ui_statusbar_clock_title\">Управление индикатором часов</string>\n    <string name=\"system_ui_statusbar_device_title\">Индикаторы оборудования</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">Блокировка двойным касанием</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">Двухрядная индикаторная панель</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">Стили значков</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">Масштабирование значка</string>\n    <string name=\"system_ui_status_bar_mobile_type_single\">Значок типа мобильной сети отображается отдельно</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">Отображать слева от сигнала</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">Скрыть индикаторы активности мобильной сети</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">Свой текст</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">Размер шрифта</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">Поменять местами значок и процент батареи</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wi-Fi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">Bluetooth</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">Мобильная сеть</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">Местоположение</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">Значок состояния</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">Значок уведомления</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">Батарея</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">Отображение значков слева</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">Отображение значков справа</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">Ведомый Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Стандарт Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">Точка доступа</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">Индикатор сетевой активности</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">Bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">Заряд Bluetooth-устройства</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">Новый HD</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">Маленький HD</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">Большой HD</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">Отсутствие SIM-карты</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">Сигнал SIM-карты 1</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">Сигнал SIM-карты 2</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">Логика отображения</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">Большой значок типа сети</string>\n    <string name=\"system_ui_status_bar_icon_location\">Местоположение</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">Будильник</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">Показывать значок будильника только перед его отключением</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d час</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">Режим полета</string>\n    <string name=\"system_ui_status_bar_icon_headset\">Наушники</string>\n    <string name=\"system_ui_status_bar_icon_volume\">Громкость</string>\n    <string name=\"system_ui_status_bar_icon_zen\">Режим \\\"Не беспокоить\\\"</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">Максимальное количество пунктов уведомлений</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">Максимальное количество значков уведомлений</string>\n    <string name=\"system_ui_status_bar_battery_percent\">Скрыть процент заряда</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">Скрыть процент заряда батареи</string>\n    <string name=\"system_ui_status_bar_battery_charging\">Скрыть индикатор зарядки</string>\n    <string name=\"system_ui_status_bar_battery_icon\">Скрыть значок батареи</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">Индикатор батареи</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">Мобильная сеть</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">Поменять местами Wi-Fi и мобильную сеть</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">Скорость интернета</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">Звуковой режим</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">Принудительно использовать новый HD</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">Требуется последняя версия системы, некоторые модели, возможно, не были обновлены</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">Разделитель скорости сети</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">Вертикальная линия между временем и скоростью интернета не отображается на устройствах с центральной камерой</string>\n    <string name=\"system_ui_status_bar_hide_icon\">Скрывать строку состояния при создании скриншота</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">Значок типа мобильной сети</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">Интервал обновления скорости сети</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">Размер шрифта скорости сети</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">Значение и единица измерения отображаются в двух строках</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">Показывать увеличение и уменьшение скорости сети</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">Скорость загрузки и скачивания отображаются в две строки</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">Показывать скорость загрузки и скачивания отдельно</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">Скрыть низкую скорость сети</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">Индикатор не отображается при низкой скорости сети</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">Низкий уровень скорости сети</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">Значения скорости сети ниже этого уровня считаются низкими и будет отображаться другой значок индикатора (только часть значков).</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">Скрыть суффикс байт в секунду (*b/с)</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">Значок индикатора</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">Настроить</string>\n    <string name=\"system_ui_statusbar_clock_mode\">Свой режим часов</string>\n    <string name=\"system_ui_statusbar_clock_editor\">Формат часов</string>\n    <string name=\"system_ui_statusbar_clock_year\">Показывать год</string>\n    <string name=\"system_ui_statusbar_clock_month\">Показывать месяц</string>\n    <string name=\"system_ui_statusbar_clock_date\">Показывать дату</string>\n    <string name=\"system_ui_statusbar_clock_week\">Показывать неделю</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">Показывать двойные часы</string>\n    <string name=\"system_ui_statusbar_clock_period\">Отображение периода времени</string>\n    <string name=\"system_ui_statusbar_clock_second\">Показывать секунды</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">Скрыть пространство</string>\n    <string name=\"system_ui_statusbar_clock_double\">Показать в две строки</string>\n    <string name=\"system_ui_statusbar_clock_desc\">Пример формата часов</string>\n    <string name=\"system_ui_statusbar_clock_size\">Размер часов</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">Размер двойной строки</string>\n    <string name=\"system_ui_statusbar_indicator_battery_title\">Энергопотребление</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">Температура</string>\n    <string name=\"system_ui_statusbar_battery_size\">Размер шрифта</string>\n    <string name=\"system_ui_statusbar_battery_show\">Показать содержимое</string>\n    <string name=\"system_ui_statusbar_battery_disable\">Скрывать единицы измерения</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">Показывать справа</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">Ток всегда показывает положительное значение</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">Отображать в одной строке</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">Обратный порядок</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">Показывать только при зарядке</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">Интервал обновления состояния</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">Фиксировать температуру процессора</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">Введите количество для /sys/devices/virtual/thermal/thermal_zone*</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">По центру</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">Закругленные углы</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">Ограничение видимости</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">Выровнять по вертикали</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">Цвет</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">Цвет 100% заряда</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">Цвет разряженной батареи</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">Цвет режима энергосбережения</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">Цвет зарядки</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">Высота</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">Горизонтальный интервал</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">Прозрачность</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">Подсветка</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">Низкий уровень заряда батареи</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">Тест</string>\n    <string name=\"system_ui_controlcenter_title\">Центр управления</string>\n    <string name=\"system_ui_controlcenter_card_title\">Карта</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">Магнит</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">Уведомления</string>\n    <string name=\"system_control_center_qs_detail_bg\">Прозрачность фона карты</string>\n    <string name=\"system_control_center_5g_tile\">Сетевой коммутатор 5G</string>\n    <string name=\"system_control_center_5g_toggle_label\">Сеть 5G</string>\n    <string name=\"system_control_center_sunshine_mode\">Солнечный режим</string>\n    <string name=\"system_ui_control_auto_close\">Автоматически сворачивающийся магнит</string>\n    <string name=\"system_ui_control_auto_close_more\">После включения, клик на магнитной плитке на панели состояния автоматически свернет панель состояния</string>\n    <string name=\"system_control_center_qs_tile_label\">Удалить название</string>\n    <string name=\"system_control_center_qs_rows\">Строки</string>\n    <string name=\"system_control_center_qs_rows_format\">Линий: %d</string>\n    <string name=\"system_control_center_qs_columns\">Столбцы</string>\n    <string name=\"system_control_center_qs_columns_format\">Ряд: %d</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">Элемент Mi Play</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">Элемент Mi smart hub</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">Элемент управления устройством</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">Значение размытия фона элемента управления</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">Настройка размытия уведомлений</string>\n    <string name=\"system_ui_control_center_blur_radius\">Степень размытия</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">Без раскрывающегося уведомления</string>\n    <string name=\"system_ui_control_center_corner_radius\">Радиус угла</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">Тема по умолчанию не нуждается в настройке</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">Значение размытия фона</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">Фоновое значение по умолчанию</string>\n    <string name=\"system_ui_control_center_compact_notice\">Компактные уведомления</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">Уменьшить вертикальные отступы уведомлений</string>\n    <string name=\"system_ui_control_center_show_weather\">Показать погоду</string>\n    <string name=\"system_ui_control_center_show_weather_city\">Показать город</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">Без звука при включенном экране</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">Когда экран включен, всплывающее уведомление отображается без звукового сопровождения</string>\n    <string name=\"system_ui_control_center_rounded_rect\">Плитка с закругленными углами</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">Сменить центр управления и панель уведомлений</string>\n    <string name=\"system_ui_controlcenter_new_title\">Новый центр управления</string>\n    <string name=\"system_ui_controlcenter_old_title\">Старый центр управления</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">Надписи будут скрыты для 5 строк в портретной ориентации. Количество строк ограничено тремя со скрытыми надписями в альбомной ориентации.</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">Альбомная ориентация будет иметь один дополнительный столбец\\nЕсли в вашем ROM есть опция компактной компоновки быстрых настроек, она добавит еще один столбец в обеих ориентациях</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">Альбомная ориентация + один доп.столбец</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">Количество столбцов в свернутой панели</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">Стиль плитки Bluetooth</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">Переместить Bluetooth-плитку рядом с сетевой плиткой</string>\n    <string name=\"system_ui_other_title\">Другое</string>\n    <string name=\"system_ui_charge_animation_title\">Анимация заряда</string>\n    <string name=\"system_ui_charge_animation_style\">Стиль анимации зарядки</string>\n    <string name=\"system_ui_charge_animation_style_desc\">Выберите стиль анимации зарядки на экране блокировки</string>\n    <string name=\"system_ui_origin_charge_animation\">Встроенная анимация зарядки</string>\n    <string name=\"system_ui_another_title\">Другое</string>\n    <string name=\"system_ui_notification_freeform\">Потяните за низ всплывающее уведомление для открытия плавающего окна</string>\n    <string name=\"system_ui_notification_freeform_desc\">Уведомления от Mi Push могут не поддерживаться</string>\n    <string name=\"system_ui_monet_title\">Monet</string>\n    <string name=\"system_ui_monet_overlay_custom\">Настройка цвета темы</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">Настройка цвета темы вместо получения цвета из системных обоев</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">Выберите цвет темы</string>\n    <string name=\"system_ui_volume_timer\">Расширенный таймер</string>\n    <string name=\"system_ui_qs_label\">Вкладка быстрого переключения</string>\n    <string name=\"system_ui_notification_title\">Уведомление</string>\n    <string name=\"system_ui_other_notification_fix\">Отключить белый список уведомлений</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">Включить размытие полосы громкости</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">Только для моделей MTK с Android 12+, возможна высокая загрузка графического процессора</string>\n    <!--Settings-->\n    <string name=\"system_settings\">Настройки</string>\n    <string name=\"system_settings_international_build\">Глобальная версия настроек</string>\n    <string name=\"system_settings_safe_wifi\">Просмотр сохраненных паролей Wi-Fi</string>\n    <string name=\"system_settings_safe_wifi_desc\">Разблокировать управление сохраненными сетями\nПуть: Настройки - Wi-Fi - Расширенные настройки - Управление сохраненными сетями</string>\n    <string name=\"system_settings_wifipassword_btn_title\">Посмотреть</string>\n    <string name=\"system_settings_wifi_password_label\">Пароль</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">Сведения сети Wi-Fi</string>\n    <string name=\"system_settings_accessibility_title\">Сочетания жестов</string>\n    <string name=\"system_settings_area_screenshot\">Скриншот области разблокировки</string>\n    <string name=\"system_settings_lab_title\">Избранные функции</string>\n    <string name=\"system_settings_voip_assistant_controller\">Помощник по VoIP</string>\n    <string name=\"system_settings_ai_image_title\">AI обработка изображений</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">Сверхвысокое разрешение</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">Улучшение изображения с помощью AI и AI HDR</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">MEMC</string>\n    <string name=\"system_settings_permission_title\">Разрешение</string>\n    <string name=\"system_settings_permission_show_app_up\">Разрешения верхнего уровня без поиска в списке приложений</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">Верните старое действие, перейдите непосредственно к переключателю разрешений соответствующего приложения, \\\"Отображать поверх других приложений\\\"</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">Установите неизвестные разрешения приложения без поиска в списке приложений</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">Работает с глобальной прошивкой, перейдите непосредственно к переключателю разрешений соответствующего приложения, \\\"Отображать поверх других приложений\\\"</string>\n    <string name=\"system_settings_develop_title\">Параметры разработчика</string>\n    <string name=\"system_settings_apps_freezer\">Обязательное отображение приостановленных кэшированных приложений</string>\n    <string name=\"system_settings_apps_freezer_more\">После включения эту функцию можно найти в \\\"Параметре разработчика\\\", не гарантируя ее доступность для обязательного отображения</string>\n    <string name=\"system_settings_develop_speed_mode\">Экстремальный режим</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">Запись не будет отображаться после открытия на неподдерживаемых моделях</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">Темы</string>\n    <string name=\"theme_manager_version_code_modify\">Отключить определение версии MIUI</string>\n    <string name=\"theme_manager_diable_ads\">Отключить рекламу</string>\n    <string name=\"theme_manager_crack\">Патч тем</string>\n    <string name=\"theme_manager_enable_pad_theme\">Темы Pad</string>\n    <string name=\"theme_manager_enable_fold_theme\">Темы Mix Fold</string>\n    <!--Updater-->\n    <string name=\"updater\">Обновление</string>\n    <string name=\"updater_fuck_vab\">Удалить проверку OTA</string>\n    <string name=\"updater_fuck_vab_desc\">Поддерживаются только устройства VAB, не переключайте, другие устройства, отличные от VAB!\n- Вы можете перейти к полному пакету внутренних тестовых карт без внутренних разрешений на тестирование\n- Рекомендуется удалять данные после перепрошивки в разных типах версий\n- Не поддерживает никакие неофициальные ROM\n- Эта функция опасна, подумайте, стоит ли ее включать, после ознакомления с работой Fastboot</string>\n    <string name=\"updater_miui_version\">Поддельная версия MIUI для обновления</string>\n    <string name=\"updater_miui_version_desc\">Изменяйте только обновление системы, которое может в определенной степени защитить обновление системы</string>\n    <string name=\"updater_device\">Подменить устройство для Обновления</string>\n    <string name=\"updater_device_desc\">Эта функция очень опасна, не используйте ее на постоянной основе\nВведите код модели</string>\n    <!--Permissions-->\n    <string name=\"lbe\">Разрешения</string>\n    <string name=\"clipboard\">Буфер обмена</string>\n    <string name=\"lbe_disable_clipboard_tip\">Скрыть всплывающие подсказки</string>\n    <string name=\"lbe_clipboard_tip_toast\">Использовать всплывающие подсказки для чтения содержимого буфера обмена</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">Скрывает диалоговое окно и позволяет приложению считывать буфер обмена по умолчанию</string>\n    <string name=\"lbe_clipboard_tip\">Чтение буфера обмена</string>\n    <!--Cast-->\n    <string name=\"milink\">Cast</string>\n    <string name=\"milink_unlock_mishare\">Разблокировать подключение устройства</string>\n    <!--Always-on display-->\n    <string name=\"aod\">Дисплей всегда включен (AOD)</string>\n    <string name=\"aod_unlock_always_on_display\">Разблокирует ограничение по времени отображения постоянно включенного экрана</string>\n    <!--Taplus-->\n    <string name=\"content_extension\">Taplus</string>\n    <string name=\"content_extension_browser\">Использовать сторонний браузер</string>\n    <string name=\"content_extension_browser_desc\">Позволяет Taplus не использовать браузер MIUI для поиска, необходимо выбрать браузер по умолчанию самостоятельно</string>\n    <string name=\"content_extension_double_press\">Жест: 2 пальца</string>\n    <string name=\"content_extension_super_image\">Качество сохраняемого фото: Лучшее</string>\n    <string name=\"content_extension_super_image_summary\">Для оригинального сохранения требуется базовая поддержка со стороны модели устройства</string>\n    <string name=\"content_extension_link_open_mode\">Браузер</string>\n    <string name=\"content_extension_link_open_mode_desc\">Выберите браузер для открытия ссылок</string>\n    <!--Mi Canvas-->\n    <!--Gallery-->\n    <string name=\"gallery\">Галерея</string>\n    <string name=\"gallery_enable_hdr_enhanced\">HDR</string>\n    <string name=\"gallery_enable_pdf\">Создать PDF</string>\n    <string name=\"gallery_enable_ocr\">Распознавание текста</string>\n    <string name=\"gallery_enable_ocr_form\">Распознавание таблиц</string>\n    <string name=\"gallery_enable_id_photo\">Фото ID</string>\n    <string name=\"gallery_enable_photo_movie\">Ролик из фото</string>\n    <string name=\"gallery_enable_video_post\">Видеоэффекты</string>\n    <string name=\"gallery_enable_video_editor\">Редактор видео</string>\n    <string name=\"gallery_enable_text_yanhua\">Текстовый фейерверк</string>\n    <string name=\"gallery_enable_remover_2\">Волшебное удаление</string>\n    <string name=\"gallery_enable_magic_matting\">Убрать фон</string>\n    <string name=\"gallery_enable_magic_sky\">Волшебное небо</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">Безопасность MIUI</string>\n    <string name=\"guard_provider_disable_upload_applist\">Запретить автозагрузку списка установленных приложений</string>\n    <!--System launcher-->\n    <string name=\"home\">Системный раб.стол</string>\n    <string name=\"home_gesture\">Жесты</string>\n    <string name=\"home_gesture_mainscreen_title\">Главный экран</string>\n    <string name=\"home_gesture_gesture_title\">Полноэкранные жесты</string>\n    <string name=\"home_gesture_double_tap\">Двойное касание</string>\n    <string name=\"home_gesture_double_tap_desc\">Двойное касание в любой части раб.стола</string>\n    <string name=\"home_gesture_shake\">Встряхивание</string>\n    <string name=\"home_gesture_shake_desc\">Встряхните устройство на любом экране раб.стола</string>\n    <string name=\"home_gesture_left_swipe\">Свайп влево</string>\n    <string name=\"home_gesture_left_swipe_desc\">Проведите влево по доку главного экрана</string>\n    <string name=\"home_gesture_right_swipe\">Свайп вправо</string>\n    <string name=\"home_gesture_right_swipe_desc\">Проведите вправо по доку главного экрана</string>\n    <string name=\"home_gesture_up_swipe\">Свайп вверх</string>\n    <string name=\"home_gesture_up_swipe_desc\">Проведите одним пальцем вверх на любом экране раб.стола</string>\n    <string name=\"home_gesture_down_swipe\">Свайп вниз</string>\n    <string name=\"home_gesture_down_swipe_desc\">Проведите вниз одним пальцем на любом экране раб.стола</string>\n    <string name=\"home_gesture_up_swipe2\">Проведите вверх двумя пальцами</string>\n    <string name=\"home_gesture_up_swipe2_desc\">Проведите двумя пальцами вверх на любом экране раб.стола</string>\n    <string name=\"home_gesture_down_swipe2\">Свайп вниз двумя пальцами</string>\n    <string name=\"home_gesture_down_swipe2_desc\">Проведите вниз двумя пальцами на любом экране раб.стола</string>\n    <string name=\"home_gesture_pinch\">Сдвиньте два пальща</string>\n    <string name=\"home_gesture_spread\">Раздвиньте два пальца</string>\n    <string name=\"home_gesture_multi_choose_app\">Выбор приложения</string>\n    <string name=\"home_gesture_multi_choose_app_none\">Нет</string>\n    <string name=\"home_layout\">Макеты</string>\n    <string name=\"home_layout_home_title\">Раб.стол</string>\n    <string name=\"home_layout_hotseats_title\">Док</string>\n    <string name=\"home_layout_searchbar_title\">Панель поиска</string>\n    <string name=\"home_layout_seek_points\">Индикатор страниц</string>\n    <string name=\"home_layout_show_clock\">Не прятать часы</string>\n    <string name=\"home_layout_show_clock_desc\">Отключает скрытие часов в строке состояния на экранах с виджетом часов</string>\n    <string name=\"home_layout_unlock_grids\">Разблокировать сетку</string>\n    <string name=\"home_layout_unlock_grids_desc\">Разблокировать ограничение сетки на раб.столе</string>\n    <string name=\"home_layout_unlock_grids_no_words\">Разблокировать сетку (без текста)</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">Разблокировать ограничение сетки на раб.столе</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">Расстояние раб.стола от нижнего края экрана</string>\n    <string name=\"home_layout_hotseats_height\">Высота</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">Расстояние до дока от индикатора страниц</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">Расстояние до дока от нижней границы экрана</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">Расстояние строки поиска от нижней границы экрана</string>\n    <string name=\"home_folder\">Папка</string>\n    <string name=\"home_small_folder_title\">Маленькая папка</string>\n    <string name=\"home_big_folder_title\">Большая папка</string>\n    <string name=\"home_small_folder_icon_bg\">Фон значка</string>\n    <string name=\"home_small_folder_icon_bg_custom\">Свой фон</string>\n    <string name=\"home_small_folder_icon_bg_size\">Размер фона</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">Настройка фона горизонтальной сетки</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">Настройка</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">Ширина фона</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">Высота фона</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">Настройка фона вертикальной сетки</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">Настройка</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">Ширина фона</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">Высота фона</string>\n    <string name=\"home_big_folder_icon_bg\">Настройка фона большой папки</string>\n    <string name=\"home_big_folder_icon_bg_custom\">Настройка</string>\n    <string name=\"home_big_folder_icon_bg_width\">Ширина фона</string>\n    <string name=\"home_big_folder_icon_bg_height\">Высота фона</string>\n    <string name=\"home_big_folder_item_max_count\">Большая папка</string>\n    <string name=\"home_auto_close_folder_title\">Автозакрытие</string>\n    <string name=\"home_auto_close_folder_summary\">Закрыть папку после запуска приложения</string>\n    <string name=\"home_wallpaper\">Фон</string>\n    <string name=\"home_wallpaper_blur\">Размытие фона</string>\n    <string name=\"home_enable_blur\">Включить размытие</string>\n    <string name=\"home_blur_radius_title\">Степень размытия</string>\n    <string name=\"home_folder_shade_title\">Цвет наложения</string>\n    <string name=\"home_folder_shade_summary\">Усилить или ослабить цвет фона</string>\n    <string name=\"home_folder_shade_solid\">Заполнить фон</string>\n    <string name=\"home_folder_shade_gradient\">Градиент</string>\n    <string name=\"home_folder_shade_level_title\">Интенсивность цвета</string>\n    <string name=\"home_folder_cols_title\">Количество упорядоченных папок</string>\n    <string name=\"home_folder_cols_format\">Ряд: %d</string>\n    <string name=\"home_folder_vertical_padding_title\">Расстояние между папками по горизонтали</string>\n    <string name=\"home_folder_width_title\">Использовать ширину всей папки.</string>\n    <string name=\"home_folder_space_title\">Уменьшить поля</string>\n    <string name=\"home_folder_blur_title\">Размытие фона</string>\n    <string name=\"home_folder_anim_title\">Анимация отскока</string>\n    <string name=\"home_folder_anim_1\">Отскок при открытии</string>\n    <string name=\"home_folder_anim_2\">Замедление при открытии</string>\n    <string name=\"home_folder_anim_3\">Отскок при закрытии</string>\n    <string name=\"home_folder_anim_4\">Замедление при закрытии</string>\n    <string name=\"home_drawer\">Контейнер приложений</string>\n    <string name=\"home_drawer_blur\">Включить размытие в Контейнере приложений</string>\n    <string name=\"home_drawer_blur_desc\">Установите прозрачность фона Контейнера приложений на 100%, чтобы использовать эту функцию</string>\n    <string name=\"home_title\">Значок и название</string>\n    <string name=\"home_title_icon_title\">Значок</string>\n    <string name=\"home_title_bigicon_title\">Большой значок</string>\n    <string name=\"home_title_title_title\">Название</string>\n    <string name=\"home_title_title_marquee\">Прокручивать текст</string>\n    <string name=\"home_title_font_size\">Размер шрифта</string>\n    <string name=\"home_title_title_color\">Цвет названия</string>\n    <string name=\"home_title_animation_speed\">Скорость анимации</string>\n    <string name=\"home_title_big_icon_corner\">Значок среднего размера с закругленным углом</string>\n    <string name=\"home_title_download_animation\">Анимация загрузки</string>\n    <string name=\"home_title_fix_animation\">Оптимизировать анимацию прерывания</string>\n    <string name=\"home_title_icon_scale\">Масштаб значков</string>\n    <string name=\"home_recent\">Недавние</string>\n    <string name=\"home_recent_animation_speed\">Скорость анимации</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">Отключить затемнение обоев</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">Скрыть строку состояния в режиме просмотра задач</string>\n    <string name=\"home_recent_hide_freeform\">Скрыть кнопку \\\"Плавающее окно\\\"</string>\n    <string name=\"home_recent_hide_clean_up\">Скрыть кнопку \\\"Очистить все\\\"</string>\n    <string name=\"home_recent_remove_icon\">Удалить значек</string>\n    <string name=\"home_recent_modify_animation\">Изменить анимацию удаления миниатюр</string>\n    <string name=\"home_recent_text\">Текст, отображаемый при отсутствии недавней задачи</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">Отображать название приложения на миниатюрах</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">Закругленные углы миниатюры приложения</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">Размер миниатюры вертикальной плитки экрана</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">Размер миниатюры горизонтальной плитки экрана</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">Размер миниатюры по вертикали</string>\n    <string name=\"home_recent_text_size\">Размер текста подписи к миниатюрам</string>\n    <string name=\"home_recent_text_color\">Цвет текста подписи к миниатюрам</string>\n    <string name=\"home_recent_freeform_background_color\">Цвет фона миниатюры приложения в малом окне</string>\n    <string name=\"home_recent_show_real_memory\">Показать фактическую память</string>\n    <string name=\"home_widget\">Виджет</string>\n    <string name=\"home_widget_all_widget_animation\">Анимация виджета</string>\n    <string name=\"home_widget_show_miui_widget\">Отобразить виджеты MIUI</string>\n    <string name=\"home_widget_show_miui_widget_desc\">Отобразить виджеты MIUI на странице виджетов Android</string>\n    <string name=\"home_widget_corner_radius\">Виджет с закругленными углами</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">Разрешить перемещение классического виджета на Боковую панель</string>\n    <string name=\"home_widget_hide_title\">Скрыть название виджета</string>\n    <string name=\"home_widget_resizable\">Убирает все ограничения на размер виджетов</string>\n    <string name=\"home_dock\">Док</string>\n    <string name=\"home_dock_bg_height\">Высота</string>\n    <string name=\"home_dock_bg_height_desc\">Высота дока</string>\n    <string name=\"home_dock_bg_margin_horizontal\">Горизонтальная граница</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Расстояние Дока от краев экрана</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Граница дока от индикатора экрана</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Граница Дока в нижней части экрана</string>\n    <string name=\"home_dock_icon_margin_bottom\">Нижняя граница значка</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Расстояние значка дока от нижней границы экрана</string>\n    <string name=\"home_dock_bg_custom\">Размытие фона</string>\n    <string name=\"home_dock_icon_bottom_margin\">Расстояние значка от нижней границы</string>\n    <string name=\"home_dock_margin_bottom\">Индикатор страниц в нижней части экрана</string>\n    <string name=\"home_dock_unlock_hotseat\">Убрать ограничение по количеству значков в доке</string>\n    <string name=\"home_dock_fold\">Док в стиле Mix Fold</string>\n    <string name=\"home_dock_hide_seekpoint\">Скрыть индикатор страниц</string>\n    <string name=\"home_dock_icon_title\">Показать название значка в доке</string>\n    <string name=\"home_other\">Другое</string>\n    <string name=\"home_other_home_mode\">Режим раб.стола</string>\n    <string name=\"home_other_infinite_scroll\">Бесконечная прокрутка</string>\n    <string name=\"home_other_infinite_scroll_desc\">Переход с последнего экрана на первый и обратно</string>\n    <string name=\"home_other_freeform_shortcut_menu\">Режим малого окна</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">Добавить меню малого окна в контекстное меню</string>\n    <string name=\"home_other_user_present_animation\">Оптимизировать анимацию разблокировки</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">Всегда использовать размытие обоев раб.стола</string>\n    <string name=\"home_other_perfect_icon\">Оптимальный приоритет значка</string>\n    <string name=\"home_other_icon_mono_chrome\">Цвет фона значка</string>\n    <string name=\"home_other_icon_monet_color\">Использовать monet цвет</string>\n    <string name=\"home_other_use_edit_color\">Изменить цвет</string>\n    <string name=\"home_other_your_color\">Свой цвет</string>\n    <string name=\"home_other_portrait_reverse\">Перевернутый вертикальный экран</string>\n    <string name=\"home_other_shortcut_background_blur\">Размытие фона для контекстного меню</string>\n    <string name=\"home_other_blur_radius\">Степень размытия</string>\n    <string name=\"home_large_icon_corner_radius\">Большие значки с закругленными углами</string>\n    <string name=\"home_other_app_icon_hide\">Управление значками раб.стола</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">Разблокировать ограничение на количество контекстных меню</string>\n    <string name=\"home_other_disable_hide_google\">Отключить скрытие Google</string>\n    <string name=\"home_other_fix_android_r_s\">Исправлена проблема совместимости, из-за которой рабочий стол становился черным</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">Уровень размытия контекстного меню</string>\n    <string name=\"home_other_high_models\">Принудительная идентификация как модели высокого класса</string>\n    <string name=\"home_recent_blur_level\">Уровень размытия</string>\n    <string name=\"home_recent_complete_blur_plus\">Расширенное полное размытие</string>\n    <string name=\"home_recent_complete_blur\">Полное размытие</string>\n    <string name=\"home_recent_test_blur\">Тестовое размытие</string>\n    <string name=\"home_recent_simple_blur\">Простое размытие</string>\n    <string name=\"home_recent_none_blur\">Без размытия</string>\n    <string name=\"home_recent_none_blur_simple_anim\">Без размытия (Простая анимация)</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">Редактор галереи</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">Разблокировать миним.ограничение на обрезку изображения</string>\n    <string name=\"mediaeditor_filter_manager\">Менеджер фильтров</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">Mi Share</string>\n    <string name=\"mishare_disable_mishare_auto_off\">Отключить автозакрытие Mi Share</string>\n    <!--Wallpaper-->\n    <string name=\"miwallpaper\">Обои</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">Супер-обои</string>\n    <!--Package installer-->\n    <string name=\"package_installer\">Установщик приложений</string>\n    <string name=\"miui_package_installer_modify\">Очистить страницу</string>\n    <string name=\"miui_package_installer_safe_mode\">Безопасный режим</string>\n    <string name=\"miui_package_installer_disable_ad\">Отключить рекламу</string>\n    <string name=\"miui_package_installer_install_risk\">Отключить отслеживание рисков</string>\n    <string name=\"miui_package_installer_safe_model_tip\">Отключение запросов безопасности</string>\n    <string name=\"miui_package_installer_count_checking\">Отключить проверку часто устанавливаемых приложений</string>\n    <string name=\"miui_package_installer_update_system_app\">Снять ограничения на установку системных приложений</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">Разрешить любому внесистемному каналу устанавливать системные приложения</string>\n    <string name=\"miui_package_installer_install_source\">Свой источник установки</string>\n    <string name=\"miui_package_installer_apk_info\">Показать дополнительную информацию о пакете</string>\n    <string name=\"miui_package_installer_apk_info_desc\">Показать доп.информацию об устанавливаемом приложении</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">App vault</string>\n    <string name=\"personal_assistant_widget_crack\">Патч виджета</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Виджеты Pad/Mix Fold</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">Включить виджеты в стиле Pad/Mix Fold</string>\n    <string name=\"personal_assistant_overlap_mode\">Негатив на один экран в сложенном виде</string>\n    <string name=\"personal_assistant_blur_model\">Настройка размытия персонального помощника</string>\n    <string name=\"personal_assistant_blurradius\">Значение размытия персонального помощника</string>\n    <string name=\"personal_assistant_color\">Цвет персонального помощника</string>\n    <!--Music-->\n    <string name=\"music\">Музыка</string>\n    <string name=\"music_disable_ad\">Удалить рекламу</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">Батарея и производительность</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">Пользовательские приложения с высокой частотой обновления</string>\n    <string name=\"powerkeeper_lock_max_fps\">Блокировка максимального FPS</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">Попробовать не убивать приложения</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">Может увеличить энергопотребление</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">Запись экрана</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">Принудительно включить поддержку записи экрана AOSP</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">Требуется поддержка версии для записи с экрана</string>\n    <string name=\"screen_recorder_config\">Дополнительные параметры частоты кадров и битрейта</string>\n    <string name=\"screen_recorder_config_desc\">Выбирайте в соответствии с требованиями к оборудованию</string>\n    <string name=\"screen_recorder_more_volume\">Разблокировать максимальную громкость</string>\n    <string name=\"screen_recorder_more_volume_desc\">Некоторые версии не поддерживаются</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">Место сохранения записываемого видео в Movies/Screen Recorder</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">Скриншот</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">Разблокировать ограничение на мин.обрезку изображения</string>\n    <string name=\"screenshot_save_to_pictures_desc\">Место сохранения скриншота в /Pictures/Screenshots</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">Безопасность</string>\n    <string name=\"security_center_app_title\">Управление приложениями</string>\n    <string name=\"security_center_battery_title\">Энергосбережение и батарея</string>\n    <string name=\"security_center_privacy_title\">Защита конфиденциальности</string>\n    <string name=\"security_center_beauty_title\">Помощник фронтальной камеры</string>\n    <string name=\"security_center_bubble_and_freeform_title\">Плавающее окно и всплывающие уведомления</string>\n    <string name=\"security_center_newbox_title\">Боковая панель</string>\n    <string name=\"security_center_show_battery_temperature\">Показывать температуру батареи</string>\n    <string name=\"security_center_ai_clipboard\">Защита буфера обмена</string>\n    <string name=\"security_center_blur_location\">Более низкая точность позиционирования</string>\n    <string name=\"security_center_get_number\">Управляйте приложением, чтобы получить номер телефона для быстрого доступа</string>\n    <string name=\"security_center_applock_pin_scramble\">Хаотичная последовательность PIN-кода для блокировки приложения</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">Случайным образом изменить порядок клавиатуры PIN-кода блокировки приложения</string>\n    <string name=\"security_center_beauty_light_auto\">Авторегулировка яркости имитации лампы</string>\n    <string name=\"security_center_beauty_face\">Украшение для видеовызовов</string>\n    <string name=\"security_center_beauty_privacy\">Конфиденциальная камера</string>\n    <string name=\"security_center_beauty_pc\">Сохранять лица по центру</string>\n    <string name=\"security_center_disable_root_check\">Отключить обнаружение root-доступа</string>\n    <string name=\"security_center_remove_macro_black_list\">Удалить автообъединенный черный список</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">Отключить уведомления \\\"Найдено вредоносное приложение\\\"</string>\n    <string name=\"security_center_newbox_custom_enable\">Включить настройку</string>\n    <string name=\"security_center_newbox_bg_custom\">Размытие фона</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">Горизонтальный интервал</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">Вертикальный интервал</string>\n    <string name=\"security\">Безопасность</string>\n    <string name=\"security_app_title\">Показать дополнительные сведения о приложении</string>\n    <string name=\"security_app_summary\">Добавить новые поля на страницу приложения:\n- Версия\n- Полный путь до apk\n- Путь к данным\n- ID пользователя\n- Мин.версия SDK\n- Данная версия SDK\n- Ссылка в Play Store\n- Запустить приложение</string>\n    <string name=\"security_app_sort_title\">Сортировка списка управления приложениями</string>\n    <string name=\"security_app_sort_summary\">Изменить сортировку списка управления приложениями по умолчанию</string>\n    <string name=\"security_restrict_app_title\">Максимальное ограничение</string>\n    <string name=\"security_restrict_app_summary\">Позволяет настраивать режим энергосбережения и получать доступ к Wi-Fi для системных приложений</string>\n    <string name=\"security_disable_app_title\">Контроль состояния приложения</string>\n    <string name=\"security_disable_app_summary\">Позволяет отключать любое приложение со страницы инфы о приложении</string>\n    <string name=\"security_score\">Отключить оптимизацию проверки состояния</string>\n    <string name=\"security_score_summary\">Блокируется 100 пунктов и отключается оптимизация</string>\n    <string name=\"security_center_skip_waiting_time\">Пропустить ограничение обратного отсчета</string>\n    <string name=\"security_center_newbox_blur\">Размытие боковой панели</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">Удалить ограничения приложения с всплывающими уведомлениями</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">Скрыть предупреждение о низком заряде батареи</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">Удалить всплывающее окно при открытии приложения</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">Удалить всплывающее окно \\\"Разрешить XXX открывать XXX\\\" при запуске цепочки</string>\n    <string name=\"security_center_no_permission\">Требуемые разрешения не предоставлены</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">Прижимать к краю плавающее окно</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">Разблокирует прилипание малого окна к краю для базовых поддерживаемых устройств с ограниченным доступом, что также повлияет на поведение маленького окна, когда телефон находится в фоновом режиме.</string>\n    <string name=\"security_center_super_wireless_charge\">Супер беспроводная зарядка</string>\n    <string name=\"security_center_blur_model\">Настройка размытия боковой панели</string>\n    <string name=\"security_center_blurradius\">Значение размытия боковой панели</string>\n    <string name=\"security_center_color\">Цвет боковой панели</string>\n    <string name=\"security_center_other_title\">Другое</string>\n    <string name=\"security_center_sidebar_line_color\">Свой цвет строки боковой панели</string>\n    <string name=\"security_center_sidebar_line_color_default\">Цвет строки боковой панели по умолчанию</string>\n    <string name=\"security_center_sidebar_line_color_dark\">Темный цвет строки боковой панели</string>\n    <string name=\"security_center_sidebar_line_color_light\">Светлый цвет строки боковой панели</string>\n    <string name=\"security_center_disable_ban\">Удалить кнопку отчета</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">Умные карты</string>\n    <string name=\"tsmclient_auto_nfc\">Автоуправление NFC</string>\n    <string name=\"tsmclient_auto_nfc_desc\">NFC автоматически включается при входе на страницу пролистывания карты и автоматически отключается при выходе</string>\n    <string name=\"tsmclient_nfc_turning_on\">Автовключение NFC…</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">Вкл NFC вручную</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">Сбой автовключения NFC</string>\n    <!--Weather-->\n    <string name=\"weather\">Погода</string>\n    <string name=\"weather_device_level_title\">Уровень анимации</string>\n    <string name=\"weather_device_level_title_low\">Низкий</string>\n    <string name=\"weather_device_level_title_middle\">Средний</string>\n    <string name=\"weather_device_level_title_high\">Высокий</string>\n    <!--AI Translate-->\n    <!--Barrage-->\n    <!--Joyose-->\n    <string name=\"joyose\">Joyose</string>\n    <string name=\"joyose_cloud_control_title\">Управление облаком</string>\n    <string name=\"joyose_disable_cloud_control\">Отключить управление облаком</string>\n    <string name=\"joyose_game_title\">Игровое пространство</string>\n    <string name=\"joyose_enable_gpu_tuner\">Планирование производительности</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">После открытия добавьте настройки, связанные с игровым GPU, в нижней части [Игровое пространство]</string>\n    <!--GetApps-->\n    <string name=\"market\">Play Store</string>\n    <string name=\"market_device_modify\">Подмена модели</string>\n    <string name=\"market_device_modify_desc\">Подмененная модель - Xiaomi 13 Ultra</string>\n    <string name=\"market_disable_new_icon\">Запретить использование сторонних значков</string>\n    <string name=\"market_disable_new_icon_desc\">Делает раб.стол более чистым</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">Разблокировать MIUI+</string>\n    <!--Mi Settings-->\n    <string name=\"mi_settings\">Mi Настройки</string>\n    <string name=\"mi_settings_show_fps\">Показать расширенный список FPS</string>\n    <!--MTB-->\n    <string name=\"mtb\">MTB</string>\n    <string name=\"mtb_auth\">Обход аутентификации MTB</string>\n    <string name=\"mtb_auth_desc\">Эта функция с высоким риском, любые проблемы, возникающие из-за этого, ложатся на пользователя, сделайте резервную копию вашей основной полосы частот. Введите *#*#MODEMTEST#*#* в интерфейсе набора номера, чтобы открыть настройки MTB.</string>\n    <!--Scanner-->\n    <string name=\"scanner\">Сканер</string>\n    <string name=\"scanner_card\">Сканировать ID-карты</string>\n    <string name=\"scanner_translation\">Переводчик</string>\n    <string name=\"scanner_ocr\">Распознавание текста</string>\n    <string name=\"scanner_document\">Сканировать документы</string>\n    <string name=\"scanner_excel\">Сканировать таблицы</string>\n    <string name=\"scanner_ppt\">Сканировать презентации</string>\n    <string name=\"scanner_doc_ppt\">Сканировать файлы</string>\n    <!--Other-->\n    <string name=\"various\">Другое</string>\n    <string name=\"share_center\">Mi Smart Hub</string>\n    <string name=\"custom_hook\">Своё</string>\n    <string name=\"app_version_not_supported\">Неподдерживаемая версия</string>\n    <string name=\"various_location_simulation_title\">Поддельное местоположение</string>\n    <string name=\"various_dialog_title\">Всплывающее окно</string>\n    <string name=\"settings_notfication_importance\">Показывать важность уведомления</string>\n    <string name=\"various_no_overscroll\">Отключить отскок за пределы поля</string>\n    <string name=\"various_disable_bluetooth_restrict\">Предотвратить временное отключение Bluetooth</string>\n    <string name=\"various_disable_access_device_logs\">Отключить диалог запроса журнала доступа устройства</string>\n    <string name=\"various_unlock_ime\">Разблокировать IME</string>\n    <string name=\"various_unlock_ime_desc\">После открытия, проверьте соответствующую область метода ввода в Xposed manager</string>\n    <string name=\"various_collapse_miui_title\">Заголовок MIUI</string>\n    <string name=\"various_collapse_miui_title_desc\">Изменяет заголовок верхней панели в приложениях MIUI</string>\n    <string name=\"various_disable_folder_cantuse\">Снять ограничение на доступ к запретной папке</string>\n    <string name=\"various_super_clipboard_picture_desc\">Разрешить копирование изображения в буфер обмена</string>\n    <string name=\"custom_background_blur_enabled\">Размытие фона</string>\n    <string name=\"custom_background_blur_radius\">Степень размытия</string>\n    <string name=\"custom_background_color\">Цвет фона</string>\n    <string name=\"custom_background_color_alpha\">Прозрачность цвета</string>\n    <string name=\"custom_background_corner_radius\">Закругленные углы</string>\n    <string name=\"custom_blur_enabled\">Размытие фона</string>\n    <string name=\"various_blur_radius\">Степень размытия</string>\n    <string name=\"various_background_corner_radius\">Закругленные углы фона</string>\n    <string name=\"various_background_alpha\">Прозрачность фоновой маски</string>\n    <string name=\"various_background_color\">Цвет фона</string>\n    <string name=\"various_dialog_window_blur_title\">Размытие</string>\n    <string name=\"various_dialog_gravity\">Расположение всплывающего окна</string>\n    <string name=\"various_dialog_margin_horizontal\">Всплывающее окно со смещением по горизонтали</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">Расстояние между всплывающим окном и боковыми сторонами экрана</string>\n    <string name=\"various_dialog_margin_bottom\">Всплывающее окно с нижней границей</string>\n    <string name=\"various_dialog_margin_bottom_desc\">Расстояние от всплывающего окна до нижней части экрана</string>\n    <string name=\"various_dialog_window_blur\">Размытие окна</string>\n    <string name=\"various_dialog_window_blur_radius\">Степень размытия окна</string>\n    <string name=\"location_data_title\">База данных</string>\n    <string name=\"various_location_simulation_1_title\">Задача 1</string>\n    <string name=\"various_location_simulation_2_title\">Задача 2</string>\n    <string name=\"various_location_simulation_3_title\">Задача 3</string>\n    <string name=\"various_location_simulation_all_title\">Универсальный</string>\n    <string name=\"location_simulation_package_name\">Названия пакетов</string>\n    <string name=\"location_simulation_location\">Местоположение</string>\n    <string name=\"location_simulation_location_custom\">Выбор местоположения</string>\n    <string name=\"location_simulation_network\">Сеть</string>\n    <string name=\"location_simulation_operator_fix\">Исправление подмены оператора</string>\n    <string name=\"location_simulation_mac\">Mac-адрес</string>\n    <string name=\"location_simulation_wifi\">Wi-Fi</string>\n    <string name=\"location_simulation_router_mac\">Mac-адрес роутера</string>\n    <string name=\"location_simulation_work_title\">Название</string>\n    <string name=\"location_simulation_work_offset\">Смещение</string>\n    <string name=\"location_simulation_work_base_station\">Базовая станция</string>\n    <string name=\"location_simulation_work_longitude_latitude\">Долгота и широта</string>\n    <string name=\"location_simulation_work_remarks\">Отметить</string>\n    <string name=\"app_details_playstore\">Открыть в Play Маркет</string>\n    <string name=\"app_details_launch\">Запустить</string>\n    <string name=\"app_details_nolaunch\">Стандартный запуск данного приложения невозможен</string>\n    <string name=\"app_details_apk_file\">Расположение APK</string>\n    <string name=\"app_details_apk_version_code\">Код версии</string>\n    <string name=\"app_details_data_path\">Расположение данных</string>\n    <string name=\"app_details_app_uid\">ID пользователя</string>\n    <string name=\"app_details_sdk\">Текущая версия SDK</string>\n    <string name=\"app_details_min_sdk\">Мин.версия SDK</string>\n    <string name=\"disable_app_settings\">Это плохая идея!</string>\n    <string name=\"disable_app_title\">Отключить приложение?</string>\n    <string name=\"disable_app_text\">Если данное приложение является важным системным, то его отключение может что-нибудь поломать :)</string>\n    <string name=\"disable_app_fail\">Не удалось изменить состояние приложения</string>\n    <string name=\"unlimited\">Безлимитно</string>\n    <string name=\"calls\">Вызовы</string>\n    <string name=\"system_volume\">Система</string>\n    <string name=\"notification_volume\">Уведомления</string>\n    <string name=\"freeform_notification\">Всплывающее окно уведомления</string>\n    <string name=\"share_app\">Общий доступ к сторонним приложениям</string>\n    <string name=\"show_newmods_title\">Отметить новый модуль</string>\n    <string name=\"default_volume_stream_ring\">Вызов</string>\n    <string name=\"default_volume_stream_media\">Медиа</string>\n    <string name=\"default_volume_stream_tip\">Уведомление</string>\n    <string name=\"open_with_test_picture\">Фото</string>\n    <string name=\"open_with_test_audio\">Аудио</string>\n    <string name=\"open_with_test_media\">Видео</string>\n    <string name=\"open_with_test_doc\">Документ</string>\n    <string name=\"open_with_test_zip\">Файл</string>\n    <string name=\"open_with_test_all\">Все</string>\n    <string name=\"location_custom\">Своё</string>\n    <string name=\"operator_fix_none\">Не восстанавливать</string>\n    <string name=\"operator_fix_1\">Метод 1</string>\n    <string name=\"operator_fix_2\">Метод 2 (рекомендовано)</string>\n    <string name=\"custom_hook_new\">Добавить Hook</string>\n    <string name=\"custom_hook_mode\">Выбор режима</string>\n    <string name=\"cemiuiler_notice\">Потяните вниз строку состояния для отображения ярлыков и системных уведомлений</string>\n    <string name=\"cemiuiler_restart_quick\">Быстрый перезапуск приложения</string>\n    <string name=\"location_add\">Добавить</string>\n    <string name=\"location_delete\">Удалить</string>\n    <!--Tip-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr-rTR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">MIUI\\'yi Yeniden Harika Hale Getirin!</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">İngilizce</string>\n    <string name=\"translator\">can1gulle</string>\n    <string name=\"translator_url\">https://github.com/can1gulle</string>\n    <string name=\"settings\">Ayarlar</string>\n    <string name=\"about\">Hakkında</string>\n    <string name=\"about_use\">Alıntı</string>\n    <string name=\"about_use_desc\">Cemiuiler, destekleri için bu projelerin geliştiricilerine teşekkürler (belirli bir sıra olmadan) aşağıdaki açık kaynak projelerinin bir kısmını veya tamamını kullanır</string>\n    <string name=\"about_contributer\">Katkıda Bulunan</string>\n    <string name=\"about_contributer_desc\">Cemiuiler\\'in geliştirilmesindeki yardımları için aşağıdaki katkıda bulunanlara teşekkürler (belirli bir sıra olmadan)</string>\n    <string name=\"about_donation\">Katkıda Bulunanlar</string>\n    <string name=\"about_donation_desc\">Buradan bağış yaparak bize destek olabilirsiniz</string>\n    <string name=\"settings_data_title\">Yedekle ve geri yükle.</string>\n    <string name=\"settings_bug_title\">Sorun gider.</string>\n    <string name=\"settings_debug_title\">Hata.</string>\n    <string name=\"settings_hide_app_icon\">Masaüstü simgeleri.</string>\n    <string name=\"settings_icon\">Ayarlar simgeleri.</string>\n    <string name=\"settings_icon_desc\">Sistem ayarlarında modül girişinin konumunu ayarlayın</string>\n    <string name=\"settings_icon_disable\">Devre dışı</string>\n    <string name=\"settings_icon_top\">Üst</string>\n    <string name=\"settings_icon_medium\">Orta</string>\n    <string name=\"settings_icon_down\">Alt</string>\n    <string name=\"settings_icon_mode\">Simge stili</string>\n    <string name=\"settings_icon_miui_14\">Yuvarlatılmış dikdörtgen stili</string>\n    <string name=\"settings_icon_miui_13\">Arka plan kesme stili</string>\n    <string name=\"settings_reboot\">Hedef uygulamayı yeniden başlatın.</string>\n    <string name=\"settings_back\">Yedekleme modülü ayarları.</string>\n    <string name=\"settings_rest\">Modül ayarlarını geri yükle.</string>\n    <string name=\"settings_reset\">Modül ayarlarını sıfırla.</string>\n    <string name=\"reset_title\">Sıfırlamak istediğine emin misin?</string>\n    <string name=\"reset_desc\">Modül yapılandırmasını sıfırladıktan sonra tüm verileri silinir!</string>\n    <string name=\"reset_okay\">Modül yapılandırması sıfırlandı</string>\n    <string name=\"backup_success\">Yedekleme başarılı</string>\n    <string name=\"backup_failed\">Yedekleme başarısız</string>\n    <string name=\"rest_title\">İyileş</string>\n    <string name=\"rest_success\">Kurtarma başarılı oldu</string>\n    <string name=\"rest_failed\">Kurtarma başarısız oldu</string>\n    <string name=\"backup_ask\">Yedeklemeler yazmak ister misiniz?</string>\n    <string name=\"backup_permission\">Şimdi bu seçenek için izinleri manuel olarak etkinleştirmeniz gerekiyor.</string>\n    <string name=\"rest_ask\">Yedeklemenizi kurtarmak ister misiniz?</string>\n    <string name=\"rest_permission\">Şimdi bu seçenek için izinleri manuel olarak etkinleştirmeniz gerekiyor.</string>\n    <string name=\"disable_detailed_log\">Ayrıntılı günlüğü devre dışı bırak</string>\n    <string name=\"disable_detailed_log_desc\">Uygulamak için yeniden başlat</string>\n    <string name=\"settings_safe_mode\">Güvenli mod.</string>\n    <string name=\"settings_safe_mode_desc\">Modül işlevini durdur</string>\n    <string name=\"about_developer_title\">Geliştirici</string>\n    <string name=\"about_translator_title\">Çevirmen.</string>\n    <string name=\"about_chat_title\">Tartışma.</string>\n    <string name=\"about_other_title\">Diğer.</string>\n    <string name=\"about_qq_group\">QQ grup.</string>\n    <string name=\"about_qq_channel\">QQ kanal.</string>\n    <string name=\"about_tg_group\">Telegram grubu.</string>\n    <string name=\"about_tg_channel\">Telegram kanalı.</string>\n    <string name=\"about_github\">Kaynak kod.</string>\n    <string name=\"about_crwd\">Crowdin.</string>\n    <string name=\"about_crwd_desc\">Cemiuiler uygulamasını dilinize çevirmemize yardım edin.</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">Hızlı yeniden başlat</string>\n    <string name=\"tip\">Tip</string>\n    <string name=\"hook_failed\">Modül aktif değil</string>\n    <string name=\"preference_default_value_text\">Varsayılan</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">Üst kenar boşluğu</string>\n    <string name=\"bottom_margin\">Alt kenar boşluğu</string>\n    <string name=\"left_margin\">Sol kenar boşluğu</string>\n    <string name=\"right_margin\">Sağ kenar boşluğu</string>\n    <string name=\"vertical_offset\">Yukarı ve aşağı ofset</string>\n    <string name=\"horizontal_alignment\">Yatay hizalama</string>\n    <string name=\"feature\">İşlev</string>\n    <string name=\"recommend\">Önerilen</string>\n    <string name=\"editor\">Düzenleyici</string>\n    <string name=\"enable\">Etkinleştir</string>\n    <string name=\"custom_enable\">Özelleştirmeyi aç</string>\n    <string name=\"search\">aramak</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">Varsayılan</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">Genişlet</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">İçerik genişliğini düzeltin</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">Yatay titremeyi önlemek için</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">Kalın</string>\n    <!--Multi-list Array-->\n    <string name=\"array_default\">Varsayılan</string>\n    <string name=\"array_align_left\">Sol</string>\n    <string name=\"array_align_right\">Sağ</string>\n    <string name=\"array_align_center\">Merkez</string>\n    <string name=\"array_netspeedicons_no\">Simgeler yok</string>\n    <string name=\"array_clock_default\">Varsayılan</string>\n    <string name=\"array_clock_geek\">İnek</string>\n    <string name=\"array_global_actions_none\">Eylem yok</string>\n    <string name=\"array_global_actions_notif\">Bildirim merkezi\\'ni açın</string>\n    <string name=\"array_global_actions_eqs\">Hızlı ayarlar panelini genişletin</string>\n    <string name=\"array_global_actions_lock\">Kilit ekranı</string>\n    <string name=\"array_global_actions_sleep\">Ekranı kapat</string>\n    <string name=\"array_global_actions_screenshot\">Ekran resmi</string>\n    <string name=\"array_global_actions_menu\">Menüyü aç</string>\n    <string name=\"array_global_actions_recents\">Son kullanılanları aç</string>\n    <string name=\"array_global_actions_volume\">Ses iletişim kutusunu aç</string>\n    <string name=\"array_global_actions_volume_up\">Sesi Aç</string>\n    <string name=\"array_global_actions_volume_down\">Sesi Kıs</string>\n    <string name=\"array_global_actions_launch\">Uygulamayı başlat</string>\n    <string name=\"array_global_actions_launch_choose\">Uygulamayı seç</string>\n    <string name=\"array_global_actions_shortcut\">Kısayolu başlat</string>\n    <string name=\"array_global_actions_activity\">Etkinliği başlat</string>\n    <string name=\"array_global_actions_toggle\">Geçiş fonksiyonu</string>\n    <string name=\"array_global_actions_back\">Önceki uygulamaya geç</string>\n    <string name=\"array_global_actions_forceclose\">Geçerli uygulamayı kapatmaya zorla</string>\n    <string name=\"array_global_actions_powermenu\">Güç menüsünü açın</string>\n    <string name=\"array_global_actions_powermenu_short\">Güç menüsü</string>\n    <string name=\"array_global_actions_clear_memory\">Belleği temizle</string>\n    <string name=\"array_global_actions_invert_colors\">Renk inversiyonu</string>\n    <string name=\"array_global_actions_switchkeyboard\">Klavyeyi Değiştir</string>\n    <string name=\"array_global_actions_goback\">Geri</string>\n    <string name=\"array_global_actions_onehanded_left\">Tek Elle Kullanım Modu (Solda)</string>\n    <string name=\"array_global_actions_onehanded_right\">Tek Elle Kullanım Modu (Sağda)</string>\n    <string name=\"array_align_top\">Üst</string>\n    <string name=\"array_align_bottom\">Alt</string>\n    <string name=\"array_discrete\">Ayrı</string>\n    <string name=\"array_gradual\">Yavaş</string>\n    <string name=\"array_rainbow\">Gökkuşağı</string>\n    <string name=\"various_install_app_info_version_name\">Sürüm adı</string>\n    <string name=\"various_install_app_info_version_code\">Sürüm kodu</string>\n    <string name=\"various_install_app_info_sdk\">SDK desteği</string>\n    <string name=\"various_install_app_size\">Boyut</string>\n    <string name=\"charge_animation_entries_disable\">Devre dışı</string>\n    <string name=\"charge_animation_entries_aura\">Aura</string>\n    <string name=\"charge_animation_entries_stream\">Streamer</string>\n    <string name=\"charge_animation_entries_alpha\">Ritim</string>\n    <string name=\"status_bar_icon_mode_default\">Varsayılan</string>\n    <string name=\"status_bar_icon_mode_on\">Her zaman göster</string>\n    <string name=\"status_bar_icon_mode_off\">Her zaman gizli</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">Yalnızca bağlı değilken gizle</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">Sadece çalmadan önce göster</string>\n    <string name=\"seek_points_roll\">Yalnızca ekranı kaydırırken göster</string>\n    <string name=\"seek_points_edit\">Yalnızca düzenleme modunda gösterilir</string>\n    <string name=\"home_mode_day\">Açık mod</string>\n    <string name=\"home_mode_dark\">Karanlık modu</string>\n    <string name=\"dialog_gravity_medium\">Merkez</string>\n    <string name=\"dialog_gravity_down\">Alt</string>\n    <string name=\"collapse_miui_title_off\">Fold</string>\n    <string name=\"collapse_miui_title_on\">Genişlet</string>\n    <string name=\"collapse_miui_title_off_always\">Her zaman katlanmış</string>\n    <string name=\"collapse_miui_title_on_always\">Her zaman genişlet</string>\n    <string name=\"link_open_mode_default\">Sistem varsayılanı</string>\n    <string name=\"link_open_mode_mi\">Xiaomi tarayıcı</string>\n    <string name=\"app_sort_running\">Varsayılan sıralama</string>\n    <string name=\"app_sort_name\">Uygulama adı</string>\n    <string name=\"app_sort_frequency\">Kullanım sıklığı</string>\n    <string name=\"app_sort_storage\">Kullanılan depolama alanı</string>\n    <string name=\"app_sort_install\">Yükleme zamanı</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">Sistem Çerçevesi</string>\n    <string name=\"system_framework_volume_title\">Ses</string>\n    <string name=\"system_framework_other_title\">Diğer</string>\n    <string name=\"system_framework_bubble_title\">Kabarcık bildirimi</string>\n    <string name=\"system_framework_freeform_count\">Çoklu serbest form</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">Küçük serbest forma izin verilmesini zorla</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">Sistem kara listesini yoksay ve yazılım serbest formu yasakla</string>\n    <string name=\"system_framework_freeform_sticky\">Durumu hatırla</string>\n    <string name=\"system_framework_freeform_bubble\">Kabarcık serbest formu</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">Tüm serbest formu mini serbest forma dönüştürün</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">Son görevlerde tüm serbest formu mini serbest forma dönüştürün\\nBu özellik, yüksek kararsızlığa sahip deneysel bir özelliktir</string>\n    <string name=\"system_framework_default_volume_stream\">Ses seviyesini varsayılan olarak ayarla</string>\n    <string name=\"system_framework_volume_first_press\">Anında ses ayarı</string>\n    <string name=\"system_framework_volume_separate_control\">Bağımsız ses kontrolü</string>\n    <string name=\"system_framework_volume_disable_safe\">Yüksek hacimli güvenlik kısıtlamalarını kaldırın</string>\n    <string name=\"system_framework_volume_separate_slider\">Bildirim ses kaydırıcısı</string>\n    <string name=\"system_framework_volume_media_steps\">Medya ses seviyesi</string>\n    <string name=\"system_framework_volume_media_steps_desc\">Ses çubuğunun kaydırılmasının donmasına veya Bluetooth ses seviyesinin anormal olmasına neden olabilir</string>\n    <string name=\"system_framework_volume_steps\">Ses seviyesi çarpanı</string>\n    <string name=\"system_framework_screen_all_rotations\">Bu özellik, yüksek kararsızlığa sahip deneysel bir özelliktir</string>\n    <string name=\"system_framework_allow_untrusted_touch\">Güvenilmeyen dokunuşa izin ver</string>\n    <string name=\"system_framework_allow_uninstall\">Bazı ön yükleme uygulamalarını kaldırmaya izin ver</string>\n    <string name=\"system_framework_allow_uninstall_desc\">Bu özellik tehlikelidir</string>\n    <string name=\"system_framework_disable_app_link_verify\">Uygulama bağlantısını doğrulamayı devre dışı bırak</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">Uygulama ayarlarında desteklenen bağlantıları etkinleştirmeden bağlantıları açarken doğrudan desteklenen uygulamaları açmaya geri dönün</string>\n    <string name=\"system_framework_clean_share_menu\">Paylaşım menüsünü temizle</string>\n    <string name=\"system_framework_clean_share_apps\">Seçilen uygulamalar</string>\n    <string name=\"system_framework_clean_open_menu\">Birlikte aç menüsünü temizleyin</string>\n    <string name=\"system_framework_clean_open_apps\">Seçilen uygulamalar</string>\n    <string name=\"system_other_flag_secure\">Ekran görüntüsüne izin ver</string>\n    <string name=\"system_other_flag_secure_desc\">Herhangi bir uygulamanın ekran görüntülerine ve ekran kayıtlarına izin verir</string>\n    <string name=\"system_other_delete_on_post_notification\">Üst ekran bildirimini kaldırma</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">\\\"Bu uygulama ekrandaki diğer uygulamaların üstünde görüntüleniyor\\\" bildirimini kaldırın</string>\n    <string name=\"system_framework_share_menu_test\">Menü testini paylaş</string>\n    <string name=\"system_framework_open_with_menu_test\">Menü testi ile aç</string>\n    <string name=\"system_framework_other_use_original_animation\">Geçiş animasyonları yerel stilleri kullanır</string>\n    <string name=\"system_framework_other_speed_install\">Hızlı Kurulum</string>\n    <string name=\"system_framework_other_speed_install_desc\">Kurulumu hızlandırmak için çalışan belleğe yükleyin</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">Paket Yöneticisi Hizmeti</string>\n    <string name=\"system_framework_core_patch_downgr\">Düşürmeye izin ver</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">Uygulamaların düşürülmesine izin ver</string>\n    <string name=\"system_framework_core_patch_auth_creak\">Özet doğrulamayı devre dışı bırak</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">Apk\\'deki dosyayı değiştirdikten sonra uygulamaların yüklenmesine izin verir (ingnore geçersiz özet hatası)</string>\n    <string name=\"system_framework_core_patch_digest_creak\">İmzaları karşılaştırmayı devre dışı bırak</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">Uygulamayı farklı işaretlerle yeniden yüklemeye izin ver</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">Yüklü imzaları kullan</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">Bu özellik son derece tehlikelidir ve yalnızca kesinlikle gerekli olduğunda etkinleştirilmelidir</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">Geliştirilmiş mod</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">Uygulamada bazı doğrulamaları geçin</string>\n    <!--Browser-->\n    <string name=\"browser\">Tarayıcı</string>\n    <string name=\"browser_debug_mode\">Geliştirici ayarları</string>\n    <!--Camera-->\n    <string name=\"camera\">Kamera</string>\n    <string name=\"camera_features_unlock_aiwatermark\">AI filigranının kilidini aç</string>\n    <string name=\"camera_features_unlock_ambilight\">Uzun pozlamanın kilidini aç</string>\n    <string name=\"camera_features_unlock_clone\">Klon modunun kilidini aç</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">Cep aynasının kilidini aç</string>\n    <string name=\"camera_features_unlock_doc\">Belge modunun kilidini aç</string>\n    <string name=\"camera_features_unlock_idcard\">Kimlik Kartı modunun kilidini aç</string>\n    <string name=\"camera_features_unlock_dualcam\">Çift kameranın kilidini aç</string>\n    <string name=\"camera_features_unlock_duration\">Kilit Açma Süresi</string>\n    <string name=\"camera_features_unlock_milive\">Kısa videoların kilidini aç</string>\n    <string name=\"camera_features_unlock_moon\">Süper ay modunun kilidini aç</string>\n    <string name=\"camera_features_unlock_pano\">Panorama modunun kilidini aç</string>\n    <string name=\"camera_features_unlock_pixel\">Piksel modunun kilidini aç</string>\n    <string name=\"camera_features_unlock_portrait\">Portre modunun kilidini aç</string>\n    <string name=\"camera_features_unlock_slow\">Yavaş çekimin kilidini aç</string>\n    <string name=\"camera_features_unlock_videosky\">Videonun Kilidini Aç-gökyüzü</string>\n    <string name=\"camera_features_unlock_vlog\">Vlog\\'un Kilidini Aç</string>\n    <string name=\"camera_features_unlock_vlog_pro\">Vlog Pro\\'nun kilidini Aç</string>\n    <string name=\"camera_features_unlock_film\">Film kamerasının kilidini aç</string>\n    <string name=\"camera_features_unlock_film_delay\">Uzun deneyimin kilidini aç</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">Dolly zoom\\'un kilidini aç</string>\n    <string name=\"camera_features_unlock_film_dream\">Rüyanın Kilidini Aç</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">Yavaş deklanşörün kilidini aç</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">Zamanın geri akışının kilidini aç</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">Kilit Açma Süresi donuyor</string>\n    <string name=\"camera_shot_hand_gesture\">Avuç içi deklanşörünün kilidini aç</string>\n    <string name=\"camera_shot_color_enhance\">Renk geliştirmenin kilidini aç</string>\n    <string name=\"camera_shot_makeup\">Makyajın Kilidini Aç</string>\n    <string name=\"camera_shot_makeup_desc\">Yalnızca ön kamerayı kullanırken etkili olur</string>\n    <string name=\"camera_record_60fps\">60 FPS\\'nin kilidini aç</string>\n    <string name=\"camera_record_60fps_desc\">Bazı özelliklerde mevcut değildir, lütfen cihazınızın desteklendiğinden emin olun</string>\n    <string name=\"camera_record_120fps\">120 FPS\\'nin kilidini aç</string>\n    <string name=\"camera_record_120fps_desc\">Sadece 4K kalitesinde destek, lütfen cihazınızın desteklendiğinden emin olun</string>\n    <string name=\"camera_record_audio_zoom\">Sesli yakınlaştırmanın kilidini aç</string>\n    <string name=\"camera_record_hdr\">HDR\\'nin kilidini aç</string>\n    <string name=\"camera_record_ai\">AI geliştirmenin kilidini açın</string>\n    <string name=\"camera_portrait_new_beauty\">Yeni güzelliğin kilidini aç</string>\n    <string name=\"camera_portrait_new_beauty_desc\">Yalnızca ön kamerayı kullanırken etkili olur</string>\n    <string name=\"camera_portrait_cvlens\">Ana lensin kilidini aç</string>\n    <string name=\"camera_portrait_cvlens_desc\">Bazı cihazlarda iyi çalışmayabilir</string>\n    <string name=\"camera_pro_raw\">RAW\\'ın kilidini aç</string>\n    <string name=\"camera_pro_log\">Günlüğün kilidini aç</string>\n    <string name=\"camera_settings_heic\">HEIF\\'in kilidini aç</string>\n    <string name=\"camera_settings_track_focus\">Hareket izi odağının kilidini aç</string>\n    <string name=\"camera_settings_predictive\">Hareket yakalamanın kilidini aç</string>\n    <string name=\"camera_settings_nevus\">Köstebekleri kaldır</string>\n    <string name=\"camera_settings_men_makeup\">Erkekler için makyaj efektlerini ayarlama kilidini aç</string>\n    <string name=\"camera_settings_lab_options\">Laboratuvar seçeneklerini etkinleştir</string>\n    <string name=\"camera_settings_track_eyes\">Parça gözlerinin kilidini aç</string>\n    <!--Clock-->\n    <string name=\"clock\">Saat</string>\n    <string name=\"clock_enable_hour_glass\">Kum saati animasyonunun kilidini aç</string>\n    <!--File Manager-->\n    <!--Phone-->\n    <string name=\"incallui\">Telefon</string>\n    <string name=\"incallui_hide_crbt\">Kişiselleştirilmiş renkli zil sesini gizle</string>\n    <!--Message-->\n    <string name=\"mms\">Mesaj</string>\n    <string name=\"mms_disable_ad\">Reklamları devre dışı bırak</string>\n    <string name=\"mms_disable_ad_desc\">Ekranın altındaki kısayolları ve SMS içeriğinin altındaki promosyonları kaldırın</string>\n    <!--Phone Service-->\n    <!--Download management program-->\n    <!--System UI-->\n    <string name=\"system_ui\">Sistem Arayüzü</string>\n    <string name=\"system_ui_lockscreen_title\">Kilit ekranı</string>\n    <string name=\"system_ui_lockscreen_safe_title\">Güvenlik</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">Rastgele PIN</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">PIN tuş takımı sırasını randomize etme</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">Kilit ekranının alt kısmında şarj bilgilerini göster</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">Saati sistem yazı tiplerini kullanmaya zorla</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">Durum çubuğunu kilit ekranından kaldır</string>\n    <string name=\"system_ui_statusbar_title\">Durum çubuğu</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">Simge yöneticisi</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">Ağ hızı göstergesi yönetimi</string>\n    <string name=\"system_ui_statusbar_clock_title\">Saat göstergesi yönetimi</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">Simge stilleri</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">Sinyalin solundaki ekran</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">Mobil ağ etkinliği göstergelerini gizle</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">Yazı Boyutu</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">Simge ve Pil yüzdesi Değiştirin</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wifi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">Bluetooth</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">Mobil ağ</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">Konum</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">Durum simgesi</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">Bildirim simgesi</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">Pil</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">Simgenin sol tarafında gösterilir</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">Simgenin sağ tarafı gösterir</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">Köle Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Wifi standardı</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">Sıcak nokta</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">Ağ etkinlik göstergesi</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">Bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">Bluetooth pili</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">Yeni HD simge</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">Küçük HD simge</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">Büyük HD simge</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">Sim kart simgesi yok</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">Sim kart 1 sinyal simgesi</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">Sim kart 2 sinyal simgesi</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">Ekran mantığı</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">Büyük ağ türü simgesi</string>\n    <string name=\"system_ui_status_bar_icon_location\">Konum</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">Alarm saati</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">Alarm simgesini yalnızca alarm çalmadan önce göster</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d saat</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">Uçak modu</string>\n    <string name=\"system_ui_status_bar_icon_headset\">Kulaklık</string>\n    <string name=\"system_ui_status_bar_icon_volume\">Hacim</string>\n    <string name=\"system_ui_status_bar_icon_zen\">Zen</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">Maksimum bildirim noktası sayısı</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">Maksimum bildirim simgesi sayısı</string>\n    <string name=\"system_ui_status_bar_battery_percent\">Pil yüzdesini gizle</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">Pil yüzdesi işaretini sakla</string>\n    <string name=\"system_ui_status_bar_battery_charging\">Şarj gösterge ışığını gizleme</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">Pil göstergesi</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wifi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">Mobil ağ</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">Wi-Fi ve Mobil Ağı Değiştirin</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">İnternet hızı</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">Ses sahnesi</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">Yeni HD simgesini kullanmaya zorla</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">Yeni bir sistem sürümü gereklidir. Bazı modeller güncellenmemiş olabilir</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">Ağ hızı ayırıcı</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">Zaman ve şebeke hızı arasındaki dikey çizgi, su damlası ekranı olan cihazda görüntülenmez</string>\n    <string name=\"system_ui_status_bar_hide_icon\">Ekran görüntüsü alırken durum çubuğunu gizleyin</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">Mobil ağ türü simgesi</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">Ağ hızı güncelleme aralığı</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">Ağ hızı yazı tipi boyutu</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">Değer ve birim çift sıra halinde görüntülenir</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">Yükleme ve indirme hızı çift sıra halinde görüntülenir</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">Gelen ve giden ağ hızlarını ayrı göster</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">Yavaş ağ hızını gizle</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">Ağ hızı düşük olduğunda gösterge artık gösterilmiyor</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">Yavaş ağ hızı seviyesi</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">Bu seviyenin altındaki ağ hızı değerleri yavaş kabul edilir ve farklı bir gösterge simgesi görüntülenir (yalnızca bazı simgeler)</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">İkinci sonek (*b/s) başına Bayt gizle</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">Gösterge simgesi</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">Özel\\'i etkinleştir</string>\n    <string name=\"system_ui_statusbar_clock_mode\">Özel saat modu</string>\n    <string name=\"system_ui_statusbar_clock_editor\">Saat biçimi</string>\n    <string name=\"system_ui_statusbar_clock_year\">Yılı göster</string>\n    <string name=\"system_ui_statusbar_clock_month\">Ayı göster</string>\n    <string name=\"system_ui_statusbar_clock_date\">Günü göster</string>\n    <string name=\"system_ui_statusbar_clock_week\">Haftayı göster</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">Çift saati göster</string>\n    <string name=\"system_ui_statusbar_clock_period\">Saat periyodunu göster</string>\n    <string name=\"system_ui_statusbar_clock_second\">Saniyeleri göster</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">Alanı gizle</string>\n    <string name=\"system_ui_statusbar_clock_double\">Çifte göster</string>\n    <string name=\"system_ui_statusbar_clock_size\">Saat boyutu</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">Çift sıra saat boyutu</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">Merkez</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">Yuvarlatılmış köşeler</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">Görünürlüğü sınırla</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">Dikey olarak hizala</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">Renk</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">Tam dolu pil rengi</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">Düşük pil rengi</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">Power saving mode color</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">Şarj rengi</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">Yükseklik</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">Yatay kenar boşluğu</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">Şeffaf</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">Parlama</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">Düşük pil seviyesi</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">Test</string>\n    <string name=\"system_ui_controlcenter_title\">Kontrol merkezi</string>\n    <string name=\"system_ui_controlcenter_card_title\">Kart</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">Mıknatıs</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">Bildirim</string>\n    <string name=\"system_control_center_qs_detail_bg\">Kart arka plan saydamlığı</string>\n    <string name=\"system_control_center_5g_tile\">5G ağ anahtarı</string>\n    <string name=\"system_control_center_5g_toggle_label\">5G ağı</string>\n    <string name=\"system_ui_control_auto_close\">Magnetik karoları otomatik çekil</string>\n    <string name=\"system_ui_control_auto_close_more\">Açıldıktan sonra durum çubuğuna tıklamak durum çubuğunu otomatik olarak geri çekecek</string>\n    <string name=\"system_control_center_qs_tile_label\">Başlığı kaldır</string>\n    <string name=\"system_control_center_qs_rows\">Satırlar</string>\n    <string name=\"system_control_center_qs_rows_format\">%d satır</string>\n    <string name=\"system_control_center_qs_columns\">Sütunlar</string>\n    <string name=\"system_control_center_qs_columns_format\">%d liste</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">MiPlay Girişini Gizle</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">Ayrıntı Arka Plan bulanıklığı değerini kontrol etme</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">Bildirim Bulanıklığı Modeli</string>\n    <string name=\"system_ui_control_center_blur_radius\">Bulanıklık Yarıçapı</string>\n    <string name=\"system_ui_control_center_corner_radius\">Köşe Yarıçapı</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">Arka Plan değerini bulanıklaştır</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">Varsayılan Arka Plan değeri</string>\n    <string name=\"system_ui_control_center_compact_notice\">Kompakt bildirimler</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">Bildirimlerin dikey dolgularını azalt</string>\n    <string name=\"system_ui_control_center_rounded_rect\">Yuvarlatılmış dikdörtgen döşeme</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">Anahtar kontrol merkezi ve bildirim çekmecesi</string>\n    <string name=\"system_ui_controlcenter_new_title\">Yeni kontrol merkezi</string>\n    <string name=\"system_ui_controlcenter_old_title\">Eski kontrol merkezi</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">Daraltılmış paneldeki sütun sayısı</string>\n    <string name=\"system_ui_other_title\">Diğer</string>\n    <string name=\"system_ui_charge_animation_title\">Şarj animasyonu</string>\n    <string name=\"system_ui_charge_animation_style\">Şarj animasyon stili</string>\n    <string name=\"system_ui_charge_animation_style_desc\">Şarj animasyon stili</string>\n    <string name=\"system_ui_origin_charge_animation\">Yerel şarj animasyonu</string>\n    <string name=\"system_ui_another_title\">Diğer</string>\n    <string name=\"system_ui_notification_freeform\">Ücretsiz bir form açmak için daha fazla uygulamanın bildirim çubuğunu aşağı çekin</string>\n    <string name=\"system_ui_notification_freeform_desc\">Mi Push\\'tan gelen bildirimler desteklenmeyebilir</string>\n    <string name=\"system_ui_monet_title\">Monet</string>\n    <string name=\"system_ui_monet_overlay_custom\">Tema rengini özelleştirme</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">Sistem duvar kağıdından renk çekmek yerine tema renklerini özelleştirin</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">Tema rengini seçin</string>\n    <string name=\"system_ui_volume_timer\">Genişletilmiş zamanlayıcı</string>\n    <string name=\"system_ui_qs_label\">Hızlı geçiş sekmesi</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">Ses çubuğu bulanıklığını etkinleştir</string>\n    <!--Settings-->\n    <string name=\"system_settings\">Ayarlar</string>\n    <string name=\"system_settings_safe_wifi_desc\">Kayıtlı Ağları Yönetin Kilidini Açın\\nYol: Ayarlar-WLAN-Gelişmiş Ayarlar-Kayıtlı Ağları Yönetin</string>\n    <string name=\"system_settings_lab_title\">Öne çıkan işlevler</string>\n    <string name=\"system_settings_voip_assistant_controller\">VoIP asistanı</string>\n    <string name=\"system_settings_permission_title\">İzin</string>\n    <string name=\"system_settings_permission_show_app_up\">Uygulama listesinde arama yapmadan üst düzey izinler</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">Eski davranışı geri yükleyin, doğrudan \\\"diğer uygulamaların üstünde görüntülenen” ilgili uygulamanın izin anahtarına atlayın</string>\n    <string name=\"system_settings_develop_title\">Geliştirici seçenekleri</string>\n    <string name=\"system_settings_apps_freezer\">Köpücü uygulamaların çalışmasını durdurmak için göstermeyi zorla</string>\n    <string name=\"system_settings_apps_freezer_more\">Qabilleştirildikten sonra, bu özelliği \\\"Geliştirici Seçenekleri\\\" içinde bulunabilir. Mevcut görüntüler için mevcut olması garantili değil</string>\n    <string name=\"system_settings_develop_speed_mode\">Aşırı mod</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">Desteklenmeyen modellerde açıldıktan sonra giriş görüntülenmeyecektir</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">Temalar</string>\n    <string name=\"theme_manager_version_code_modify\">MIUI sürüm algılamayı devre dışı bırak</string>\n    <string name=\"theme_manager_diable_ads\">Reklamları devre dışı bırak</string>\n    <string name=\"theme_manager_crack\">Tema yaması</string>\n    <string name=\"theme_manager_enable_pad_theme\">Ped temasını etkinleştir</string>\n    <string name=\"theme_manager_enable_fold_theme\">Katlama temasını etkinleştir</string>\n    <!--Updater-->\n    <string name=\"updater\">Güncelleyici</string>\n    <string name=\"updater_fuck_vab\">OTA doğrulamasını kaldır</string>\n    <string name=\"updater_fuck_vab_desc\">Yalnızca VAB cihazları desteklenir. Lütfen VAB olmayan diğer cihazları etkinleştirmeyin!\\n- Dahili test izinleri olmadan eksiksiz dahili test kartı kaydırma paketine geçebilirsiniz\\n- Farklı sürüm türleri arasında geçiş yaptıktan sonra verileri temizlemeniz önerilir\\n- Herhangi bir resmi olmayan ROM kullanımını desteklemez\\n- Bu işlev tehlikelidir. Lütfen Fastboot\\'un çalışmasını anladıktan sonra etkinleştirip etkinleştirmeyeceğinizi değerlendirin</string>\n    <string name=\"updater_miui_version\">Güncelleyici için sahte MIUI sürümü</string>\n    <string name=\"updater_miui_version_desc\">Sistem güncellemesini yalnızca belirli bir ölçüde koruyabilen sistem güncellemesini değiştirin</string>\n    <string name=\"updater_device\">Güncelleyici için sahte cihaz</string>\n    <string name=\"updater_device_desc\">Bu özellik gerçekten tehlikeli, lütfen günlük olarak kullanmayın.</string>\n    <!--Permissions-->\n    <string name=\"lbe\">İzinler</string>\n    <string name=\"lbe_disable_clipboard_tip\">Tost İpuçlarını Gizle</string>\n    <!--Cast-->\n    <string name=\"milink\">Yayınla</string>\n    <string name=\"milink_unlock_mishare\">Cihaz ara bağlantısının kilidini aç</string>\n    <!--Always-on display-->\n    <!--Taplus-->\n    <string name=\"content_extension\">Taplus</string>\n    <string name=\"content_extension_browser\">Üçüncü taraf tarayıcıyı kullanma</string>\n    <string name=\"content_extension_browser_desc\">Arama için MIUI tarayıcısını kullanmak için Taplus\\'u zorunlu kılmayın, varsayılan tarayıcıyı kendiniz seçmeniz gerekir</string>\n    <string name=\"content_extension_double_press\">Jest: 2 parmak</string>\n    <string name=\"content_extension_super_image\">Görüntü kaydetme kalitesi: Süper çözünürlük</string>\n    <string name=\"content_extension_super_image_summary\">Gerçek koruma, cihaz modelinden temel destek gerektirir</string>\n    <!--Mi Canvas-->\n    <!--Gallery-->\n    <string name=\"gallery\">Galeri</string>\n    <string name=\"gallery_enable_hdr_enhanced\">Ekran yüksek dinamik aralığının kilidini aç</string>\n    <string name=\"gallery_enable_pdf\">PDF oluşturmanın kilidini aç</string>\n    <string name=\"gallery_enable_ocr\">OCR\\'nin kilidini aç</string>\n    <string name=\"gallery_enable_ocr_form\">Tarama tablosunun kilidini aç</string>\n    <string name=\"gallery_enable_id_photo\">Kimliğin kilidini aç</string>\n    <string name=\"gallery_enable_photo_movie\">Klibin kilidini aç</string>\n    <string name=\"gallery_enable_video_post\">Video efektlerinin kilidini aç</string>\n    <string name=\"gallery_enable_video_editor\">Video düzenleyicinin kilidini aç</string>\n    <string name=\"gallery_enable_text_yanhua\">Metin havai fişeklerinin kilidini aç</string>\n    <string name=\"gallery_enable_remover_2\">Silgi kilidini aç</string>\n    <string name=\"gallery_enable_magic_matting\">Kesmenin Kilidini Aç</string>\n    <string name=\"gallery_enable_magic_sky\">Gökyüzünün kilidini aç</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">MIUI güvenlik bileşenleri</string>\n    <string name=\"guard_provider_disable_upload_applist\">Yüklü uygulama listesinin otomatik olarak yüklenmesini engelle</string>\n    <!--System launcher-->\n    <string name=\"home\">Sistem başlatıcı</string>\n    <string name=\"home_gesture\">Hareket</string>\n    <string name=\"home_gesture_double_tap\">Çift tıklayın</string>\n    <string name=\"home_gesture_double_tap_desc\">Ana ekranda herhangi bir yere çift dokunun</string>\n    <string name=\"home_gesture_shake\">Sallamak</string>\n    <string name=\"home_gesture_shake_desc\">Cihazı herhangi bir ana ekrandan sallayın</string>\n    <string name=\"home_gesture_left_swipe\">Sola Kaydır</string>\n    <string name=\"home_gesture_left_swipe_desc\">Ana ekran Yuvasında sola kaydırın</string>\n    <string name=\"home_gesture_right_swipe\">Sağa Kaydır</string>\n    <string name=\"home_gesture_right_swipe_desc\">Ana ekran Yuvasında sağa kaydırın</string>\n    <string name=\"home_gesture_up_swipe\">Yukarı kaydırın</string>\n    <string name=\"home_gesture_up_swipe_desc\">Herhangi bir ana ekranda bir parmağınızla yukarı kaydırın</string>\n    <string name=\"home_gesture_down_swipe\">Aşağı kaydırın</string>\n    <string name=\"home_gesture_down_swipe_desc\">Herhangi bir ana ekranda bir parmağınızla aşağı kaydırın</string>\n    <string name=\"home_gesture_up_swipe2\">İki parmağınızla yukarı kaydırın</string>\n    <string name=\"home_gesture_up_swipe2_desc\">Herhangi bir ana ekranda iki parmağınızla yukarı kaydırın</string>\n    <string name=\"home_gesture_down_swipe2\">İki parmağınızla aşağı kaydırın</string>\n    <string name=\"home_gesture_down_swipe2_desc\">Herhangi bir ana ekranda iki parmağınızla aşağı kaydırın</string>\n    <string name=\"home_gesture_pinch\">İki parmağınızla sıkıştırın</string>\n    <string name=\"home_gesture_spread\">İki parmağınızla yayın</string>\n    <string name=\"home_layout\">Düzen</string>\n    <string name=\"home_layout_home_title\">Ana ekran</string>\n    <string name=\"home_layout_hotseats_title\">Yuva</string>\n    <string name=\"home_layout_searchbar_title\">Arama çubuğu</string>\n    <string name=\"home_layout_seek_points\">Sayfa göstergesi</string>\n    <string name=\"home_layout_show_clock\">Görüntüleme süresi</string>\n    <string name=\"home_layout_show_clock_desc\">Saat widget\\'ının bulunduğu sayfa her zaman saati görüntüler</string>\n    <string name=\"home_layout_unlock_grids\">Düzenin kilidini aç</string>\n    <string name=\"home_layout_unlock_grids_desc\">Ana ekran simgesi düzen boyutu sınırının kilidini aç</string>\n    <string name=\"home_layout_unlock_grids_no_words\">Düzenin kilidini aç (kelime modu yok)</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">Ana ekran simgesi düzen boyutu sınırının kilidini aç</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">Ana ekran ekranın alt kenar boşluğundan uzaklığı</string>\n    <string name=\"home_layout_hotseats_height\">Yükseklik</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">Sayfa göstergesi kenar boşluğundan yerleştirme mesafesi</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">Ekranın alt kenar boşluğundan yerleştirme mesafesi</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">Ekranın alt kenar boşluğundan arama çubuğu mesafesi</string>\n    <string name=\"home_folder\">Klasör</string>\n    <string name=\"home_small_folder_title\">Küçük klasör</string>\n    <string name=\"home_big_folder_title\">Büyük klasör</string>\n    <string name=\"home_small_folder_icon_bg\">Simge Arkaplanı</string>\n    <string name=\"home_small_folder_icon_bg_custom\">Özel arkaplan</string>\n    <string name=\"home_small_folder_icon_bg_size\">Arkaplan boyutu</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">Yatay üç ızgara arka plan özel</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">Özel</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">Arkaplan Genişliği</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">Arkaplan Yüksekliği</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">Dikey üç ızgara arka plan özel</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">Özel</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">Arkaplan Genişliği</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">Arkaplan Yüksekliği</string>\n    <string name=\"home_big_folder_icon_bg\">XXL arka plan özel</string>\n    <string name=\"home_big_folder_icon_bg_custom\">Özel</string>\n    <string name=\"home_big_folder_icon_bg_width\">Arkaplan Genişliği</string>\n    <string name=\"home_big_folder_icon_bg_height\">Arkaplan Yüksekliği</string>\n    <string name=\"home_big_folder_item_max_count\">Büyük klasör</string>\n    <string name=\"home_auto_close_folder_title\">Otomatik Kapanma</string>\n    <string name=\"home_auto_close_folder_summary\">Başlattıktan sonra uygulamanın klasörünü kapatın</string>\n    <string name=\"home_wallpaper\">Arkaplan</string>\n    <string name=\"home_wallpaper_blur\">Arkaplan bulanıklığı</string>\n    <string name=\"home_enable_blur\">Bulanıklaştırmaya başla</string>\n    <string name=\"home_blur_radius_title\">Bulanıklık yarıçapı</string>\n    <string name=\"home_folder_shade_title\">Kaplama rengi</string>\n    <string name=\"home_folder_shade_summary\">Arka plan rengini geliştirin veya zayıflatın</string>\n    <string name=\"home_folder_shade_solid\">Tüm arka plan</string>\n    <string name=\"home_folder_shade_gradient\">Sadece Orta</string>\n    <string name=\"home_folder_shade_level_title\">Renk Yoğunluğu</string>\n    <string name=\"home_folder_cols_title\">Klasör Düzenlemelerinin Sayısı</string>\n    <string name=\"home_folder_cols_format\">%d Liste</string>\n    <string name=\"home_folder_vertical_padding_title\">Klasör yatay aralığı</string>\n    <string name=\"home_folder_width_title\">Tüm klasörün genişliğini kullanın</string>\n    <string name=\"home_folder_space_title\">Kenar boşluklarını azalt</string>\n    <string name=\"home_folder_blur_title\">Arka plan bulanıklığı</string>\n    <string name=\"home_folder_anim_title\">Geri tepme animasyonu</string>\n    <string name=\"home_drawer\">Çekmece</string>\n    <string name=\"home_drawer_blur\">Tüm Uygulamalar Kapsayıcı Görünümü Bulanıklığını Etkinleştir</string>\n    <string name=\"home_drawer_blur_desc\">Bu özelliği kullanmak için lütfen uygulama çekmecesi arka plan saydamlığını %100 olarak ayarlayın</string>\n    <string name=\"home_title\">Simge ve başlık</string>\n    <string name=\"home_title_icon_title\">Simge</string>\n    <string name=\"home_title_bigicon_title\">Büyük simge</string>\n    <string name=\"home_title_title_title\">Başlık</string>\n    <string name=\"home_title_title_marquee\">Metin kaydırma</string>\n    <string name=\"home_title_font_size\">Yazı tipi boyutu</string>\n    <string name=\"home_title_title_color\">Başlık rengi</string>\n    <string name=\"home_title_animation_speed\">Animasyon hızı</string>\n    <string name=\"home_title_big_icon_corner\">Orta simge yuvarlak köşeyi takip etsin</string>\n    <string name=\"home_title_download_animation\">Animasyonu indir</string>\n    <string name=\"home_title_icon_scale\">Simgeleri ölçekle</string>\n    <string name=\"home_recent\">Son</string>\n    <string name=\"home_recent_animation_speed\">Animasyon hızı</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">Duvar kağıdı kaydırmayı devre dışı bırak</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">Görev görünümünde durum çubuğunu gizle</string>\n    <string name=\"home_recent_hide_freeform\">Serbest biçim düğmesini gizle</string>\n    <string name=\"home_recent_hide_clean_up\">Temizle düğmesini gizle</string>\n    <string name=\"home_recent_remove_icon\">Simgeyi kaldır</string>\n    <string name=\"home_recent_modify_animation\">Kartları kaldırmak için anim\\'i değiştirin</string>\n    <string name=\"home_recent_text\">Son görev olmadığında görüntülenen metin</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">Uygulama adı mesafe görev görünümü kartı</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">Görev görünümü kartı köşeleri yuvarlatılmış</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">Yatay-Dikey için küçük resim boyutu</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">Yatay için küçük resim boyutu -Yatay</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">Dikey için küçük resim boyutu</string>\n    <string name=\"home_recent_text_size\">Küçük resim etiketleri metninin boyutu</string>\n    <string name=\"home_recent_text_color\">Küçük resim etiketleri metninin rengi</string>\n    <string name=\"home_recent_freeform_background_color\">Serbest biçimli uygulama kartı arka plan rengi</string>\n    <string name=\"home_widget\">Widget</string>\n    <string name=\"home_widget_all_widget_animation\">Widget animasyonu</string>\n    <string name=\"home_widget_show_miui_widget\">MIUI widget\\'larını göster</string>\n    <string name=\"home_widget_show_miui_widget_desc\">Android widget sayfasında MIUI widget\\'larını görüntüleme</string>\n    <string name=\"home_widget_corner_radius\">Yuvarlatılmış widget köşeleri</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">Klasik widget\\'ın Eksi Bir ekrana taşınmasına izin ver</string>\n    <string name=\"home_widget_hide_title\">Widget başlığını gizle</string>\n    <string name=\"home_widget_resizable\">Widget boyut sınırlamalarını kaldırın</string>\n    <string name=\"home_dock\">Yuva</string>\n    <string name=\"home_dock_bg_height\">Yükseklik</string>\n    <string name=\"home_dock_bg_height_desc\">Yuva yüksekliği</string>\n    <string name=\"home_dock_bg_margin_horizontal\">Dikey kenar boşluğu</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Ekranın her iki tarafından yerleştirme mesafesi</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Ekran göstergesinden yuvanın kenar boşluğu</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Ekranın altından Dock\\'un kenar boşluğu</string>\n    <string name=\"home_dock_icon_margin_bottom\">Simge alt kenar boşluğu</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Dock simgesinin ekranın alt kenar boşluğundan uzaklığı</string>\n    <string name=\"home_dock_bg_custom\">Arkaplan bulanıklığı</string>\n    <string name=\"home_dock_icon_bottom_margin\">Alt kenar boşluğundan simge mesafesi</string>\n    <string name=\"home_dock_margin_bottom\">Ekranın altından sayfa kenar boşluğu göstergesi</string>\n    <string name=\"home_dock_unlock_hotseat\">Simge numarası kısıtlamasını dock\\'tan kaldırın</string>\n    <string name=\"home_dock_fold\">Fold\\'un İskelesi</string>\n    <string name=\"home_dock_hide_seekpoint\">Arama noktasını gizle</string>\n    <string name=\"home_dock_icon_title\">Dock\\'ta simge başlığını göster</string>\n    <string name=\"home_other\">Diğer</string>\n    <string name=\"home_other_home_mode\">Masaüstü modu</string>\n    <string name=\"home_other_infinite_scroll\">Sonsuz kaydırma</string>\n    <string name=\"home_other_infinite_scroll_desc\">Son sayfadan ilk sayfaya atla ve tam tersi</string>\n    <string name=\"home_other_freeform_shortcut_menu\">Serbest form modu</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">Kısayol menüsüne serbest biçimli menü ekleme</string>\n    <string name=\"home_other_user_present_animation\">Kilit açma animasyonunu optimize edin</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">Her zaman başlatıcı duvar kağıdını bulanıklaştır</string>\n    <string name=\"home_other_perfect_icon\">Mükemmel Simge Önceliği</string>\n    <string name=\"home_other_icon_mono_chrome\">Simge arka plan rengi</string>\n    <string name=\"home_other_icon_monet_color\">Monet rengi kullan</string>\n    <string name=\"home_other_use_edit_color\">Rengi düzenle</string>\n    <string name=\"home_other_your_color\">Rengin</string>\n    <string name=\"home_other_portrait_reverse\">Karşıt dikey ekran</string>\n    <string name=\"home_other_shortcut_background_blur\">Kısayol menüsü için arka plan bulanıklığı</string>\n    <string name=\"home_other_blur_radius\">Bulanıklık Yarıçapı</string>\n    <string name=\"home_large_icon_corner_radius\">Köşeleri yuvarlatılmış büyük simgeler</string>\n    <string name=\"home_other_app_icon_hide\">Masaüstü kısayol yönetimi</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">Kısayollardaki kısıtlamaları kaldırın</string>\n    <string name=\"home_other_disable_hide_google\">Google\\'ı gizlemeyi devre dışı bırak</string>\n    <string name=\"home_other_fix_android_r_s\">Masaüstünün kararmasına neden olan bir uyumluluk sorununu düzeltin</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">Kısayol menüsü bulanıklık değeri</string>\n    <string name=\"home_recent_blur_level\">Bulanıklık seviyesi</string>\n    <string name=\"home_recent_complete_blur_plus\">Tam Bulanıklık Artı</string>\n    <string name=\"home_recent_complete_blur\">Tam Bulanıklık</string>\n    <string name=\"home_recent_test_blur\">Test bulanıklığı</string>\n    <string name=\"home_recent_simple_blur\">Basit Bulanıklık</string>\n    <string name=\"home_recent_none_blur\">Bulanıklık Yok</string>\n    <string name=\"home_recent_none_blur_simple_anim\">Bulanıklık yok (Basit animasyon)</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">Galeri Editörü</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">Minimum kırpma görüntü sınırının kilidini açın</string>\n    <string name=\"mediaeditor_filter_manager\">Filtre yöneticisinin kilidini açın</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">Mi Paylaşım</string>\n    <string name=\"mishare_disable_mishare_auto_off\">Mi Paylaşımının otomatik kapanmasını devre dışı bırak</string>\n    <!--Wallpaper-->\n    <!--Package installer-->\n    <string name=\"package_installer\">Paket Yükleyicisi</string>\n    <string name=\"miui_package_installer_modify\">Sayfayı temizle</string>\n    <string name=\"miui_package_installer_safe_mode\">Temizleme modu</string>\n    <string name=\"miui_package_installer_disable_ad\">Promosyonu devre dışı bırak</string>\n    <string name=\"miui_package_installer_install_risk\">Risk algılamayı devre dışı bırak</string>\n    <string name=\"miui_package_installer_safe_model_tip\">Güvenlik görevlisi istemini devre dışı bırak</string>\n    <string name=\"miui_package_installer_count_checking\">Sık yüklenen uygulama kontrolünü devre dışı bırak</string>\n    <string name=\"miui_package_installer_update_system_app\">Sistem uygulaması yükleme kısıtlamalarını kaldırın</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">Sistem dışı herhangi bir kanalın sistem uygulamalarını yüklemesine izin ver</string>\n    <string name=\"miui_package_installer_install_source\">Özel yükleme kaynağı</string>\n    <string name=\"miui_package_installer_apk_info\">Daha fazla paket bilgisi göster</string>\n    <string name=\"miui_package_installer_apk_info_desc\">Yüklenmekte olan uygulama hakkında daha fazla bilgi göster</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">Uygulama kasası</string>\n    <string name=\"personal_assistant_widget_crack\">Widget düzeltme eki</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Pad/Fold ağırlığı</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">Ped / Katlama stili widget\\'larını etkinleştir</string>\n    <string name=\"personal_assistant_overlap_mode\">Negatif bir ekran Katlama stili</string>\n    <string name=\"personal_assistant_blur_model\">Kişisel asistan bulanıklık modeli</string>\n    <string name=\"personal_assistant_blurradius\">Kişisel asistan bulanıklık değeri</string>\n    <string name=\"personal_assistant_color\">Kişisel asistan rengi</string>\n    <!--Music-->\n    <string name=\"music\">Müzik</string>\n    <string name=\"music_disable_ad\">Reklamları kaldır</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">Pil ve performans</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">Özel yüksek yenileme hızı uygulamaları</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">Ekran Kaydedici</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">AOSP ekran kayıt desteğini etkinleştirmeye zorla</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">Ekran kayıt sürümü desteği gerektirir</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">Ekran Görüntüsü</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">Minimum kırpma görüntü sınırının kilidini açın</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">Güvenlik</string>\n    <string name=\"security_center_app_title\">Uygulama yönetimi</string>\n    <string name=\"security_center_battery_title\">Pil Tasarrufu ve Pil</string>\n    <string name=\"security_center_privacy_title\">Gizlilik koruması</string>\n    <string name=\"security_center_beauty_title\">Ön kamera asistanı</string>\n    <string name=\"security_center_bubble_and_freeform_title\">Kabarcık ve serbest form</string>\n    <string name=\"security_center_newbox_title\">Kenar Çubuğu</string>\n    <string name=\"security_center_show_battery_temperature\">Pil sıcaklığını göster</string>\n    <string name=\"security_center_ai_clipboard\">Panoyu koru</string>\n    <string name=\"security_center_blur_location\">Daha düşük konumlandırma doğruluğu</string>\n    <string name=\"security_center_get_number\">Cep telefonu numarasını almak ve tek bir tıklama ile giriş yapmak için uygulamayı yönetin</string>\n    <string name=\"security_center_applock_pin_scramble\">Sipariş dışı PIN\\'i kilitle</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">Uygulama kilidi PIN tuş takımı sırasını rastgele değiştir</string>\n    <string name=\"security_center_beauty_light_auto\">Kilidini aç Dolgu ışığı parlaklığını otomatik olarak ayarla</string>\n    <string name=\"security_center_beauty_face\">Görüntülü aramalar için Güzelleştirmenin kilidini açın</string>\n    <string name=\"security_center_beauty_privacy\">Gizlilik kamerasının kilidini aç</string>\n    <string name=\"security_center_beauty_pc\">Kilit açma Yüzleri ortalanmış tutun</string>\n    <string name=\"security_center_disable_root_check\">Kök algılamayı devre dışı bırak</string>\n    <string name=\"security_center_remove_macro_black_list\">Otomatik açılan kara listeyi kaldır</string>\n    <string name=\"security_center_newbox_custom_enable\">Özel\\'i etkinleştir</string>\n    <string name=\"security_center_newbox_bg_custom\">Arka plan bulanıklığı</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">Yatay kenar boşluğu</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">Dikey kenar boşluğu</string>\n    <string name=\"security\">Güvenlik</string>\n    <string name=\"security_app_title\">Ek uygulama ayrıntılarını göster</string>\n    <string name=\"security_app_summary\">Uygulamaya sayfaya yeni alanlar ekleyin:\\n- sürüm kodu\\n- apk\\'ya giden tam yol\\n- veri yolu\\n- kullanıcı kimliği\\n- min SDK sürümü\\n- hedef SDK sürümü\\n- play Store sayfasına bağlantı\\n- bir uygulama başlatma</string>\n    <string name=\"security_app_sort_title\">Uygulama yönetimi listesi sıralama</string>\n    <string name=\"security_app_sort_summary\">Uygulama yönetimi listesinin varsayılan sıralamasını değiştirme</string>\n    <string name=\"security_restrict_app_title\">Tam sınır</string>\n    <string name=\"security_restrict_app_summary\">Güç tasarrufu yapılandırmasına ve sistem uygulamaları için Wi-Fi\\'ye erişime izin verir</string>\n    <string name=\"security_disable_app_title\">Uygulama durumu kontrolü</string>\n    <string name=\"security_disable_app_summary\">Uygulama bilgisi sayfasından herhangi bir uygulamayı devre dışı bırakmaya izin ver</string>\n    <string name=\"security_score\">Sağlık kontrolü optimizasyonunu devre dışı bırak</string>\n    <string name=\"security_score_summary\">100 noktayı kilitleyin ve optimizasyonu devre dışı bırakın</string>\n    <string name=\"security_center_skip_waiting_time\">Geri sayım sınırını atla</string>\n    <string name=\"security_center_newbox_blur\">Kenar çubuğu bulanıklığı</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">Kabarcık bildirim uygulaması kısıtlamalarını kaldırın</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">Düşük pil seviyesiyle ilgili uyarıyı gizle</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">Açık uygulama açılır penceresini kaldır</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">\\\"Xxx\\'in xxx\\'i açmasına izin ver\\\" Zincir başlatma açılır penceresini kaldırın</string>\n    <string name=\"security_center_no_permission\">Gerekli izinler verilmedi</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">Serbest formun yan gizlemesinin kilidini aç</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">Düşük destekli ancak kısıtlı cihazlar için yandan gizleme serbest formunun kilidini açın. Bu, telefon arka planı kestiğinde widget\\'ın davranışını da etkileyecektir</string>\n    <string name=\"security_center_super_wireless_charge\">Süper kablosuz şarj cihazının kilidini açın</string>\n    <string name=\"security_center_blur_model\">Kenar çubuğu bulanıklaştırma modeli</string>\n    <string name=\"security_center_blurradius\">Kenar çubuğu bulanıklığı değeri</string>\n    <string name=\"security_center_color\">Kenar çubuğu rengi</string>\n    <string name=\"security_center_other_title\">Diğer</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">Akıllı kartlar</string>\n    <string name=\"tsmclient_auto_nfc\">Nfc\\'yi otomatik olarak yönet</string>\n    <string name=\"tsmclient_auto_nfc_desc\">Kart kaydırma sayfasına girerken NFC otomatik olarak açılır ve çıkarken otomatik olarak kapanır</string>\n    <string name=\"tsmclient_nfc_turning_on\">NFC otomatik olarak açılıyor</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">NFC\\'yi manuel olarak aç</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">NFC otomatik olarak etkinleştirilemedi</string>\n    <!--Weather-->\n    <string name=\"weather\">Hava durumu</string>\n    <string name=\"weather_device_level_title\">Animasyon hızı</string>\n    <string name=\"weather_device_level_title_low\">Düşük</string>\n    <string name=\"weather_device_level_title_middle\">Orta</string>\n    <string name=\"weather_device_level_title_high\">Yüksek</string>\n    <!--AI Translate-->\n    <!--Barrage-->\n    <!--Joyose-->\n    <string name=\"joyose\">Neşeli</string>\n    <string name=\"joyose_cloud_control_title\">Bulut Kontrolü</string>\n    <string name=\"joyose_disable_cloud_control\">Bulut kontrolünü devre dışı bırak</string>\n    <string name=\"joyose_game_title\">Oyun Alanı</string>\n    <string name=\"joyose_enable_gpu_tuner\">Performans planlaması</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">Açtıktan sonra, [Oyun Alanı] \\'nın alt ortasına oyun GPU\\'su ile ilgili ayarları ekleyin</string>\n    <!--GetApps-->\n    <string name=\"market\">GetApps</string>\n    <string name=\"market_device_modify\">Model kılığında</string>\n    <string name=\"market_device_modify_desc\">Gizlenmiş cihaz modeli Xiaomi 13 Ultra\\'dır</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">MIUI + \\'nın kilidini aç</string>\n    <!--Mi Settings-->\n    <!--MTB-->\n    <!--Scanner-->\n    <string name=\"scanner\">Tarayıcı</string>\n    <string name=\"scanner_card\">Tarama kimlik kartının kilidini aç</string>\n    <string name=\"scanner_translation\">Çevirinin kilidini aç</string>\n    <string name=\"scanner_ocr\">OCR\\'nin kilidini aç</string>\n    <string name=\"scanner_document\">Tarama belgesinin kilidini aç</string>\n    <string name=\"scanner_excel\">Tarama tablosunun kilidini aç</string>\n    <string name=\"scanner_ppt\">Tarama ppt\\'sinin kilidini aç</string>\n    <string name=\"scanner_doc_ppt\">Tarama dosyalarının kilidini aç</string>\n    <!--Other-->\n    <string name=\"various\">Diğer</string>\n    <string name=\"custom_hook\">Özelleştir</string>\n    <string name=\"various_location_simulation_title\">Sahte konum</string>\n    <string name=\"various_dialog_title\">Diyalog</string>\n    <string name=\"settings_notfication_importance\">Bildirim önemini göster</string>\n    <string name=\"various_no_overscroll\">Sınır dışı sekmeyi devre dışı bırak</string>\n    <string name=\"various_disable_bluetooth_restrict\">Bluetooth\\'un geçici olarak kapatılmasını önleyin</string>\n    <string name=\"various_disable_access_device_logs\">Erişim cihazı günlükleri isteği iletişim kutusunu kapat</string>\n    <string name=\"various_unlock_ime\">IME\\'nin kilidini aç</string>\n    <string name=\"various_collapse_miui_title\">MIUI başlığı</string>\n    <string name=\"various_collapse_miui_title_desc\">MIUI uygulamalarında üst çubuk başlığını ayarlayın</string>\n    <string name=\"various_disable_folder_cantuse\">Kullanılamayan klasör sınırını kaldırın</string>\n    <string name=\"custom_background_blur_enabled\">Arka plan bulanıklığı</string>\n    <string name=\"custom_background_blur_radius\">Bulanıklık yarıçapı</string>\n    <string name=\"custom_background_color\">Arka plan rengi</string>\n    <string name=\"custom_background_color_alpha\">Arka plan rengi saydamlığı</string>\n    <string name=\"custom_background_corner_radius\">Arka plan yuvarlatılmış köşeler</string>\n    <string name=\"custom_blur_enabled\">Arka plan bulanıklığı</string>\n    <string name=\"various_blur_radius\">Bulanıklık yarıçapı</string>\n    <string name=\"various_background_corner_radius\">Arka plan yuvarlatılmış köşeler</string>\n    <string name=\"various_background_alpha\">Arka plan maskesi saydamlığı</string>\n    <string name=\"various_background_color\">Arka plan rengi</string>\n    <string name=\"various_dialog_window_blur_title\">Bulanıklık</string>\n    <string name=\"various_dialog_gravity\">Açılır pencere konumu</string>\n    <string name=\"various_dialog_margin_horizontal\">Dikey kenar boşluğuna açılır pencere</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">Açılır pencere ile ekranın kenarları arasındaki mesafe</string>\n    <string name=\"various_dialog_margin_bottom\">Alt kenar boşluğuna açılır pencere</string>\n    <string name=\"various_dialog_margin_bottom_desc\">Açılır pencereden ekranın alt kısmına olan mesafe</string>\n    <string name=\"various_dialog_window_blur\">Pencere bulanıklığı</string>\n    <string name=\"various_dialog_window_blur_radius\">Pencere bulanıklığı yarıçapı</string>\n    <string name=\"location_data_title\">Veritabanı</string>\n    <string name=\"various_location_simulation_1_title\">Görev 1</string>\n    <string name=\"various_location_simulation_2_title\">Görev 2</string>\n    <string name=\"various_location_simulation_3_title\">Görev 3</string>\n    <string name=\"various_location_simulation_all_title\">Evrensel</string>\n    <string name=\"location_simulation_package_name\">Paket adları</string>\n    <string name=\"location_simulation_location\">Konum</string>\n    <string name=\"location_simulation_location_custom\">Konum seç</string>\n    <string name=\"location_simulation_network\">Ağ</string>\n    <string name=\"location_simulation_operator_fix\">Taşıyıcı maskeli balo düzeltmesi</string>\n    <string name=\"location_simulation_mac\">Mac adresi</string>\n    <string name=\"location_simulation_wifi\">Wifi</string>\n    <string name=\"location_simulation_router_mac\">Yönlendirici Mac Adresi</string>\n    <string name=\"location_simulation_work_title\">Başlık</string>\n    <string name=\"location_simulation_work_offset\">Kaydırma</string>\n    <string name=\"location_simulation_work_base_station\">Baz istasyonu</string>\n    <string name=\"location_simulation_work_longitude_latitude\">Boylam ve enlem</string>\n    <string name=\"location_simulation_work_remarks\">İşaretle</string>\n    <string name=\"app_details_playstore\">App store ile aç</string>\n    <string name=\"app_details_launch\">Başlat</string>\n    <string name=\"app_details_nolaunch\">Uygulamanın varsayılan başlatılabilir etkinliği yok</string>\n    <string name=\"app_details_apk_file\">APK dizini</string>\n    <string name=\"app_details_apk_version_code\">Uygulama sürüm numarası</string>\n    <string name=\"app_details_data_path\">Veri dizini</string>\n    <string name=\"app_details_app_uid\">User ID</string>\n    <string name=\"app_details_sdk\">Hedef SDK sürümü</string>\n    <string name=\"app_details_min_sdk\">En düşük SDK versiyonu</string>\n    <string name=\"disable_app_settings\">Bu kötü bir fikir!</string>\n    <string name=\"disable_app_title\">Uygulamayı devre dışı bırakmak istediğinizden emin misiniz?</string>\n    <string name=\"disable_app_text\">Bu gerekli bir sistem uygulamasıysa, devre dışı bırakmak hasara neden olabilir</string>\n    <string name=\"disable_app_fail\">Uygulama durumu değiştirilemedi</string>\n    <string name=\"unlimited\">Sınırsız</string>\n    <string name=\"calls\">Ara</string>\n    <string name=\"system_volume\">Sistem</string>\n    <string name=\"notification_volume\">Bildirim</string>\n    <string name=\"freeform_notification\">Bildirim kayan pencere</string>\n    <string name=\"share_app\">Üçüncü taraf uygulamalarla paylaşın</string>\n    <string name=\"show_newmods_title\">Yeni modülü işaretle</string>\n    <string name=\"default_volume_stream_ring\">Zil</string>\n    <string name=\"default_volume_stream_media\">Medya</string>\n    <string name=\"default_volume_stream_tip\">Bildirim</string>\n    <string name=\"open_with_test_picture\">Resim</string>\n    <string name=\"open_with_test_audio\">Ses</string>\n    <string name=\"open_with_test_media\">Video</string>\n    <string name=\"open_with_test_doc\">Belge</string>\n    <string name=\"open_with_test_zip\">Dosya</string>\n    <string name=\"open_with_test_all\">Tümü</string>\n    <string name=\"location_custom\">Özel</string>\n    <string name=\"operator_fix_none\">Onarılmamış</string>\n    <string name=\"operator_fix_1\">Yöntem 1</string>\n    <string name=\"operator_fix_2\">Yöntem 2 (önerilir)</string>\n    <string name=\"custom_hook_new\">Kanca ekle</string>\n    <string name=\"custom_hook_mode\">Modu seç</string>\n    <string name=\"cemiuiler_notice\">Kısayol anahtarlarını ve sistem bildirimlerini görüntülemek için durum çubuğunu aşağı çekin</string>\n    <string name=\"cemiuiler_restart_quick\">Hedef uygulamayı hızla yeniden başlatın</string>\n    <string name=\"location_add\">Ekle</string>\n    <string name=\"location_delete\">Sil</string>\n    <!--Tip-->\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v31/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"ic_launcher_foreground\">@android:color/system_accent1_0</color>\n    <color name=\"ic_launcher_background\">@android:color/system_accent1_300</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values-vi-rVN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">Làm cho MIUI tuyệt vời trở lại!</string>\n    <string name=\"new_permission_wifi_state_desc\">thêm và xóa tập tin trên bộ nhớ trong thiết bị</string>\n    <string name=\"new_permission_location_desc\">được sử dụng để cung cấp các dịch vụ như vĩ độ và kinh độ</string>\n    <string name=\"new_cta_agree_desc\">Trong quá trình sử dụng, để cung cấp cho bạn nhiều tính năng hơn, chúng tôi có thể xin phép Root/Su từ bạn. Bạn có thể vào Quản lý quyền bất cứ lúc nào để điều chỉnh trạng thái ủy quyền của tất cả các quyền và vui lòng truy cập trình quản lý Root/Su của bạn để có quyền Root/Su.</string>\n    <string name=\"new_cta_app_main_purpose\">sửa đổi ứng dụng hệ thống</string>\n    <string name=\"new_cta_app_all_purpose_title\">Chào mừng đến với Cemiuiler, ứng dụng này chạy trên khung Xposed, bạn có thể sử dụng ứng dụng này để chiếm quyền điều khiển và sửa đổi các ứng dụng được hỗ trợ khác để đạt được các cải tiến MIUI. Trong quá trình sử dụng, để cung cấp cho bạn nhiều tính năng hơn, chúng tôi có thể xin phép Root/Su từ bạn. Bạn có thể vào trình quản lý Root/Su của mình để có quyền Root/Su.</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">Tiếng Kinh</string>\n    <string name=\"translator\">Kimle69</string>\n    <string name=\"translator_url\">https://t.me/Kimle69</string>\n    <string name=\"settings\">Cài đặt</string>\n    <string name=\"about\">Giới thiệu</string>\n    <string name=\"about_use\">Trích dẫn</string>\n    <string name=\"about_use_desc\">Cemiuiler sử dụng một số hoặc tất cả các dự án mã nguồn mở sau, cảm ơn các nhà phát triển của các dự án này đã hỗ trợ (Thứ tự ngẫu nhiên)</string>\n    <string name=\"about_contributer\">Người đóng góp</string>\n    <string name=\"about_contributer_desc\">Cảm ơn những người đóng góp sau đây vì sự giúp đỡ của họ trong quá trình phát triển Cemiuiler (Thứ tự ngẫu nhiên)</string>\n    <string name=\"about_donation\">Tài trợ</string>\n    <string name=\"about_donation_desc\">Bạn có thể hỗ trợ chúng tôi bằng cách quyên góp tại đây</string>\n    <string name=\"about_privacy\">Chính Sách Quyền Riêng Tư</string>\n    <string name=\"about_protocol\">Thoả thuận người dùng</string>\n    <string name=\"settings_data_title\">Sao lưu và khôi phục</string>\n    <string name=\"settings_bug_title\">Khắc phục sự cố</string>\n    <string name=\"settings_debug_title\">Gỡ lỗi</string>\n    <string name=\"settings_hide_app_icon\">Biểu tượng màn hình</string>\n    <string name=\"settings_icon\">Biểu tượng cài đặt</string>\n    <string name=\"settings_icon_desc\">Lựa chọn vị trí của mô-đun truy cập vào cài đặt hệ thống</string>\n    <string name=\"settings_icon_disable\">Vô hiệu hóa</string>\n    <string name=\"settings_icon_top\">Trên cùng</string>\n    <string name=\"settings_icon_medium\">Ở giữa</string>\n    <string name=\"settings_icon_down\">Bên dưới</string>\n    <string name=\"settings_icon_mode\">Phong cách biểu tượng</string>\n    <string name=\"settings_icon_miui_14\">Ô hình chữ nhật bo tròn</string>\n    <string name=\"settings_icon_miui_13\">Nền màn hình khuyết</string>\n    <string name=\"settings_reboot\">Khởi động lại ứng dụng liên quan</string>\n    <string name=\"settings_back\">Sao lưu cài đặt module</string>\n    <string name=\"settings_rest\">Khôi phục cài đặt module</string>\n    <string name=\"settings_reset\">Đặt lại cài đặt module</string>\n    <string name=\"reset_title\">Bạn có chắc chắn muốn đặt lại?</string>\n    <string name=\"reset_desc\">Sau khi đặt lại cấu hình mô-đun, tất cả dữ liệu của nó sẽ bị xóa!</string>\n    <string name=\"reset_okay\">Đặt lại cấu hình mô-đun</string>\n    <string name=\"backup_success\">Sao lưu thành công</string>\n    <string name=\"backup_failed\">Sao lưu thất bại</string>\n    <string name=\"rest_title\">Khôi phục</string>\n    <string name=\"rest_success\">Khôi phục đã thành công</string>\n    <string name=\"rest_failed\">Khôi phục thất bại</string>\n    <string name=\"backup_ask\">Bạn có muốn tạo một bản sao lưu?</string>\n    <string name=\"backup_permission\">Bây giờ bạn có thể tùy chỉnh bật quyền cho cài đặt này.</string>\n    <string name=\"rest_ask\">Bạn có muốn khôi phục bản sao lưu không?</string>\n    <string name=\"rest_permission\">Bây giờ bạn có thể tùy chỉnh bật quyền cho cài đặt này.</string>\n    <string name=\"disable_detailed_log\">Vô hiệu hóa nhật ký chi tiết</string>\n    <string name=\"disable_detailed_log_desc\">Khởi động lại để áp dụng</string>\n    <string name=\"settings_safe_mode\">Chế độ an toàn</string>\n    <string name=\"settings_safe_mode_desc\">Dừng chức năng module</string>\n    <string name=\"about_developer_title\">Nhà phát triển</string>\n    <string name=\"about_translator_title\">Dịch thuật</string>\n    <string name=\"about_chat_title\">Thảo luận</string>\n    <string name=\"about_other_title\">Khác</string>\n    <string name=\"about_qq_group\">Nhóm QQ</string>\n    <string name=\"about_qq_channel\">Kênh QQ</string>\n    <string name=\"about_tg_group\">Nhóm Telegram</string>\n    <string name=\"about_tg_channel\">Kênh Telegram</string>\n    <string name=\"about_github\">Mã nguồn</string>\n    <string name=\"about_github_desc\">Dự án này là mã nguồn mở dựa trên giấy phép AGPL-3.0</string>\n    <string name=\"about_offical\">Website chính thức</string>\n    <string name=\"about_crwd\">Crowdin</string>\n    <string name=\"about_crwd_desc\">Giúp chúng tôi dịch Cemiuiler sang ngôn ngữ của bạn</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">Khởi động lại nhanh</string>\n    <string name=\"restart_app_desc\">Bạn có muốn khởi động lại máy bây giờ %1$s?</string>\n    <string name=\"tip\">Mẹo</string>\n    <string name=\"hook_failed\">Mô-đun này chưa được kích hoạt.\\nVui lòng kiểm tra xem trình quản lý Xpose có được bật hay không. Nếu vậy, vui lòng khởi động lại hoặc tối ưu hóa lại mô-đun.</string>\n    <string name=\"kill_failed\">Không thể kết thúc quá trình, kiểm tra Cemiuiler đã được cấp quyền Root?</string>\n    <string name=\"pid_failed\">Ứng dụng đích không chạy và không cần khởi động lại.</string>\n    <string name=\"reboot_failed\">Reboot không thành công, kiểm tra Cemiuiler đã được cấp quyền Root?</string>\n    <string name=\"expand_button_title\">Cấp độ cao</string>\n    <string name=\"not_set\">Chưa đặt</string>\n    <string name=\"copy\">Sao Chép</string>\n    <string name=\"more\">Thêm</string>\n    <string name=\"clearable_edittext_clear_description\">Xoá hết</string>\n    <string name=\"preference_on\">Bật</string>\n    <string name=\"preference_off\">Tắt</string>\n    <string name=\"preference_copied\">Sao chép vào clipboard.</string>\n    <string name=\"preference_default_value_text\">Mặc định</string>\n    <string name=\"preference_dialog_color_picker_default_title\">Lựa chọn màu</string>\n    <string name=\"preference_dialog_color_picker_presets\">Màu cài đặt sẵn</string>\n    <string name=\"preference_dialog_color_picker_custom\">Tùy chỉnh màu</string>\n    <string name=\"preference_dialog_color_picker_transparency\">Độ trong suốt</string>\n    <string name=\"preference_dialog_color_picker_select\">Xác nhận lựa chọn</string>\n    <string name=\"abc_action_bar_home_description\">Chỉ đường về nhà</string>\n    <string name=\"abc_action_bar_up_description\">Di chuyển lên</string>\n    <string name=\"actionbar_button_up_description\">Quay Lại</string>\n    <string name=\"appcompat_action_mode_select_all\">Chọn tất cả</string>\n    <string name=\"appcompat_cancel_description\">Hủy bỏ</string>\n    <string name=\"appcompat_confirm_description\">Ok</string>\n    <string name=\"appcompat_select_all_description\">Chọn tất cả</string>\n    <string name=\"appcompat_deselect_all_description\">Bỏ chọn tất cả</string>\n    <string name=\"appcompat_delete_description\">Xóa</string>\n    <string name=\"appcompat_search_action_mode_cancel\">Hủy</string>\n    <string name=\"appcompat_search_input_description\">Tìm kiếm</string>\n    <string name=\"appcompat_actionbar_immersion_button_more_description\">Thêm</string>\n    <string name=\"appcompat_action_mode_inverse\">Đảo ngược</string>\n    <string name=\"color_picker_alpha_text_transparent\">Độ mờ</string>\n    <string name=\"color_picker_tab_grid\">Lưới</string>\n    <string name=\"color_picker_tab_slider\">Thanh trượt</string>\n    <string name=\"color_picker_view_page_text_hue\">Tông màu</string>\n    <string name=\"color_picker_view_page_text_lightness\">Nhẹ nhàng</string>\n    <string name=\"color_picker_view_page_text_saturation\">Bão hòa</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">Lề trên cùng</string>\n    <string name=\"bottom_margin\">Lề dưới cùng</string>\n    <string name=\"left_margin\">Lề trái</string>\n    <string name=\"right_margin\">Lề phải</string>\n    <string name=\"vertical_offset\">Lên và xuống</string>\n    <string name=\"horizontal_alignment\">Căn chỉnh theo chiều ngang</string>\n    <string name=\"feature\">Tính năng</string>\n    <string name=\"recommend\">Đề xuất</string>\n    <string name=\"editor\">Trình chỉnh sửa</string>\n    <string name=\"record\">Quay phim</string>\n    <string name=\"shot\">Chụp</string>\n    <string name=\"portrait\">Chụp chân dung</string>\n    <string name=\"camera_pro\">Chuyên nghiệp</string>\n    <string name=\"enable\">Kích hoạt</string>\n    <string name=\"custom_enable\">Bật tùy chỉnh</string>\n    <string name=\"search\">Tìm kiếm</string>\n    <string name=\"floating_window\">Cửa sổ nổi</string>\n    <string name=\"save_to_screen_title\">Lưu thông tin vị trí</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">Mặc định</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">Mở rộng</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">Sửa nội dung ngang</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">Ngăn chặn jitter ngang</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">Chữ đậm</string>\n    <!--Multi-list Array-->\n    <string name=\"array_close\">Đóng</string>\n    <string name=\"array_default\">Mặc định</string>\n    <string name=\"array_align_left\">Bên trái</string>\n    <string name=\"array_align_right\">Bên phải</string>\n    <string name=\"array_align_center\">Trung tâm</string>\n    <string name=\"array_netspeedicons_no\">Không biểu tượng</string>\n    <string name=\"array_bold\">Đậm</string>\n    <string name=\"array_theme\">Theo chủ đề</string>\n    <string name=\"array_clock_center\">Đồng hồ ở giữa</string>\n    <string name=\"array_clock_right\">Đồng hồ bên phải</string>\n    <string name=\"array_clock_center_and_icon_left\">Đồng hồ ở giữa &amp; Icon bên trái</string>\n    <string name=\"array_clock_default\">Mặc định</string>\n    <string name=\"array_clock_geek\">Tuỳ chỉnh</string>\n    <string name=\"array_battery_both\">Cả hai</string>\n    <string name=\"array_battery_power\">Chỉ W</string>\n    <string name=\"array_battery_current\">Chỉ Ampe</string>\n    <string name=\"array_battery_temp\">Nhiệt độ Pin</string>\n    <string name=\"array_cpu_temp\">Nhiệt độ CPU</string>\n    <string name=\"array_global_actions_none\">Không có thao tác</string>\n    <string name=\"array_global_actions_notif\">Mở trung tâm thông báo</string>\n    <string name=\"array_global_actions_eqs\">Mở rộng bảng cài đặt nhanh</string>\n    <string name=\"array_global_actions_lock\">Màn hình khóa</string>\n    <string name=\"array_global_actions_sleep\">Đóng màn hình</string>\n    <string name=\"array_global_actions_screenshot\">Chụp màn hình</string>\n    <string name=\"array_global_actions_menu\">Mở menu</string>\n    <string name=\"array_global_actions_recents\">Mở trang gần đây</string>\n    <string name=\"array_global_actions_volume\">Mở hộp thoại âm lượng</string>\n    <string name=\"array_global_actions_volume_up\">Tăng âm lượng</string>\n    <string name=\"array_global_actions_volume_down\">Giảm âm lượng</string>\n    <string name=\"array_global_actions_launch\">Mở ứng dụng</string>\n    <string name=\"array_global_actions_launch_choose\">Chọn ứng dụng</string>\n    <string name=\"array_global_actions_shortcut\">Khởi động các lối tắt</string>\n    <string name=\"array_global_actions_activity\">Khởi chạy hoạt động</string>\n    <string name=\"array_global_actions_toggle\">Chức năng chuyển đổi</string>\n    <string name=\"array_global_actions_back\">Chuyển đến ứng dụng trước</string>\n    <string name=\"array_global_actions_forceclose\">Buộc đóng ứng dụng hiện tại</string>\n    <string name=\"array_global_actions_powermenu\">Mở trình đơn nguồn</string>\n    <string name=\"array_global_actions_powermenu_short\">Menu nguồn</string>\n    <string name=\"array_global_actions_clear_memory\">Xóa bộ nhớ</string>\n    <string name=\"array_global_actions_invert_colors\">Đảo ngược màu</string>\n    <string name=\"array_global_actions_switchkeyboard\">Chuyển đổi bàn phím</string>\n    <string name=\"array_global_actions_goback\">Quay Lại</string>\n    <string name=\"array_global_actions_onehanded_left\">Chế độ một tay (trái)</string>\n    <string name=\"array_global_actions_onehanded_right\">Chế độ một tay (phải)</string>\n    <string name=\"array_global_actions_scrolltotop\">Cuộn lên đầu</string>\n    <string name=\"array_global_actions_expandsidebar\">Hiển thị sidebar</string>\n    <string name=\"array_global_actions_floatingwindow\">Cửa sổ nổi</string>\n    <string name=\"array_global_actions_pinningwindow\">Ghim cửa sổ</string>\n    <string name=\"array_align_top\">Trên</string>\n    <string name=\"array_align_bottom\">Dưới cùng</string>\n    <string name=\"array_discrete\">Riêng lẻ</string>\n    <string name=\"array_gradual\">Chậm</string>\n    <string name=\"array_rainbow\">Cầu vòng</string>\n    <string name=\"various_install_app_info_version_name\">Tên phiên bản</string>\n    <string name=\"various_install_app_info_version_code\">Mã phiên bản</string>\n    <string name=\"various_install_app_info_sdk\">Hỗ trợ SDK</string>\n    <string name=\"various_install_app_size\">Kích thước</string>\n    <string name=\"charge_animation_entries_disable\">Vô hiệu hóa</string>\n    <string name=\"charge_animation_entries_aura\">Aura</string>\n    <string name=\"charge_animation_entries_stream\">Streamer</string>\n    <string name=\"charge_animation_entries_alpha\">Rhythm</string>\n    <string name=\"status_bar_icon_mode_default\">Mặc định</string>\n    <string name=\"status_bar_icon_mode_on\">Luôn hiện</string>\n    <string name=\"status_bar_icon_mode_off\">Luôn ẩn</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">Chỉ ẩn khi không kết nối</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">Chỉ hiện khi đổ chuông</string>\n    <string name=\"seek_points_roll\">Chỉ hiện khi đang vuốt màn hình</string>\n    <string name=\"seek_points_edit\">Chỉ hiển thị trong chế độ chỉnh sửa</string>\n    <string name=\"home_mode_day\">Chế độ sáng</string>\n    <string name=\"home_mode_dark\">Chế độ tối</string>\n    <string name=\"dialog_gravity_medium\">Trung tâm</string>\n    <string name=\"dialog_gravity_down\">Bên dưới</string>\n    <string name=\"collapse_miui_title_off\">Gập</string>\n    <string name=\"collapse_miui_title_on\">Mở rộng</string>\n    <string name=\"collapse_miui_title_off_always\">Luôn gập</string>\n    <string name=\"collapse_miui_title_on_always\">Luôn mở rộng</string>\n    <string name=\"link_open_mode_default\">Mặc định</string>\n    <string name=\"link_open_mode_mi\">Trình duyệt Xiaomi</string>\n    <string name=\"app_sort_running\">Sắp xếp theo mặc định</string>\n    <string name=\"app_sort_name\">Tên ứng dụng</string>\n    <string name=\"app_sort_frequency\">Tần suất sử dụng</string>\n    <string name=\"app_sort_storage\">Bộ nhớ sử dụng</string>\n    <string name=\"app_sort_install\">Thời gian cài đặt</string>\n    <string name=\"array_bluetooth_tile_style_3rows\">Ba hàng ô lớn</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\">Một ô lớn và hai ô nhỏ</string>\n    <string name=\"array_pa_blur_official\">Hiệu ứng làm mờ cài sẵn chính thức</string>\n    <string name=\"array_bpa_blur_customize\">Tùy chỉnh làm mờ nền</string>\n    <string name=\"control_center_sunshine_mode_default\">Đóng</string>\n    <string name=\"control_center_sunshine_mode_one\">Mặc định của hệ thống</string>\n    <string name=\"control_center_sunshine_mode_two\">Buộc độ sáng tối đa</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">Framework hệ thống</string>\n    <string name=\"system_framework_volume_title\">Âm lượng</string>\n    <string name=\"system_framework_other_title\">Khác</string>\n    <string name=\"system_framework_display_title\">Hiển thị</string>\n    <string name=\"system_framework_phone_title\">Mạng</string>\n    <string name=\"system_framework_bubble_title\">Bong bóng hội thoại</string>\n    <string name=\"system_framework_freeform_count\">Nhiều cửa sổ nổi</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">Cho phép tất cả ứng dụng mở ở dạng cửa sổ nổi</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">Đồng ý tất cả ứng dụng đều có thể hoạt động ở dạng cửa sổ nổi</string>\n    <string name=\"system_framework_freeform_sticky\">Ghi nhớ trạng thái</string>\n    <string name=\"system_framework_freeform_bubble\">Bong bóng dạng tự do</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">Biến tất cả tiện ích thành tiện ích nhỏ</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">Biến tất cả tiện ích thành tiện ích nhỏ trong các tác vụ gần đây\nChức năng này là chức năng thử nghiệm có độ ổn định cao</string>\n    <string name=\"system_framework_freeform_jump\">Giữ ở dạng cửa sổ nổi khi chuyển sang ứng dụng khác</string>\n    <string name=\"system_framework_freeform_title_desc\">Trong các trường hợp sau, khi bạn cần chuyển sang các ứng dụng khác, bạn sẽ sử dụng cửa sổ nổi</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">Chỉ hỗ trợ các liên kết</string>\n    <string name=\"system_framework_default_volume_stream\">Điều chỉnh âm lượng mặc định</string>\n    <string name=\"system_framework_volume_first_press\">Cài đặt điều chỉnh âm lượng</string>\n    <string name=\"system_framework_volume_separate_control\">Âm lượng Thông báo &amp; Hệ thống độc lập</string>\n    <string name=\"system_framework_volume_disable_safe\">Loại bỏ cảnh báo âm lượng quá lớn</string>\n    <string name=\"system_framework_volume_separate_slider\">Cột chỉnh âm lượng thông báo</string>\n    <string name=\"system_framework_volume_media_steps\">Mức âm lượng</string>\n    <string name=\"system_framework_volume_media_steps_desc\">Nó có thể khiến cuộn thanh âm lượng bị đơ hoặc âm lượng Bluetooth bất thường</string>\n    <string name=\"system_framework_volume_steps\">Hệ số bước âm lượng</string>\n    <string name=\"system_ui_display_cutout_title\">Màn hình khuyết</string>\n    <string name=\"system_ui_display_hide_cutout\">Ẩn màn hình khuyết</string>\n    <string name=\"system_ui_display_brightness_title\">Độ sáng</string>\n    <string name=\"system_ui_display_auto_brightness\">Phạm vi cho độ sáng tự động</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">Xác định giá trị tối thiểu và tối đa cho độ sáng tự động</string>\n    <string name=\"system_ui_display_min_brightness\">Độ sáng tự động tối thiểu</string>\n    <string name=\"system_ui_display_max_brightness\">Độ sáng tự động tối đa</string>\n    <string name=\"system_ui_display_toast_times_title\">Điều chỉnh thời lượng hiển thị</string>\n    <string name=\"system_ui_display_toast_times_desc\">Điều chỉnh thời lượng hiển thị của Toast, thời lượng hiển thị phải lớn hơn 1 giây</string>\n    <string name=\"system_framework_phone_network_title\">Cài đặt mạng</string>\n    <string name=\"phone_double_5g_nr\">Sử dụng 5G kép (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">SIM chính và phụ hỗ trợ 5G cùng lúc (SIM phụ chỉ hỗ trợ NSA)</string>\n    <string name=\"phone_double_5g_sa\">Sử dụng 5G kép (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">Tính năng thử nghiệm. Hỗ trợ thẻ SIM phụ SA</string>\n    <string name=\"system_framework_phone_band_title\">Cài đặt băng tần</string>\n    <string name=\"phone_n1\">Băng tần N1</string>\n    <string name=\"phone_n1_desc\">Hỗ trợ băng tần N1 (NR)</string>\n    <string name=\"phone_n28\">Băng tần N28</string>\n    <string name=\"phone_n28_desc\">Hỗ trợ băng tần N28 (NR)</string>\n    <string name=\"phone_n5_n8\">Băng tần N5/N8</string>\n    <string name=\"phone_n5_n8_desc\">Trên giao diện quay số bấm *#*#65686633#*#* ấn gọi để bật băng tần N5/N8. Nếu nó hiển thị bật Chế độ N5/N8, tính năng này sẽ bật thành công.</string>\n    <string name=\"system_framework_screen_all_rotations\">Xoay màn hình</string>\n    <string name=\"system_framework_allow_untrusted_touch\">Cho phép chạm không tin cậy</string>\n    <string name=\"system_framework_allow_uninstall\">Cho phép gỡ cài đặt một số App được cài đặt sẵn</string>\n    <string name=\"system_framework_allow_uninstall_desc\">Tính năng này nguy hiểm</string>\n    <string name=\"system_framework_disable_app_link_verify\">Tắt xác minh liên kết ứng dụng</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">Hoàn nguyên để mở trực tiếp các ứng dụng được hỗ trợ khi mở liên kết, không cần kiểm tra liên kết được hỗ trợ trong cài đặt ứng dụng</string>\n    <string name=\"system_framework_clean_share_menu\">Dọn dẹp trình đơn chia sẻ</string>\n    <string name=\"system_framework_clean_share_apps\">Ứng dụng đã chọn</string>\n    <string name=\"system_framework_clean_share_apps_desc\">Ứng dụng đã chọn sẽ không xuất hiện trong menu chia sẻ</string>\n    <string name=\"system_framework_clean_open_menu\">Dọn dẹp mở với menu</string>\n    <string name=\"system_framework_clean_open_apps\">Ứng dụng đã lựa chọn</string>\n    <string name=\"system_framework_clean_open_apps_desc\">Ứng dụng đã chọn sẽ không xuất hiện trong menu mở</string>\n    <string name=\"system_other_flag_secure\">Cho phép chụp ảnh màn hình</string>\n    <string name=\"system_other_flag_secure_desc\">Cho phép chụp ành màn hình và ghi hình bất kì ứng dụng nào</string>\n    <string name=\"system_other_delete_on_post_notification\">Xóa thông báo lớp phủ</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">Xóa thông báo \\\"Ứng dụng này đang hiển thị trên các ứng dụng khác\\\"</string>\n    <string name=\"system_framework_share_menu_test\">Chia sẻ menu thử nghiệm</string>\n    <string name=\"system_framework_open_with_menu_test\">Mở với menu thử nghiệm</string>\n    <string name=\"system_framework_other_use_original_animation\">Hoạt ảnh chuyển tiếp sử dụng kiểu gốc</string>\n    <string name=\"system_framework_other_speed_install\">Tăng tốc bộ nhớ</string>\n    <string name=\"system_framework_other_speed_install_desc\">Cài đặt tăng tốc bộ nhớ</string>\n    <string name=\"system_framework_other_thermal_brightness\">Vô hiệu hóa giảm độ sáng màn hình tự động</string>\n    <string name=\"system_framework_other_thermal_brightness_more\">Chỉ tự động giảm độ sáng khi độ sáng tự động bật không phải do kiểm soát nhiệt</string>\n    <string name=\"system_framework_other_disable_cleaner\">Ngăn chặn tắt ứng dụng nền</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">Tính năng thử nghiệm, có thể gây ra việc sử dụng bộ nhớ bất thường</string>\n    <string name=\"system_framework_disable_72h_verify\">Tắt xác minh khóa màn hình sau 72 giờ</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">Quản lý cài đặt gói</string>\n    <string name=\"system_framework_core_patch_downgr\">Cho phép hạ cấp</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">Cho phép hạ cấp ứng dụng</string>\n    <string name=\"system_framework_core_patch_auth_creak\">Tắt thông báo xác minh</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">Cho phép cài đặt tập tin APK đã chỉnh sửa\n\\\"Bỏ qua lỗi không hợp lệ\\\" </string>\n    <string name=\"system_framework_disable_integrity\">Tắt kiểm tra tính toàn vẹn của hệ thống</string>\n    <string name=\"system_framework_disable_integrity_desc\">Tự động khôi phục nội dung bị giả mạo. Khi chức năng \\\"Tắt thông báo xác minh\\\" được bật, chức năng này sẽ được bật theo.\\nChỉ hỗ trợ Android 13 trở lên</string>\n    <string name=\"system_framework_core_patch_digest_creak\">Tắt so sánh chữ ký</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">Cho phép cài đặt lại ứng dụng với chữ kí khác nhau</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">Dùng chữ kí đã được cài đặt</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">Tính năng này cực kì nguy hiểm. Chỉ nên được kích hoạt khi cần thiết</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">Chế độ nâng cao</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">Vượt qua một có xác nhận trong ứng dụng</string>\n    <!--Browser-->\n    <string name=\"browser\">Trình duyệt</string>\n    <string name=\"browser_debug_mode\">Tùy chọn nhà phát triển</string>\n    <string name=\"browser_debug_mode_desc\">17.5.xxxxx trở lên không được hỗ trợ</string>\n    <!--Camera-->\n    <string name=\"camera\">Máy ảnh</string>\n    <string name=\"camera_features_unlock_aiwatermark\">Mở khóa Dấu chìm AI</string>\n    <string name=\"camera_features_unlock_ambilight\">Mở khóa Phơi sáng lâu</string>\n    <string name=\"camera_features_unlock_clone\">Mở khóa Bản sao</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">Mở khóa Gương trang điểm</string>\n    <string name=\"camera_features_unlock_doc\">Mở khóa Tài liệu</string>\n    <string name=\"camera_features_unlock_idcard\">Mở khóa Thẻ căn cước</string>\n    <string name=\"camera_features_unlock_dualcam\">Mở khóa Máy ảnh kép</string>\n    <string name=\"camera_features_unlock_duration\">Mở khóa Chuyển động nhanh ban đêm</string>\n    <string name=\"camera_features_unlock_milive\">Mở khóa Video ngắn</string>\n    <string name=\"camera_features_unlock_moon\">Mở khóa Siêu trăng</string>\n    <string name=\"camera_features_unlock_pano\">Mở khóa Chụp toàn cảnh</string>\n    <string name=\"camera_features_unlock_pixel\">Mở khóa Siêu phân giải</string>\n    <string name=\"camera_features_unlock_portrait\">Mở khóa Chân dung</string>\n    <string name=\"camera_features_unlock_slow\">Mở khóa Chuyển động chậm</string>\n    <string name=\"camera_features_unlock_videosky\">Mở khóa Video bầu trời</string>\n    <string name=\"camera_features_unlock_vlog\">Mở khóa Vlog</string>\n    <string name=\"camera_features_unlock_vlog_pro\">Mở khóa Vlog Pro</string>\n    <string name=\"camera_features_unlock_film\">Mở khóa Khung phim</string>\n    <string name=\"camera_features_unlock_film_delay\">Mở khóa Phơi sáng lâu</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">Mở khóa Thu phóng ma thuật</string>\n    <string name=\"camera_features_unlock_film_dream\">Mở khóa Thế giới song song</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">Mở khóa Màn trập chậm</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">Mở khóa Ngược dòng thời gian</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">Mở khóa Đóng băng thời gian</string>\n    <string name=\"camera_shot_hand_gesture\">Mở khóa Cử chỉ chụp ảnh</string>\n    <string name=\"camera_shot_color_enhance\">Mở khóa Màu nâng cao</string>\n    <string name=\"camera_shot_makeup\">Mở khóa Gương trang điểm</string>\n    <string name=\"camera_shot_makeup_desc\">Chỉ hoạt động với camera trước</string>\n    <string name=\"camera_record_60fps\">Mở khóa 60FPS</string>\n    <string name=\"camera_record_60fps_desc\">Một số chất lượng hình ảnh không khả dụng, một số phần cứngị không hỗ trợ</string>\n    <string name=\"camera_record_120fps\">Mở khóa 120FPS</string>\n    <string name=\"camera_record_120fps_desc\">Chỉ hỗ trợ chế độ 4K, một số phần cứng không hỗ trợ</string>\n    <string name=\"camera_record_audio_zoom\">Mở khóa Thu phóng phím âm lượng</string>\n    <string name=\"camera_record_hdr\">Mở khóa HDR</string>\n    <string name=\"camera_record_ai\">Mở khóa Chế độ AI</string>\n    <string name=\"camera_portrait_new_beauty\">Mở khóa Hiệu ứng làm đẹp mới</string>\n    <string name=\"camera_portrait_new_beauty_desc\">Chỉ hoạt động với camera trước</string>\n    <string name=\"camera_portrait_cvlens\">Mở khóa Ống kính Pro</string>\n    <string name=\"camera_portrait_cvlens_desc\">Một số thiết bị hoạt động không bình thường</string>\n    <string name=\"camera_pro_raw\">Mở khóa RAW</string>\n    <string name=\"camera_pro_log\">Mở khóa Nhật ký</string>\n    <string name=\"camera_settings_heic\">Mở khóa Định dạng HEIF</string>\n    <string name=\"camera_settings_track_focus\">Mở khóa Theo dõi chuyển động</string>\n    <string name=\"camera_settings_predictive\">Mở khóa Chụp chuyển động</string>\n    <string name=\"camera_settings_nevus\">Mở khóa Loại bỏ nốt ruồi</string>\n    <string name=\"camera_settings_men_makeup\">Mở khóa Trang điểm nam</string>\n    <string name=\"camera_settings_lab_options\">Mở khóa Tính năng thử nghiệm</string>\n    <string name=\"camera_settings_track_eyes\">Mở khóa Theo dõi mắt người</string>\n    <!--Clock-->\n    <string name=\"clock\">Đồng hồ</string>\n    <string name=\"clock_enable_hour_glass\">Mở khóa hoạt ảnh đồng hồ hẹn giờ</string>\n    <string name=\"clock_enable_hour_glass_desc\">Phiên bản 13.65.0 trở lên không được hỗ trợ</string>\n    <!--File Manager-->\n    <string name=\"fileexplorer\">Tập tin</string>\n    <string name=\"file_explorer_can_selectable\">File Explorer dạng table</string>\n    <string name=\"file_explorer_is_single_line\">File Explorer 1 hàng</string>\n    <!--Phone-->\n    <string name=\"incallui\">Điện thoại</string>\n    <string name=\"incallui_hide_crbt\">Ẩn nhạc chuông</string>\n    <string name=\"incallui_answer_in_head_up\">Trả lời khi đưa lên tai</string>\n    <!--Message-->\n    <string name=\"mms\">Tin nhắn</string>\n    <string name=\"mms_disable_ad\">Vô hiệu quảng cáo</string>\n    <string name=\"mms_disable_ad_desc\">Bỏ nút tắt cuối màn hình và khuyến mãi cuối nội dung tin nhắn</string>\n    <!--Phone Service-->\n    <string name=\"phone\">Dịch vụ điện thoại</string>\n    <string name=\"phone_smart_dual_sim\">Mở khóa SIM kép thông minh</string>\n    <string name=\"phone_vice_slot_volte\">Mở khoá VoLTE sim phụ</string>\n    <string name=\"phone_vice_slot_volte_desc\">Sử dụng dữ liệu di động cho cuộc gọi VoLTE trên SIM phụ</string>\n    <!--Download management program-->\n    <string name=\"downloads\">Tải xuống</string>\n    <string name=\"various_fuck_xlDownload\">Chặn tạo thư mục .xlDownload</string>\n    <string name=\"various_fuck_xlDownload_desc\">Ngăn trình quản lý tải xuống tạo thư mục .xlDownload trên thư mục gốc của bộ nhớ</string>\n    <!--System UI-->\n    <string name=\"system_ui\">Giao diện người dùng hệ thống</string>\n    <string name=\"system_ui_lockscreen_title\">Màn hình khóa</string>\n    <string name=\"system_ui_lockscreen_safe_title\">Bảo mật</string>\n    <string name=\"system_ui_lockscreen_ui_title\">Giao diện</string>\n    <string name=\"system_ui_lockscreen_information_title\">Thông tin</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">Mã PIN ngẫu nhiên</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">Sắp xếp Mã PIN ngẫu nhiên</string>\n    <string name=\"system_ui_lock_screen_password_free\">Không cần nhập mật khẩu khi khởi động lại</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">Nó sẽ chỉ có hiệu lực nếu thiết bị không được kích hoạt mã hóa</string>\n    <string name=\"system_ui_lock_screen_password_free_tip\">Thiết bị được được mã hóa, chức năng này không khả dụng</string>\n    <string name=\"system_ui_lock_screen_default_theme\">Chỉ hỗ trợ chủ đề mặc định</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">Hiển thị thông tin sạc ở dưới cùng màn hình khóa</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">Hiển thị chi tiết mA</string>\n    <string name=\"system_ui_lock_screen_show_battery_temperature\">Hiển thị nhiệt độ pin</string>\n    <string name=\"system_ui_lock_screen_show_spacing\">Thời gian làm mới</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">Ẩn Camera</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">Ẩn Khoá tạp chí</string>\n    <string name=\"system_ui_lock_screen_current\">Hiện tại</string>\n    <string name=\"system_ui_lock_screen_show_second\">Đồng hồ hiển thị giây</string>\n    <string name=\"system_ui_lock_screen_blur_button\">Làm mờ phím tắt và thông báo</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">Buộc đồng hồ dùng phông chữ hệ thống</string>\n    <string name=\"system_ui_lock_screen_double_lock\">Nhấn đúp để khoá màn hình</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">Nhấn đúp vào vị trí trống để khóa màn hình</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">Ẩn thông báo chế độ không làm phiền</string>\n    <string name=\"system_ui_lock_screen_unlock_tip_title\">Ẩn dòng \\\"Trượt lên để mở khoá\\\"</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">Ẩn thanh trạng thái ở màn hình khóa</string>\n    <string name=\"system_ui_navigation_title\">Phím điều hướng</string>\n    <string name=\"system_ui_navigation_handle_title\">Thanh ngang</string>\n    <string name=\"system_ui_hide_navigation_bar\">Ẩn thanh ngang</string>\n    <string name=\"system_ui_hide_navigation_bar_more\">Vui lòng khởi động lại Miui Home và SystemUi</string>\n    <string name=\"system_ui_navigation_handle_custom\">Tùy chỉnh thanh ngang</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">Chiều cao</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">Độ rộng chiều dọc</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">Độ rộng chiều ngang</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">Độ dày thanh ngang</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">Màu ở chế độ sáng</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">Màu ở chế độ tối</string>\n    <string name=\"system_ui_navigation_custom\">Tùy chỉnh thanh ngang cử chỉ</string>\n    <string name=\"system_ui_navigation_custom_height\">Chiều cao thanh ngang</string>\n    <string name=\"system_ui_navigation_custom_height_land\">Chiều cao thanh ngang \\\"xoay ngang\\\"</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">Chiều cao thanh điều hướng</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">Chiều cao thanh điều hướng \\'xoay ngang\\'</string>\n    <string name=\"system_ui_statusbar_title\">Thanh trạng thái</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">Biểu tượng</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">Tốc độ mạng</string>\n    <string name=\"system_ui_statusbar_clock_title\">Đồng hồ</string>\n    <string name=\"system_ui_statusbar_device_title\">Phần cứng</string>\n    <string name=\"system_ui_statusbar_layout_title\">Bố cục</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_title\">Chế độ tương thích</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_desc\">Buộc kích hoạt bố cục toàn màn hình cho các màn hình có hình dạng đặc biệt</string>\n    <string name=\"system_ui_statusbar_layout_mode_title\">Bố cục thanh trạng thái</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">Nhấn đúp để khoá màn hình</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">Cột sóng đôi</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">Kiểu biểu tượng cột sóng</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">Tỉ lệ biểu tượng</string>\n    <string name=\"system_ui_status_bar_mobile_type_single\">Biểu tượng loại mạng di động tùy chỉnh</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">Hiển thị bên trái tín hiệu</string>\n    <string name=\"system_ui_status_bar_mobile_type_only_show_network\">Chỉ hiển thị thẻ mạng</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">Ẩn chỉ báo hoạt động mạng di động</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">Tuỳ chỉnh văn bản</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">Cỡ chữ</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">Hoán đổi biểu tượng và phần trăm pin</string>\n    <string name=\"system_ui_status_bar_battery_style_font_size\">Kích thước phông chữ pin</string>\n    <string name=\"system_ui_status_bar_battery_style_font_mark_size\">Kích thước phông chữ %pin</string>\n    <string name=\"system_ui_status_bar_battery_style_vertical_offset\">Độ cao thấp của %pin</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wi-Fi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">Bluetooth</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">Mạng di động</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">Vị trí</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">Biểu tượng thanh trạng thái</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">Biểu tượng thông báo</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">Pin</string>\n    <string name=\"system_ui_statusbar_iconmanage_call_title\">Cuộc gọi</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">Chuyển biểu tượng sang trái</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">Chuyển biểu tượng sang phải</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">Biểu tượng Wi-Fi phụ</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Hiển thị chuẩn Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">Điểm phát sóng</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">Biểu tượng HD lớn</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">Bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">Pin bluetooth</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">Biểu tượng HD mới</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">Biểu tượng HD nhỏ</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">Biểu tượng HD lớn</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">Biểu tượng không có sim</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">Biểu tượng tín hiệu mạng sim 1</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">Biểu tượng tín hiệu mạng sim 2</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">Biểu tượng mạng</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">Biểu tượng mạng lớn</string>\n    <string name=\"system_ui_status_bar_icon_location\">Vị trí</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">Báo thức</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">Chỉ hiển thị biểu tượng báo thức trước khi báo thức kêu</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d phút</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">Chế độ máy bay</string>\n    <string name=\"system_ui_status_bar_icon_vowifi\">Ẩn biểu tượng VoWiFi</string>\n    <string name=\"system_ui_status_bar_icon_headset\">Tai nghe</string>\n    <string name=\"system_ui_status_bar_icon_volume\">Tắt chuông</string>\n    <string name=\"system_ui_status_bar_icon_data_saver\">Tiết kiệm dữ liệu</string>\n    <string name=\"system_ui_status_bar_icon_zen\">Không làm phiền</string>\n    <string name=\"system_ui_status_bar_icon_stealth\">Ẩn biểu tượng Ẩn danh</string>\n    <string name=\"system_ui_status_bar_icon_mute\">Ẩn biểu tượng Tắt Mic</string>\n    <string name=\"system_ui_status_bar_icon_speakerphone\">Ẩn biểu tượng Loa ngoài</string>\n    <string name=\"system_ui_status_bar_icon_call_record\">Ẩn biểu tượng Ghi âm</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">Số lượng dấu chấm thông báo tối đa</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">Số lượng biểu tượng thông báo tối đa</string>\n    <string name=\"system_ui_status_bar_battery_percent\">Ẩn XXX% cạnh biểu tượng pin</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">Ẩn hậu tố (%) sau pin</string>\n    <string name=\"system_ui_status_bar_battery_charging\">Ẩn biểu tượng Sạc</string>\n    <string name=\"system_ui_status_bar_battery_icon\">Ẩn biểu tượng Pin</string>\n    <string name=\"system_ui_status_bar_battery_style_title\">Tuỳ chỉnh Pin</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">Chỉ số pin</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">Mạng di động</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">Đổi vị trí Wi-Fi và mạng di động</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">Tốc độ mạng</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">Âm thanh cảnh báo</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">Dừng sử dụng biểu tượng HD</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">Cần có phiên bản hệ thống mới hơn và một số kiểu máy có thể chưa cập nhật</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">Bộ tách tốc độ internet</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">Đường kẻ dọc giữa thời gian và tốc độ mạng không hiển thị trên thiết bị có màn hình giọt nước</string>\n    <string name=\"system_ui_status_bar_hide_icon\">Ẩn thanh trạng thái khi chụp ảnh màn hình</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">Biểu tượng mạng di động</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">Thời gian cập nhật tốc độ mạng</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">Cỡ chữ</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">Giá trị và đơn vị được hiển thị trong hàng kép</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">Hiển thị tốc độ mạng kép</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">Tốc độ tải lên và tải xuống được hiển thị trong hàng kép</string>\n    <string name=\"system_ui_statusbar_network_speed_swap_places\">Hoán đổi vị trí download và upload</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">Hiển thị tốc độ mạng đến và đi riêng biệt</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">Ẩn khi tốc độ mạng chậm</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_all\">Ẩn khi download và upload đều chậm</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">Chỉ báo không còn hiển thị khi tốc độ internet thấp</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">Mức độ chậm</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">Khi giá trị tốc độ mạng thấp hơn mức này, nó được coi là chậm và một số biểu tượng chỉ báo sẽ hiển thị các biểu tượng chỉ báo khác nhau</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">Ẩn hậu tố Byte trên giây (*b/s)</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">Biểu tượng chỉ báo</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">Mở tùy chỉnh</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_ms\">%d ms</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_s\">%d s</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_m\">%d m</string>\n    <string name=\"system_ui_statusbar_network_speed_format_KBs\">%d KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_oneKBs\">1 KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_Bs\">B/s</string>\n    <string name=\"system_ui_statusbar_network_speed_lux\">%s lux</string>\n    <string name=\"system_ui_statusbar_clock_mode\">Tùy chỉnh đồng hồ</string>\n    <string name=\"system_ui_statusbar_clock_editor\">Định dạng đồng hồ</string>\n    <string name=\"system_ui_statusbar_clock_year\">Hiển thị năm</string>\n    <string name=\"system_ui_statusbar_clock_month\">Hiện tháng</string>\n    <string name=\"system_ui_statusbar_clock_date\">Hiện ngày</string>\n    <string name=\"system_ui_statusbar_clock_week\">Hiện thứ</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">Hiện giờ kép</string>\n    <string name=\"system_ui_statusbar_clock_period\">Hiển thị SA CH</string>\n    <string name=\"system_ui_statusbar_clock_second\">Hiện giây</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">Ẩn khoảng cách</string>\n    <string name=\"system_ui_statusbar_clock_double\">Ngày giờ hàng đôi</string>\n    <string name=\"system_ui_statusbar_clock_double_mode_title\">Căn chỉnh hàng đôi</string>\n    <string name=\"system_ui_statusbar_clock_desc\">Ví dụ về định dạng đồng hồ</string>\n    <string name=\"system_ui_statusbar_clock_size\">Kích thước đồng hồ (0 là giá trị gốc)</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">Kích thước hàng đôi (0 là giá trị gốc)</string>\n    <string name=\"system_ui_statusbar_indicator_battery_title\">Về năng lượng</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">Về nhiệt độ</string>\n    <string name=\"system_ui_statusbar_battery_size\">Cỡ chữ</string>\n    <string name=\"system_ui_statusbar_battery_show\">Hiển thị nội dung</string>\n    <string name=\"system_ui_statusbar_temp_decimal_places\">Ẩn số thập phân</string>\n    <string name=\"system_ui_statusbar_battery_disable\">Ẩn đơn vị</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">Hiện thị bên phải</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">Luôn hiển thị cưởng độ dòng điện</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">Hiển thị 1 hàng</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">Đảo thứ tự</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">Chỉ hiển thị khi sạc</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">Thời gian làm mới thanh trạng thái</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">Sửa giới hạn nhiệt CPU</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">Nhập vào /sys/devices/virtual/thermal/thermal_zone*</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">Trung tâm</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">Làm tròn góc</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">Giới hạn hiển thị</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">Căn chỉnh theo chiều dọc</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">Màu sắc</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">Màu sắc khi pin đầy</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">Màu sắc khi pin yếu</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">Màu chế độ tiết kiệm pin</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">Màu khi sạc</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">Chiều cao</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">Lề ngang</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">Độ trong suốt</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">Tỏa sáng</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">Mức pin yếu</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">Chữ</string>\n    <string name=\"system_ui_controlcenter_title\">Trung tâm điều khiển</string>\n    <string name=\"system_ui_controlcenter_card_title\">Độ trong suốt nền thẻ bổ sung</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">Bảng điều khiển</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">Thông báo</string>\n    <string name=\"system_control_center_qs_detail_bg\">Độ trong suốt nền thẻ bổ sung</string>\n    <string name=\"system_control_center_5g_tile\">Nút bật 5G nhanh</string>\n    <string name=\"system_control_center_5g_toggle_label\">Mạng 5G</string>\n    <string name=\"system_control_center_sunshine_mode\">Chế độ ngoài trời</string>\n    <string name=\"system_ui_control_auto_close\">Nam Châm Tự Động Thu Gọn</string>\n    <string name=\"system_ui_control_auto_close_more\">Sau khi bật, bấm vào biểu tượng thanh trạng thái sẽ tự động thu gọn thanh trạng thái</string>\n    <string name=\"system_control_center_qs_tile_label\">Loại bỏ tiêu đề</string>\n    <string name=\"system_control_center_qs_rows\">Hàng</string>\n    <string name=\"system_control_center_qs_rows_format\">%d dòng</string>\n    <string name=\"system_control_center_qs_rows_horizontal\">Hàng (màn hình ngang)</string>\n    <string name=\"system_control_center_qs_columns\">Cột</string>\n    <string name=\"system_control_center_qs_columns_format\">%d Danh sách</string>\n    <string name=\"system_control_center_qs_columns_horizontal\">Cột (màn hình ngang)</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">Thẻ Mi Smart Play</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">Thẻ Mi Smart Hub</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">Thẻ Nhà thông minh</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">Giá trị mờ của nền</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">Thiết lập thông báo</string>\n    <string name=\"system_ui_control_center_notification_blur_fix\">Tối ưu hóa thông báo</string>\n    <string name=\"system_ui_control_center_notification_blur_fix_desc\">Chức năng thử nghiệm, chỉ khả dụng cho Android 13 trở lên. Sau khi bật, thông báo mờ ở một số khu vực sẽ được tối ưu hóa\\nCó thể gặp sự cố giao diện hệ thống trên một số thiết bị.</string>\n    <string name=\"system_ui_control_center_blur_radius\">Làm mờ nền thông báo nổi</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">Không có thông báo thả xuống</string>\n    <string name=\"system_ui_control_center_corner_radius\">Làm làm mờ các góc thông báo</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">Theme mặc định không cần chỉnh</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">Giá trị làm mờ nền</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">Độ trong suốt nền thanh thông báo kéo xuống</string>\n    <string name=\"system_ui_control_center_fix_media_control_panel\">Sửa nút điều chỉnh phương tiện</string>\n    <string name=\"system_ui_control_center_compact_notice\">Thu gọn thông báo</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">Giảm khoảng cách thông báo dọc</string>\n    <string name=\"system_ui_control_center_redirect_notice\">Chuyển hướng cài đặt thông báo</string>\n    <string name=\"system_ui_control_center_redirect_notice_desc\">Mở chuyển hướng cài đặt thông báo đích thay vì áp dụng cài đặt thông báo</string>\n    <string name=\"system_ui_control_center_show_weather\">Hiển thị thời tiết</string>\n    <string name=\"system_ui_control_center_show_weather_city\">Hiện thị thành phố</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">Tắt âm thông báo khi màn hình bật</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">Khi màn hình đang bật, thông báo không phát âm thanh</string>\n    <string name=\"system_ui_control_center_rounded_rect\">Ô hình chữ nhật bo tròn</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">Hoán đổi trung tâm điều khiển và ngăn thông báo</string>\n    <string name=\"system_ui_controlcenter_new_title\">Trung tâm điều khiển kiểu mới</string>\n    <string name=\"system_ui_controlcenter_old_title\">Trung tâm điều khiển kiểu cũ</string>\n    <string name=\"system_ui_controlcenter_unlock_old_title\">Mở khóa các kiểu trung tâm điều khiển</string>\n    <string name=\"system_ui_controlcenter_enable_title\">Tùy chỉnh số lượng hàng và cột</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">Nhãn sẽ bị ẩn khi hiển thị 5 dòng ở chế độ dọc và giới hạn 3 dòng ở chế độ ngang.</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">Hướng ngang sẽ có thêm một cột\\nNếu ROM của bạn có tùy chọn bố cục Phiên bản cũ, nó sẽ thêm một cột khác theo cả hai hướng</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">Một cột bổ sung sẽ được thêm vào hướng ngang</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">Hàng trong bảng thu gọn</string>\n    <string name=\"system_control_center_old_qs_grid_columns_horizontal\">Số hàng trong bảng thu gọn (màn hình ngang)</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">Kiểu ô Bluetooth</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">Ô Bluetooth được di chuyển đến khu vực ô mạng</string>\n    <string name=\"system_ui_other_title\">Khác</string>\n    <string name=\"system_ui_charge_animation_title\">Hiệu ứng sạc</string>\n    <string name=\"system_ui_charge_animation_style\">Hiệu ứng khi sạc</string>\n    <string name=\"system_ui_charge_animation_style_desc\">Lựa chọn hiệu ứng sạc màn hình khóa</string>\n    <string name=\"system_ui_origin_charge_animation\">Hiệu ứng sạc</string>\n    <string name=\"system_ui_another_title\">Khác</string>\n    <string name=\"system_ui_notification_freeform\">Kéo thanh thông báo của ứng dụng xuống để mở cửa sổ nổi</string>\n    <string name=\"system_ui_notification_freeform_desc\">Thông báo từ Mi Push có thể không được hỗ trợ</string>\n    <string name=\"system_ui_monet_title\">Monet</string>\n    <string name=\"system_ui_monet_overlay_custom\">Tùy chỉnh chủ đề</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">Tùy chỉnh màu chủ đề thay vì kéo chúng từ hình nền</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">Chọn màu chủ đề</string>\n    <string name=\"system_ui_volume_timer\">Hẹn giờ mở rộng</string>\n    <string name=\"system_ui_qs_label\">Chuyển đổi tab nhanh</string>\n    <string name=\"system_ui_notification_title\">Thông báo</string>\n    <string name=\"system_ui_other_notification_fix\">Vô hiệu hóa danh sách trắng</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">Làm mờ thanh âm lượng</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">Chỉ dành cho các mẫu Android12+ MTK, có thể có tải GPU cao</string>\n    <!--Settings-->\n    <string name=\"system_settings\">Cài đặt</string>\n    <string name=\"system_settings_international_build\">Cài đặt kiểu quốc tế</string>\n    <string name=\"system_settings_safe_wifi\">Xem mật khẩu WiFi đã lưu</string>\n    <string name=\"system_settings_safe_wifi_desc\">Xem tại: Cài đặt - WI-FI - Cài đặt nâng cao - Quản lý mạng đã lưu</string>\n    <string name=\"system_settings_wifipassword_btn_title\">Kiểm tra</string>\n    <string name=\"system_settings_wifi_password_label\">Mật khẩu</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">Chi tiết Wi-Fi</string>\n    <string name=\"system_settings_novelty_haptic_title\">Mở khóa phiên bản mới của Tab Chạm</string>\n    <string name=\"system_settings_novelty_haptic_desc\">Chỉ dành cho các thiết bị có Âm thanh &amp; Chạm - Tab Chạm</string>\n    <string name=\"system_settings_enable_pad_area\">Mở khóa khu vực máy tính bảng</string>\n    <string name=\"system_settings_enable_fold_area\">Mở khoá khu vực điện thoại gập</string>\n    <string name=\"system_settings_enable_area_desc\">Các thiết bị không được hỗ trợ sẽ khiến cài đặt bị lỗi sau khi được mở khóa</string>\n    <string name=\"system_settings_connection_sharing_title\">Kết nối &amp; Chia sẻ</string>\n    <string name=\"system_settings_new_nfc_page\">Trang NFC mới</string>\n    <string name=\"system_settings_new_nfc_page_desc\">Sau khi mở, ứng dụng thanh toán mặc định không được hỗ trợ không thể chọn Ví Xiaomi</string>\n    <string name=\"system_settings_accessibility_title\">Lối tắt cử chỉ</string>\n    <string name=\"system_settings_area_screenshot\">Mở khóa Chụp một phần màn hình</string>\n    <string name=\"system_settings_lab_title\">Tính năng đặc biệt</string>\n    <string name=\"system_settings_voip_assistant_controller\">Trợ lý VoIP</string>\n    <string name=\"system_settings_ai_image_title\">Công cụ hình ảnh AI</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">Mở khoá Siêu phân giải</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">Mở khóa Tăng cường hình ảnh AI và Tăng cường HDR AI</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">Mở khoá MEMC</string>\n    <string name=\"system_settings_permission_title\">Quyền</string>\n    <string name=\"system_settings_permission_show_app_up\">Quyền truy cập ứng dụng đặc biệt nhanh</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">Chuyển trực tiếp đến nơi cấp quyền của ứng dụng</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">Quyền cài đặt ứng dụng từ nguồn không xác định nhanh</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">Chuyển trực tiếp đến nơi cấp quyền của ứng dụng</string>\n    <string name=\"system_settings_develop_title\">Tùy chọn nhà phát triển</string>\n    <string name=\"system_settings_apps_freezer\">Hiển thị bắt buộc các ứng dụng bộ nhớ cache bị tạm dừng</string>\n    <string name=\"system_settings_apps_freezer_more\">Khi bật, bạn có thể tìm thấy tùy chọn này trong \\\"Tùy chọn nhà phát triển\\\", nhưng không đảm bảo tính khả dụng</string>\n    <string name=\"system_settings_develop_speed_mode\">Mở khoá Speed mode</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">Không hiển thị trên các máy không được hỗ trợ</string>\n    <string name=\"system_settings_window_animation_scale\">Tỷ lệ ảnh động cửa sổ</string>\n    <string name=\"system_settings_transition_animation_scale\">Tỷ lệ ảnh động chuyển tiếp</string>\n    <string name=\"system_settings_animator_duration_scale\">Tỷ lệ thời lượng ảnh động</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">Chủ đề</string>\n    <string name=\"theme_manager_version_code_modify\">Tắt phát hiện phiên bản MIUI</string>\n    <string name=\"theme_manager_diable_ads\">Vô hiệu quảng cáo</string>\n    <string name=\"theme_manager_diable_ads_desc\">Thay thế \\\"Có thể bạn thích\\\" quảng cáo bằng thẻ trống và loại bỏ hoàn toàn phần còn lại của quảng cáo</string>\n    <string name=\"theme_manager_crack\">Vá chủ đề</string>\n    <string name=\"theme_manager_enable_pad_theme\">Kích hoạt chủ đề Pad</string>\n    <string name=\"theme_manager_enable_fold_theme\">Kích hoạt chủ đề FOLD</string>\n    <!--Updater-->\n    <string name=\"updater\">Trình cập nhật</string>\n    <string name=\"updater_fuck_vab\">Xóa xác thực OTA</string>\n    <string name=\"updater_fuck_vab_desc\">Chỉ hỗ trợ sử dụng sê-ri VAB, vui lòng không mở sê-ri khác.\n- Không cần đủ điều kiện thử nghiệm nội bộ để sử dụng gói thử nghiệm nội bộ.\n- Những người có quyền thử nghiệm nội bộ sẽ không thể nhận được bản cập nhật thử nghiệm nội bộ và có thể được sử dụng để chặn cập nhật hệ thống.\n- Sau khi nâng cấp loại phiên bản khác nhau, bạn nên xóa dữ liệu.\n- Không hỗ trợ ROM không chính thức.</string>\n    <string name=\"updater_miui_version\">Giả mạo phiên bản cập nhật</string>\n    <string name=\"updater_miui_version_desc\">Chỉ sửa đổi bản cập nhật hệ thống, điều này có thể bảo vệ bản cập nhật hệ thống ở một mức độ nhất định</string>\n    <string name=\"updater_device\">Giả mạo thiết bị để cập nhật</string>\n    <string name=\"updater_device_desc\">Có thể được sử dụng để lấy các gói Rom cho các dòng máy khác, tính năng này cực kỳ nguy hiểm</string>\n    <!--Permissions-->\n    <string name=\"lbe\">Quyền</string>\n    <string name=\"clipboard\">Clipboard</string>\n    <string name=\"lbe_disable_clipboard_tip\">Bỏ quyền đọc ghi tạm</string>\n    <string name=\"lbe_clipboard_tip_toast\">Đọc clipboard bằng cách sử dụng gợi ý Toast</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">Ẩn hộp thoại và cho phép ứng dụng đọc clipboard theo mặc định</string>\n    <string name=\"lbe_clipboard_tip\">Đọc clipboard</string>\n    <!--Cast-->\n    <string name=\"milink\">Truyền</string>\n    <string name=\"milink_unlock_mishare\">Mở khóa Kết nối thiết bị</string>\n    <!--Always-on display-->\n    <string name=\"aod\">Màn hình Ambient</string>\n    <string name=\"aod_unlock_always_on_display\">Mở khóa Giới hạn thời gian</string>\n    <!--Taplus-->\n    <string name=\"content_extension\">Taplus</string>\n    <string name=\"content_extension_browser\">Sử dụng trình duyệt của bên thứ ba</string>\n    <string name=\"content_extension_browser_desc\">Làm cho Taplus không yêu cầu sử dụng trình duyệt MIUI, Cách mở liên kết để ở Mặc định</string>\n    <string name=\"content_extension_unlock_taplus_title\">Mở khoá Taplus</string>\n    <string name=\"content_extension_unlock_taplus_horizontal_title\">Cho phép sử dụng Taplus trên màn hình ngang</string>\n    <string name=\"content_extension_double_press\">Mở khoá Cử chỉ : 2 Ngón</string>\n    <string name=\"content_extension_super_image\">Mở khoá Chất lượng lưu hình ảnh : Siêu phân giải</string>\n    <string name=\"content_extension_super_image_summary\">Yêu cầu hỗ trợ cơ bản từ thiết bị</string>\n    <string name=\"content_extension_link_open_mode\">Cách mở liên kết</string>\n    <string name=\"content_extension_link_open_mode_desc\">Chọn trình duyệt để mở liên kết</string>\n    <!--Mi Canvas-->\n    <string name=\"creation\">Mi Canvas</string>\n    <string name=\"creation_unlock\">Xoá hạn chế sử dụng điện thoại di động</string>\n    <!--Gallery-->\n    <string name=\"gallery\">Thư viện</string>\n    <string name=\"gallery_enable_hdr_enhanced\">Mở khóa hiển thị Ultra Dynamic</string>\n    <string name=\"gallery_enable_pdf\">Mở khóa tạo PDF</string>\n    <string name=\"gallery_enable_ocr\">Mở khóa OCR</string>\n    <string name=\"gallery_enable_ocr_form\">Mở khóa bảng quét</string>\n    <string name=\"gallery_enable_id_photo\">Mở khóa ID</string>\n    <string name=\"gallery_enable_photo_movie\">Mở khóa Clip</string>\n    <string name=\"gallery_enable_video_post\">Mở khóa Hiệu ứng video</string>\n    <string name=\"gallery_enable_video_editor\">Mở khóa Chỉnh sửa video</string>\n    <string name=\"gallery_enable_text_yanhua\">Mở khóa Pháo hoa văn bản</string>\n    <string name=\"gallery_enable_remover_2\">Mở khóa Xóa vật thể</string>\n    <string name=\"gallery_enable_magic_matting\">Mở khóa Cắt</string>\n    <string name=\"gallery_enable_magic_sky\">Mở khóa Bầu trời</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">Bảo mật MIUI</string>\n    <string name=\"guard_provider_disable_upload_applist\">Ngăn tự động tải lên danh sách ứng dụng đã cài đặt</string>\n    <!--System launcher-->\n    <string name=\"home\">Trình khởi chạy hệ thống</string>\n    <string name=\"home_gesture\">Cử chỉ</string>\n    <string name=\"home_navigation_title\">Điều hướng</string>\n    <string name=\"home_navigation_back_area_height\">Chiều cao khu vực cử chỉ quay lại</string>\n    <string name=\"home_navigation_back_area_width\">Chiều rộng khu vực cử chỉ quay lại</string>\n    <string name=\"home_gesture_title2\">Cử chỉ</string>\n    <string name=\"home_gesture_mainscreen_title\">Màn hình chính</string>\n    <string name=\"home_gesture_gesture_title\">Cử chỉ toàn màn hình</string>\n    <string name=\"home_gesture_double_tap\">Nhấn đúp</string>\n    <string name=\"home_gesture_double_tap_desc\">Nhấn đúp vào bất kỳ đâu trên màn hình chính</string>\n    <string name=\"home_gesture_shake\">Lắc</string>\n    <string name=\"home_gesture_shake_desc\">Lắc thiết bị từ bất kỳ màn hình chính nào</string>\n    <string name=\"home_gesture_left_swipe\">Vuốt trái</string>\n    <string name=\"home_gesture_left_swipe_desc\">Vuốt sang trái trên Dock màn hình chính</string>\n    <string name=\"home_gesture_right_swipe\">Vuốt phải</string>\n    <string name=\"home_gesture_right_swipe_desc\">Trượt sang phải trên Dock màn hình chính</string>\n    <string name=\"home_gesture_up_swipe\">Vuốt lên</string>\n    <string name=\"home_gesture_up_swipe_desc\">Vuốt lên bằng một ngón tay trên bất kỳ màn hình chính</string>\n    <string name=\"home_gesture_down_swipe\">Vuốt xuống</string>\n    <string name=\"home_gesture_down_swipe_desc\">Vuốt xuống bằng một ngón tay trên bất kỳ màn hình chính</string>\n    <string name=\"home_gesture_up_swipe2\">Vuốt lên bằng hai ngón tay</string>\n    <string name=\"home_gesture_up_swipe2_desc\">Vuốt lên bằng hai ngón tay trên bất kỳ màn hình chính</string>\n    <string name=\"home_gesture_down_swipe2\">Vuốt xuống bằng hai ngón tay</string>\n    <string name=\"home_gesture_down_swipe2_desc\">Vuốt xuống bằng hai ngón tay trên bất kỳ chỗ nào ở màn hình chính</string>\n    <string name=\"home_gesture_pinch\">Chụm bằng hai ngón tay</string>\n    <string name=\"home_gesture_spread\">Vuốt 2 ngón tay</string>\n    <string name=\"home_gesture_swipe_and_stop\">Vuốt và dừng</string>\n    <string name=\"home_gesture_swipe_and_stop_desc\">Vuốt và dừng trên màn hình không phải màn hình chính</string>\n    <string name=\"home_gesture_multi_choose_app\">Chọn ứng dụng</string>\n    <string name=\"home_gesture_multi_choose_app_none\">None</string>\n    <string name=\"home_layout\">Bố cục</string>\n    <string name=\"home_layout_home_title\">Màn hình chính</string>\n    <string name=\"home_layout_hotseats_title\">Thanh dock</string>\n    <string name=\"home_layout_searchbar_title\">Thanh tìm kiếm</string>\n    <string name=\"home_layout_seek_points\">Chỉ báo trang</string>\n    <string name=\"home_layout_show_clock\">Hiển thị thời gian</string>\n    <string name=\"home_layout_show_clock_desc\">Trang chứa tiện ích đồng hồ luôn hiển thị thời gian</string>\n    <string name=\"home_layout_unlock_grids\">Mở khóa Bố cục</string>\n    <string name=\"home_layout_unlock_grids_desc\">Mở khóa giới hạn kích thước bố cục biểu tượng màn hình chính</string>\n    <string name=\"home_layout_unlock_grids_no_words\">Mở khóa bố cục (chế độ không từ)</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">Mở khóa giới hạn kích thước bố cục biểu tượng màn hình chính</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">Khoảng cách biểu tượng dock từ lề dưới màn hình</string>\n    <string name=\"home_layout_workspace_padding_top_desc\">Khoảng cách màn hình chính từ lề trên cùng của màn hình</string>\n    <string name=\"home_layout_hotseats_height\">Chiều cao</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">Khoảng cách thanh dưới cùng từ lề chỉ báo trang</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">Khoảng cách dock từ lề dưới màn hình</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">Khoảng cách thanh tìm kiếm từ lề dưới màn hình</string>\n    <string name=\"home_folder\">Thư mục</string>\n    <string name=\"home_small_folder_title\">Thư mục nhỏ</string>\n    <string name=\"home_big_folder_title\">Thư mục lớn</string>\n    <string name=\"home_small_folder_icon_bg\">Nền của biểu tượng</string>\n    <string name=\"home_small_folder_icon_bg_custom\">Tùy chỉnh nền</string>\n    <string name=\"home_small_folder_icon_bg_size\">Kích thước nền</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">Tùy chỉnh nền thư mục 2X1</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">Tùy chỉnh</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">Chiều rộng nền</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">Chiều cao nền</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">Tùy chỉnh nền thư mục 1X2</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">Tùy chỉnh</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">Chiều rộng nền</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">Chiều cao nền</string>\n    <string name=\"home_big_folder_icon_bg\">Tùy chỉnh nền XXL</string>\n    <string name=\"home_big_folder_icon_bg_custom\">Tùy chỉnh</string>\n    <string name=\"home_big_folder_icon_bg_width\">Chiều rộng nền</string>\n    <string name=\"home_big_folder_icon_bg_height\">Chiều cao nền</string>\n    <string name=\"home_big_folder_item_max_count\">Thư mục mở rộng</string>\n    <string name=\"home_big_folder_icon_bg_2x1_n\">Tùy chỉnh nền 4*2</string>\n    <string name=\"home_big_folder_icon_bg_1x2_n\">Tùy chỉnh nền 2*2</string>\n    <string name=\"home_big_folder_icon_bg_n\">Tùy chỉnh nền 3*3 &amp; 4*4</string>\n    <string name=\"home_auto_close_folder_title\">Tự động đóng thư mục</string>\n    <string name=\"home_auto_close_folder_summary\">Đóng thư mục của ứng dụng sau khi mở app bất kì</string>\n    <string name=\"home_wallpaper\">Nền</string>\n    <string name=\"home_wallpaper_blur\">Mờ nền</string>\n    <string name=\"home_enable_blur\">Kích hoạt làm mờ</string>\n    <string name=\"home_blur_radius_title\">Bán kính mờ</string>\n    <string name=\"home_folder_shade_title\">Lớp phủ màu</string>\n    <string name=\"home_folder_shade_summary\">Tăng giảm màu nền</string>\n    <string name=\"home_folder_shade_solid\">Nền tổng thể</string>\n    <string name=\"home_folder_shade_gradient\">Chỉ ở giữa</string>\n    <string name=\"home_folder_shade_level_title\">Cường độ màu</string>\n    <string name=\"home_folder_cols_title\">Số lượng sắp xếp thư mục</string>\n    <string name=\"home_folder_cols_format\">%d Danh sách</string>\n    <string name=\"home_folder_vertical_padding_title\">Khoảng cách ngang thư mục</string>\n    <string name=\"home_folder_width_title\">Sử dụng chiều rộng của toàn bộ thư mục</string>\n    <string name=\"home_folder_space_title\">Giảm lề</string>\n    <string name=\"home_folder_blur_title\">Làm mờ nền</string>\n    <string name=\"home_folder_anim_title\">Hoạt ảnh mở phản hồi</string>\n    <string name=\"home_folder_anim_1\">Tốc độ mở 1</string>\n    <string name=\"home_folder_anim_2\">Tốc độ mở 2</string>\n    <string name=\"home_folder_anim_3\">Tốc độ đóng 1</string>\n    <string name=\"home_folder_anim_4\">Tốc độ đóng 2</string>\n    <string name=\"home_drawer\">Ngăn ứng dụng</string>\n    <string name=\"home_drawer_all\">Xoá tab \\\"Tất cả\\\"</string>\n    <string name=\"home_drawer_all_desc\">Xoá tab \\\"Tất cả\\\"trong ngăn kéo</string>\n    <string name=\"home_drawer_editor\">Xoá nút \\\"Sửa\\\"</string>\n    <string name=\"home_drawer_editor_desc\">Xoá nút \\\"Sửa\\\" trong ngăn kéo</string>\n    <string name=\"home_drawer_blur\">Bật chế độ làm mờ Ngăn chứa ứng dụng</string>\n    <string name=\"home_drawer_blur_desc\">Vui lòng đặt độ trong suốt của nền ngăn kéo ứng dụng thành 100% để sử dụng tính năng này</string>\n    <string name=\"home_title\">Biểu tượng và tiêu đề</string>\n    <string name=\"home_title_icon_title\">Biểu tượng</string>\n    <string name=\"home_title_bigicon_title\">Siêu biểu tượng</string>\n    <string name=\"home_title_title_title\">Tiêu đề</string>\n    <string name=\"home_title_title_marquee\">Cuộn văn bản</string>\n    <string name=\"home_title_title_marquee_desc\">Tên ứng dụng quá dài sẽ được cuộn một dòng</string>\n    <string name=\"home_title_title_new_install\">Ứng dụng mới cài đặt Không hiển thị chấm thông báo</string>\n    <string name=\"home_title_drawer_font_hidden\">Ẩn tất cả tiêu đề ứng dụng</string>\n    <string name=\"home_title_drawer_font_hidden_more\">Tiêu đề ứng dụng trong ngăn kéo cũng sẽ bị ẩn, nếu không hãy điều chỉnh \\\"Kích thước chữ\\\" để sử dụng</string>\n    <string name=\"home_title_title_new_install_more\">Không hiển thị chấm thông báo trên biểu tượng ứng dụng khi cài đặt ứng dụng mới</string>\n    <string name=\"home_title_font_size\">Cỡ chữ</string>\n    <string name=\"home_title_title_color\">Màu sắc của tiêu đề</string>\n    <string name=\"home_title_animation_speed\">Tốc độ của hoạt ảnh</string>\n    <string name=\"home_title_big_icon_corner\">Bo tròn góc biểu tượng hình viên thuốc</string>\n    <string name=\"home_title_download_animation\">Hoạt ảnh tải về</string>\n    <string name=\"home_title_fix_animation\">Tối ưu hiệu ứng chuyển cảnh</string>\n    <string name=\"home_title_icon_scale\">Tỷ lệ biểu tượng</string>\n    <string name=\"home_title_disable_hide_file\">Không ẩn biểu tượng \\\"Tệp\\\"</string>\n    <string name=\"home_title_disable_hide_theme\">Không ẩn biểu tượng \\\"Theme\\\"</string>\n    <string name=\"home_title_custom_anim_param\">Tuỳ chỉnh thông số hoạt ảnh</string>\n    <string name=\"home_title_custom_anim_param_damping_title\">Giảm dần</string>\n    <string name=\"home_title_custom_anim_param_stiffness_title\">Độ gấp</string>\n    <string name=\"home_recent\">Gần đây</string>\n    <string name=\"home_recent_animation_speed\">Tốc độ của hoạt ảnh</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">Tắt làm mờ hình nền</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">Ẩn thanh trạng thái</string>\n    <string name=\"home_recent_hide_freeform\">Ẩn nút cửa sổ nổi</string>\n    <string name=\"home_recent_hide_clean_up\">Ẩn nút xóa</string>\n    <string name=\"home_recent_remove_icon\">Ẩn biểu tượng</string>\n    <string name=\"home_recent_modify_animation\">Sửa đổi hoạt ảnh vuốt</string>\n    <string name=\"home_recent_text\">Văn bản hiển thị khi không có tác vụ gần đây</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">Khoảng cách tên thẻ tác vụ</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">Bo góc thẻ tác vụ</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">Kích thước thẻ tác vụ ở ngang \\\"xoay dọc\\\"</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">Kích thước thẻ tác vụ ở ngang \\\"xoay ngang\\\"</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">Kích thước thẻ tác vụ dọc</string>\n    <string name=\"home_recent_text_size\">Kích thước tiêu đê ứng dụng</string>\n    <string name=\"home_recent_text_color\">Màu tiêu đề ứng dụng</string>\n    <string name=\"home_recent_freeform_background_color\">Màu nền cửa sổ nổi</string>\n    <string name=\"home_recent_show_real_memory\">Hiển thị trạng thái bộ nhớ</string>\n    <string name=\"home_recent_show_memory_info_sum\">Chỉ sử dụng cho máy tính bảng</string>\n    <string name=\"home_recent_show_memory_info\">Hiển thị thông tin bộ nhớ</string>\n    <string name=\"home_recent_always_show_clean_up\">Không ẩn nút xoá khi không có tác vụ</string>\n    <string name=\"home_widget\">Tiện ích</string>\n    <string name=\"home_widget_all_widget_animation\">Hoạt ảnh tiện ích</string>\n    <string name=\"home_widget_show_miui_widget\">Hiển thị tiện ích MIUI</string>\n    <string name=\"home_widget_show_miui_widget_desc\">Hiển thị tiện ích MIUI trên trang tiện ích Android</string>\n    <string name=\"home_widget_corner_radius\">Bo tròn góc tiện ích</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">Cho phép di chuyển tiện ích Android sang màn hình -1</string>\n    <string name=\"home_widget_hide_title\">Ẩn tiêu đề widget</string>\n    <string name=\"home_widget_resizable\">Xóa giới hạn kích thước tiện ích</string>\n    <string name=\"home_dock\">Thanh dock</string>\n    <string name=\"home_dock_bg_enable\">Thêm nền thanh Dock</string>\n    <string name=\"home_dock_bg_height\">Chiều cao</string>\n    <string name=\"home_dock_bg_height_desc\">Chiều cao Dock</string>\n    <string name=\"home_dock_bg_margin_horizontal\">Lề dọc</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Khoảng cách Dock từ các cạnh của màn hình</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Lề của Dock từ chỉ báo màn hình</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Lề của Dock từ dưới cùng của màn hình</string>\n    <string name=\"home_dock_icon_margin_bottom\">Biểu tượng lề dưới</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Khoảng cách biểu tượng dock từ lề dưới màn hình</string>\n    <string name=\"home_dock_bg_custom\">Mờ nền</string>\n    <string name=\"home_dock_icon_bottom_margin\">Khoảng cách biểu tượng từ lề dưới màn hình</string>\n    <string name=\"home_dock_margin_bottom\">Lề của chỉ báo trang từ cuối màn hình</string>\n    <string name=\"home_dock_unlock_hotseat\">Mở khóa giới hạn số biểu tượng thanh dock</string>\n    <string name=\"home_dock_fold\">Thanh dưới cùng kiểu thu nhỏ</string>\n    <string name=\"home_dock_hide_seekpoint\">Xóa chỉ báo trang</string>\n    <string name=\"home_dock_icon_title\">Hiển thị tiêu đề ứng dụng</string>\n    <string name=\"home_dock_disable_recents_icon\">Ẩn ứng dụng gần đây khỏi thanh Dock</string>\n    <string name=\"home_other\">Khác</string>\n    <string name=\"home_other_shortcut_title\">Phím tắt</string>\n    <string name=\"home_other_home_mode\">Chế độ máy tính</string>\n    <string name=\"home_other_infinite_scroll\">Cuộn vô tận</string>\n    <string name=\"home_other_infinite_scroll_desc\">Nhảy từ trang cuối lên trang đầu và ngược lại</string>\n    <string name=\"home_other_freeform_shortcut_menu\">Thêm nút cửa sổ nổi</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">Thêm menu cửa sổ nổi vào menu tắt</string>\n    <string name=\"home_other_tasks_shortcut_menu\">Thêm nút nhiệm vụ mới</string>\n    <string name=\"home_other_tasks_shortcut_menu_desc\">Thêm menu nhiệm vụ mới vào menu phím tắt</string>\n    <string name=\"home_other_user_present_animation\">Tối ưu hoạt ảnh mở khóa</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">Luôn làm mờ hình nền</string>\n    <string name=\"home_other_perfect_icon\">Ưu tiên biểu tượng hoàn hảo</string>\n    <string name=\"home_other_icon_mono_chrome\">Màu nền biểu tượng</string>\n    <string name=\"home_other_icon_monet_color\">Công cụ chọn màu monet</string>\n    <string name=\"home_other_use_edit_color\">Sửa màu</string>\n    <string name=\"home_other_your_color\">Chỉnh sửa màu sắc</string>\n    <string name=\"home_other_portrait_reverse\">Đảo ngược màn hình dọc</string>\n    <string name=\"home_other_shortcut_background_blur\">Làm mờ nền menu phím tắt</string>\n    <string name=\"home_other_blur_radius\">Bán kính làm mờ</string>\n    <string name=\"home_large_icon_corner_radius\">Các biểu tượng lớn với các góc tròn</string>\n    <string name=\"home_other_app_icon_hide\">Quản lý phím tắt trên màn hình</string>\n    <string name=\"home_other_toast_slide_again\">Không nhắc \\\"Vui lòng kéo lần nữa\\\"</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">Loại bỏ giới hạn phím tắt</string>\n    <string name=\"home_other_disable_hide_google\">Không ẩn biểu tượng Google</string>\n    <string name=\"home_other_fix_android_r_s\">Khắc phục sự cố tương thích khiến màn hình chuyển sang màu đen</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">Giá trị làm mờ menu phím tắt</string>\n    <string name=\"home_other_high_models\">Giả dạng thiết bị cao cấp</string>\n    <string name=\"home_recent_blur_level\">Làm mờ</string>\n    <string name=\"home_recent_complete_blur_plus\">Hoàn toàn làm mờ cộng</string>\n    <string name=\"home_recent_complete_blur\">Làm mờ hoàn toàn</string>\n    <string name=\"home_recent_test_blur\">Kiểm tra làm mờ</string>\n    <string name=\"home_recent_simple_blur\">Làm mờ đơn giản</string>\n    <string name=\"home_recent_none_blur\">Không làm mờ</string>\n    <string name=\"home_recent_none_blur_simple_anim\">Không làm mờ ( Hoạt ảnh đơn giản )</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_title\">Mở khóa thêm tùy chọn cho cài đặt desktop</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_desc\">Các chức năng mở khóa có thể không hoạt động và một số chức năng yêu cầu hỗ trợ hệ thống cơ bản</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">Chỉnh sửa thư viện</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">Mở khóa giới hạn cắt hình</string>\n    <string name=\"mediaeditor_filter_manager\">Mở khóa bộ lọc chính</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">Mi Share</string>\n    <string name=\"mishare_disable_mishare_auto_off\">Tắt tự động đóng Mi Share</string>\n    <string name=\"mishare_unlock_turbo_mode\">Mở khóa Gửi siêu nhanh</string>\n    <!--Wallpaper-->\n    <string name=\"miwallpaper\">Hình nền</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">Mở khoá Siêu hình nền</string>\n    <!--Package installer-->\n    <string name=\"package_installer\">Trình cài đặt gói</string>\n    <string name=\"miui_package_installer_modify\">Lọc trang</string>\n    <string name=\"miui_package_installer_safe_mode\">Chế độ thu gọn</string>\n    <string name=\"miui_package_installer_safe_mode_desc\">Buộc mở và khóa trạng thái bảo vệ</string>\n    <string name=\"miui_package_installer_disable_ad\">Tắt quảng cáo</string>\n    <string name=\"miui_package_installer_install_risk\">Tắt phát hiện rủi ro</string>\n    <string name=\"miui_package_installer_safe_model_tip\">Tắt quét bảo mật</string>\n    <string name=\"miui_package_installer_count_checking\">Tắt kiểm tra ứng dụng thường xuyên</string>\n    <string name=\"miui_package_installer_update_system_app\">Loại bỏ cảnh báo cài đặt ứng dụng hệ thống</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">Cho phép cài đặt ứng dụng hệ thống từ kênh không chính thống</string>\n    <string name=\"miui_package_installer_install_source\">Tùy chỉnh nguồn cài đặt</string>\n    <string name=\"miui_package_installer_apk_info\">Hiện thêm thông tin gói cài đặt</string>\n    <string name=\"miui_package_installer_apk_info_desc\">Hiện thông tin về ứng dụng được cài đặt</string>\n    <!--networkboost-->\n    <string name=\"various_disable_link_turbo_toast\">Ẩn LinkTurbo</string>\n    <string name=\"various_disable_link_turbo_toast_more\">Vui lòng khởi động lại NetworkBoost trong khởi động lại nhanh</string>\n    <!--nfc-->\n    <string name=\"nfc\">Dịch vụ NFC</string>\n    <string name=\"nfc_disable_sound\">Tắt tiếng</string>\n    <string name=\"nfc_allow_information_screen\">Cho phép phát hiện khi gần màn hình</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">App vault</string>\n    <string name=\"personal_assistant_widget_crack\">Vá widget</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Tiện ích Pad/Fold</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">Bật tiện ích kiểu Pad/Fold</string>\n    <string name=\"personal_assistant_overlap_mode\">Màn hình trợ lý thông minh kiểu Fold</string>\n    <string name=\"personal_assistant_blur_model\">Làm mờ nền trợ lý cá nhân</string>\n    <string name=\"personal_assistant_blur_value\">Kiểu nền</string>\n    <string name=\"personal_assistant_blurradius\">Giá trị làm mờ nền trợ lý cá nhân</string>\n    <string name=\"personal_assistant_color\">Màu trợ lý cá nhân</string>\n    <!--Music-->\n    <string name=\"music\">Âm nhạc</string>\n    <string name=\"music_disable_ad\">Loại bỏ quảng cáo</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">Pin và hiệu suất</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">Tùy chỉnh ứng dụng tốc độ làm mới cao</string>\n    <string name=\"powerkeeper_lock_max_fps\">Khoá FPS tối đa</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">Ngăn chặn tắt ứng dụng nền</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">Có thể tăng mức tiêu thụ điện năng</string>\n    <string name=\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\">Ngăn chặn khôi phục danh sách trắng của tối ưu hoá pin</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">Quay màn hình</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">Cho phép AOSP hỗ trợ ghi hình</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">Yêu cầu hỗ trợ phiên bản quay màn hình</string>\n    <string name=\"screen_recorder_config\">Mở khoá Tốc độ khung hình và Chất lượng Video cao</string>\n    <string name=\"screen_recorder_config_desc\">Vui lòng chọn phù hợp theo phần cứng</string>\n    <string name=\"screen_recorder_more_volume\">Mở khoá Nguồn âm thanh</string>\n    <string name=\"screen_recorder_more_volume_desc\">Một số phiên bản không hỗ trợ</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">Vị trí lưu quay màn hình Movies/ScreenRecorder</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">Chụp ảnh màn hình</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">Mở khóa Giới hạn cắt hình</string>\n    <string name=\"screenshot_unlock_privacy_marking_title\">Mở khóa Đánh dấu quyền riêng tư</string>\n    <string name=\"screenshot_unlock_privacy_marking_desc\">Cần cài đặt bản cao hơn của ứng dụng \\\"Mi AI Engine\\\"  để sử dụng</string>\n    <string name=\"screenshot_save_to_pictures_desc\">Vị trí lưu ảnh chụp màn hình /Pictures/Screenshots</string>\n    <string name=\"screenshot_device_customize_title\">Tuỳ chỉnh khung thiết bị</string>\n    <string name=\"screenshot_device_customize_desc\">Vui lòng nhập mã</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">Bảo mật</string>\n    <string name=\"security_center_pad\">Trung tâm bảo mật Tablet</string>\n    <string name=\"security_center_app_title\">Quản lý ứng dụng</string>\n    <string name=\"security_center_battery_title\">Pin và hiệu suất</string>\n    <string name=\"security_center_privacy_title\">Bảo vệ riêng tư</string>\n    <string name=\"security_center_beauty_title\">Trợ lý Camera trước</string>\n    <string name=\"security_center_bubble_and_freeform_title\">Bong bóng và cửa sổ nổi</string>\n    <string name=\"security_center_newbox_title\">Thanh bên</string>\n    <string name=\"security_center_dolby_open\">Tắt pop-up Dolby</string>\n    <string name=\"security_center_show_battery_temperature\">Hiển thị nhiệt độ pin</string>\n    <string name=\"security_center_ai_clipboard\">Bảo vệ khay nhớ tạm</string>\n    <string name=\"security_center_blur_location\">Độ chính xác định vị thấp hơn</string>\n    <string name=\"security_center_gms_open\">Dịch vụ Google</string>\n    <string name=\"security_center_flash_light\">Điều khiển độ sáng đèn pin</string>\n    <string name=\"security_center_flash_light_more\">Cho phép bạn điều khiển độ sáng của đèn pin bằng cách kéo thanh trượt độ sáng</string>\n    <string name=\"security_center_get_number\">Quản lý ứng dụng truy cập số điện thoại</string>\n    <string name=\"security_center_applock_pin_scramble\">Mã PIN khoá ứng dụng ngẫu nhiên</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">Thay đổi ngẫu nhiên thứ tự bàn phím mã PIN khóa ứng dụng</string>\n    <string name=\"security_center_beauty_light_auto\">Mở khóa Chỉnh độ sáng Flash tự động</string>\n    <string name=\"security_center_beauty_face\">Làm đẹp cho cuộc gọi video</string>\n    <string name=\"security_center_beauty_privacy\">Mở khóa Bảo mật máy ảnh</string>\n    <string name=\"security_center_beauty_pc\">Mở khóa Chân dung luôn ở giữa</string>\n    <string name=\"security_center_disable_root_check\">Tắt phát hiện rủi ro</string>\n    <string name=\"security_center_remove_macro_black_list\">Xóa danh sách đen combo tự động</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">Tắt thông báo \\\"Tìm thấy ứng dụng độc hại\\\"</string>\n    <string name=\"security_center_newbox_custom_enable\">Mở tùy chỉnh</string>\n    <string name=\"security_center_newbox_bg_custom\">Làm mờ nền</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">Lề ngang</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">Lề dọc</string>\n    <string name=\"security\">Bảo mật</string>\n    <string name=\"security_app_title\">Hiển thị thêm chi tiết ứng dụng</string>\n    <string name=\"security_app_summary\">Đã thêm thông tin chi tiết vào thông tin ứng dụng:\n- Số phiên bản ứng dụng\n- Đường dẫn APK\n- Đường dẫn dữ liệu\n- ID người dùng\n- Phiên bản SDK\n- Mở trang Cửa hàng Google Play\n- Khởi chạy</string>\n    <string name=\"security_app_sort_title\">Sắp xếp danh sách ứng dụng</string>\n    <string name=\"security_app_sort_summary\">Sửa đổi sắp xếp mặc định của danh sách ứng dụng</string>\n    <string name=\"security_restrict_app_title\">Quyền đầy đủ</string>\n    <string name=\"security_restrict_app_summary\">Cho phép cấu hình \\\"Tiết kiệm pin\\\" và \\\"Truy cập Wlan\\\" cho ứng dụng hệ thống</string>\n    <string name=\"security_disable_app_title\">Kiểm soát trạng thái ứng dụng</string>\n    <string name=\"security_disable_app_summary\">Cho phép tắt bất kỳ ứng dụng nào từ trang thông tin ứng dụng</string>\n    <string name=\"security_disable_app_url_title\">Áp dụng quản lý mở liên kết</string>\n    <string name=\"security_disable_app_url_summary\">Thay đổi \\\"Xóa mặc định\\\" thành \\\"Mở theo mặc định\\\" trong chi tiết ứng dụng</string>\n    <string name=\"app_link_open_always\">Cho phép ứng dụng mở đường liên kết được hỗ trợ</string>\n    <string name=\"app_link_open_never\">Không cho phép ứng dụng mở liên kết</string>\n    <string name=\"open_by_default\">Mở theo mặc định</string>\n    <string name=\"security_score\">Tắt tối ưu hóa kiểm tra sức khỏe</string>\n    <string name=\"security_score_summary\">Khóa 100 điểm và vô hiệu hóa tối ưu hóa</string>\n    <string name=\"security_center_skip_waiting_time\">Bỏ qua giới hạn đếm ngược</string>\n    <string name=\"security_center_skip_waiting_time_desc\">Bỏ qua thời gian đếm ngược chờ xác nhận cho tính năng không an toàn</string>\n    <string name=\"security_center_newbox_blur\">Làm mờ thanh bên</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">Xóa giới hạn ứng dụng bong bóng hội thoại</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">Ẩn cảnh báo pin yếu</string>\n    <string name=\"security_center_remove_low_battery_reminder_summary\">Khi pin dưới 20%, hộp thoại cảnh báo bật chế độ tiết kiệm pin không còn hiện lên nữa</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">Xóa cửa sổ bật lên ứng dụng đang mở</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">Gỡ pop-up \\\"Cho phép XXX mở XXX\\\"</string>\n    <string name=\"security_center_no_permission\">Quyền yêu cầu chưa được cấp</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">Mở khóa biểu mẫu tự do ẩn bên</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">Mở khóa cửa sổ nổi cho các thiết bị bị hạn chế nhưng được hỗ trợ cơ bản, điều này cũng sẽ ảnh hưởng đến hoạt động của cửa sổ nổi khi điện thoại được chuyển sang chế độ nền</string>\n    <string name=\"security_center_unlock_smart_charge_title\">Mở khóa \\\"Sạc Thông Minh\\\" và \\\"Tăng Tốc Độ Sạc\\\"</string>\n    <string name=\"security_center_super_wireless_charge\">Mở khóa Sạc không dây siêu nhanh</string>\n    <string name=\"security_center_blur_model\">Cài đặt nền Sidebar Global</string>\n    <string name=\"security_center_blurradius\">Độ mờ nền thanh bên</string>\n    <string name=\"security_center_color\">Màu nền thanh bên</string>\n    <string name=\"security_center_other_title\">Khác</string>\n    <string name=\"security_center_sidebar_line_color\">Tùy chỉnh màu Sidebar</string>\n    <string name=\"security_center_sidebar_line_color_default\">Màu Sidebar mặc định</string>\n    <string name=\"security_center_sidebar_line_color_dark\">Màu Sidebar chế độ tối</string>\n    <string name=\"security_center_sidebar_line_color_light\">Màu Sidebar chế độ sáng</string>\n    <string name=\"security_center_disable_ban\">Xóa nút báo cáo</string>\n    <string name=\"security_center_unlock_screen_time\">Hiển thị \\\"Màn hình\\\" trong pin</string>\n    <string name=\"security_center_unlock_screen_time_desc\">Hiển thị phần \\\"Màn hình\\\" trên cùng trong mục pin và các ứng dụng &amp; thời gian sử dụng</string>\n    <string name=\"security_center_unlock_gun_service\">Mở khoá Tâm súng ảo</string>\n    <string name=\"security_center_disable_remove_screen_hold_on\">Vô hiệu màn hình luôn sáng</string>\n    <string name=\"security_center_unlock_memc\">Mở khoá MEMC</string>\n    <string name=\"security_center_unlock_enhance_contours\">Mở khóa Tăng cường đường viền</string>\n    <string name=\"security_center_unlock_s_resolution\">Mở khóa Siêu phân giải</string>\n    <string name=\"security_center_hide_sidebar\">Ẩn sidebar</string>\n    <string name=\"security_center_leave_open\">Vuốt để mở ra</string>\n    <string name=\"security_center_disable_sidebar_show_suggest\">Tắt đề xuất ứng dụng</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">Thẻ thông minh</string>\n    <string name=\"tsmclient_auto_nfc\">NFC tự động</string>\n    <string name=\"tsmclient_auto_nfc_desc\">NFCtự động kích hoạt khi mà thẻ đang được chạm, và tự động tắt khi kết thúc</string>\n    <string name=\"tsmclient_nfc_turning_on\">Tự động bật NFC……</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">Bật NFC theo cách thủ công</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">Tự động bật NFC không thành công</string>\n    <!--Weather-->\n    <string name=\"weather\">Thời tiết</string>\n    <string name=\"weather_device_level_title\">Tốc độ của hoạt ảnh</string>\n    <string name=\"weather_device_level_title_low\">Thấp</string>\n    <string name=\"weather_device_level_title_middle\">Trung bình</string>\n    <string name=\"weather_device_level_title_high\">Cao</string>\n    <!--AI Translate-->\n    <string name=\"aiasst\">Mi AI Translate</string>\n    <string name=\"aiasst_ai_captions\">Mở khoá Phụ đề AI</string>\n    <string name=\"aiasst_ai_captions_desc\">Chỉ có thể nhận dạng và dịch được tiếng Trung và tiếng Anh</string>\n    <!--Barrage-->\n    <string name=\"barrage\">Barrage</string>\n    <string name=\"barrage_any_barrage\">Cho phép tất cả ứng dụng sử dụng barrage</string>\n    <string name=\"barrage_custom_barrage_length\">Tùy chỉnh độ dài barrage</string>\n    <!--Joyose-->\n    <string name=\"joyose\">Trí tuệ xuất sắc</string>\n    <string name=\"joyose_cloud_control_title\">Kiểm soát đám mây</string>\n    <string name=\"joyose_disable_cloud_control\">Tắt kiểm soát đám mây</string>\n    <string name=\"joyose_game_title\">Không gian trò chơi</string>\n    <string name=\"joyose_enable_gpu_tuner\">Bật Cài đặt GPU</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">Sau khi bật, các cài đặt liên quan đến GPU của trò chơi nằm ở giữa dưới cùng của \\\"Không gian trò chơi\\\"</string>\n    <!--GetApps-->\n    <string name=\"market\">GetApps</string>\n    <string name=\"market_device_modify\">Giả mạo thiết bị thành</string>\n    <string name=\"market_device_modify_desc\">Mẫu thiết bị được ngụy trang là Xiaomi 13 Ultra</string>\n    <string name=\"market_disable_new_icon\">Không sử dụng biểu tượng bên thứ ba</string>\n    <string name=\"market_disable_new_icon_desc\">Không thêm biểu tượng ra màn hình Desktop</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">Mở khóa MIUI+</string>\n    <!--Mi Settings-->\n    <string name=\"mi_settings\">Cài đặt Mi</string>\n    <string name=\"mi_input_settings\">Input settings</string>\n    <string name=\"mi_settings_show_fps\">Thêm tùy chọn tần số quét</string>\n    <string name=\"mi_settings_show_fps_desc\">Module mở khóa tất cả tốc độ làm mới theo mặc định, không đảm bảo hoạt động</string>\n    <!--MTB-->\n    <string name=\"mtb\">MTB</string>\n    <string name=\"mtb_auth\">Bỏ xác thực MTB</string>\n    <string name=\"mtb_auth_desc\">Đây là một tính năng có rủi ro cao, bất kỳ vấn đề nào phát sinh từ việc này sẽ do người dùng chịu, vui lòng sao lưu baseband của bạn cẩn thận. Nhập *#*#MODEMTEST#*#* trên giao diện quay số để mở Cài đặt MTB</string>\n    <!--Scanner-->\n    <string name=\"scanner\">Máy quét</string>\n    <string name=\"scanner_card\">Mở khóa Scan danh thiếp</string>\n    <string name=\"scanner_translation\">Mở khóa Phiên dịch</string>\n    <string name=\"scanner_ocr\">Mở khóa OCR</string>\n    <string name=\"scanner_document\">Mở khóa Scan tạo file PDF</string>\n    <string name=\"scanner_excel\">Mở khóa Scan tạo file Excel XLSM </string>\n    <string name=\"scanner_ppt\">Mở khoá Scan tạo file PowerPoint PPT</string>\n    <string name=\"scanner_doc_ppt\">Mở khóa Scan chữ</string>\n    <!--Other-->\n    <string name=\"various\">Khác</string>\n    <string name=\"notes\">Ghi chú</string>\n    <string name=\"share_center\">Mi Smart Hub</string>\n    <string name=\"new_task\">Tác vụ mới</string>\n    <string name=\"custom_hook\">Tùy chỉnh</string>\n    <string name=\"app_version_not_supported\">Phiên bản không hỗ trợ</string>\n    <string name=\"various_location_simulation_title\">Giả vị trí</string>\n    <string name=\"various_dialog_title\">Hộp thoại</string>\n    <string name=\"various_mipad_title\">MiPad</string>\n    <string name=\"various_open_aosp_something_title\">Tính năng ẩn</string>\n    <string name=\"various_open_aosp_something_desc\">Mở giao diện AOSP \\\"tính năng ẩn\\\"</string>\n    <string name=\"settings_notfication_importance\">Hiện thông báo quan trọng</string>\n    <string name=\"various_no_overscroll\">Disable out-of-bounds bounce</string>\n    <string name=\"various_disable_bluetooth_restrict\">Ngăn Bluetooth bị tắt tạm thời</string>\n    <string name=\"various_disable_access_device_logs\">Bỏ qua thông báo yêu cầu truy cập nhật ký thiết bị</string>\n    <string name=\"various_unlock_ime\">Mở khóa IME</string>\n    <string name=\"various_unlock_ime_desc\">Sau khi mở, vui lòng kiểm tra phương thức nhập liệu tương ứng trong trình quản lý Xposed</string>\n    <string name=\"various_collapse_miui_title\">Tiêu đề MIUI</string>\n    <string name=\"various_collapse_miui_title_desc\">Điều chỉnh tiêu đề thanh trên cùng trong ứng dụng MIUI</string>\n    <string name=\"various_disable_folder_cantuse\">Xóa hạn chế một số thư mục không chọn được</string>\n    <string name=\"various_super_clipboard_title\">Super Clipboard</string>\n    <string name=\"various_unlock_super_clipboard\">Mở khoá Super Clipboard</string>\n    <string name=\"various_super_clipboard_summary\">Super clipboard là clipboard hỗ trợ sao chép tập tin/văn bản\nHãy đảm bảo rằng các ứng dụng hệ thống có siêu dữ liệu is_support_miui_super_clipboard, tính năng này sẽ không khả dụng nếu không có</string>\n    <string name=\"various_super_clipboard_picture_desc\">Cho phép sao chép ảnh vào clipboard</string>\n    <string name=\"various_super_clipboard_files_desc\">Cho phép sao chép tập tin vào clipboard</string>\n    <string name=\"various_open_aosp_battery_title\">Tối ưu hóa pin</string>\n    <string name=\"various_open_aosp_notification_title\">Cài đặt thông báo</string>\n    <string name=\"various_open_aosp_app_manage_title\">Quản lý ứng dụng</string>\n    <string name=\"various_open_aosp_language_title\">Cài đặt ngôn ngữ</string>\n    <string name=\"various_open_aosp_extremely_dark_title\">Siêu tối</string>\n    <string name=\"various_mipad_input_title\">Nhập</string>\n    <string name=\"various_mipad_input_close_magic_title\">Không có con trỏ ảo</string>\n    <string name=\"various_mipad_input_close_magic_desc\">Biến con trỏ MIUI tròn thành con trỏ AOSP.</string>\n    <string name=\"various_mipad_input_restore_esc_title\">Khôi phục chức năng ESC</string>\n    <string name=\"various_mipad_input_restore_esc_desc\">Khôi phục chức năng ESC được mặc định vào \\\"Back\\\" Hoạt động trên MIUI.</string>\n    <string name=\"various_mipad_input_disable_bluetooth_title\">Bỏ hạn chế bluetooth bút Stylus</string>\n    <string name=\"various_mipad_input_disable_bluetooth_desc\">Cho phép tất cả bút Stylus hoạt động mà không cần kết nối bluetooth với bút stylus gốc.</string>\n    <string name=\"various_mipad_input_bluetooth_version_title\">Phiên bản trình điều khiển</string>\n    <string name=\"various_mipad_input_bluetooth_version_desc\">Phiên bản trình điều khiển bỏ hạn chế bluetooth trên bút Stylus</string>\n    <string name=\"various_mipad_input_ingore_gesture_title\">Bỏ qua cử chỉ nút bút Stylus</string>\n    <string name=\"various_mipad_input_ingore_gesture_desc\">Bỏ qua cử chỉ nhấn và giữ trên các nút bút Stylus</string>\n    <string name=\"various_mipad_input_need_finger_num_title\">Thay đổi số ngón cho cử chỉ</string>\n    <string name=\"various_mipad_input_need_finger_num_desc\">Thay đổi cử chỉ chụp màn hình, Cử chỉ chụp màn hình một phần, Cử chỉ chia đôi màn hình bằng 4 ngón, Cử chỉ chuyển ứng dụng bằng 3 ngón</string>\n    <string name=\"custom_background_blur_enabled\">Làm mờ nền</string>\n    <string name=\"custom_background_blur_radius\">Bán kính mờ</string>\n    <string name=\"custom_background_color\">Màu nền</string>\n    <string name=\"custom_background_color_alpha\">Độ trong suốt của màu nền</string>\n    <string name=\"custom_background_corner_radius\">Nền góc bo tròn</string>\n    <string name=\"custom_blur_enabled\">Làm mờ nền</string>\n    <string name=\"various_blur_radius\">Bán kính mờ</string>\n    <string name=\"various_background_corner_radius\">Nền góc bo tròn</string>\n    <string name=\"various_background_alpha\">Độ trong suốt của hình nền</string>\n    <string name=\"various_background_color\">Màu nền</string>\n    <string name=\"various_dialog_window_blur_title\">Độ mờ</string>\n    <string name=\"various_dialog_gravity\">Mở trong một cửa sổ bật lên</string>\n    <string name=\"various_dialog_margin_horizontal\">Cửa sổ bật lên lề dọc</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">Khoảng cách giữa cửa sổ bật lên và các cạnh của màn hình</string>\n    <string name=\"various_dialog_margin_bottom\">Cửa sổ bật lên lề dưới</string>\n    <string name=\"various_dialog_margin_bottom_desc\">Khoảng cách từ cửa sổ bật lên đến cuối màn hình</string>\n    <string name=\"various_dialog_window_blur\">Mờ cửa sổ</string>\n    <string name=\"various_dialog_window_blur_radius\">Bán kính làm mờ cửa sổ</string>\n    <string name=\"location_data_title\">Cơ sở dữ liệu</string>\n    <string name=\"various_location_simulation_1_title\">Nhiệm vụ 1</string>\n    <string name=\"various_location_simulation_2_title\">Nhiệm vụ 2</string>\n    <string name=\"various_location_simulation_3_title\">Nhiệm vụ 3</string>\n    <string name=\"various_location_simulation_all_title\">Vũ trụ</string>\n    <string name=\"location_simulation_package_name\">Tên gói tin</string>\n    <string name=\"location_simulation_location\">Vị trí</string>\n    <string name=\"location_simulation_location_custom\">Chọn vị trí</string>\n    <string name=\"location_simulation_network\">Mạng</string>\n    <string name=\"location_simulation_operator_fix\">Sửa lỗi giả trang tàu sân bay</string>\n    <string name=\"location_simulation_mac\">Địa chỉ Mac</string>\n    <string name=\"location_simulation_wifi\">WIFI</string>\n    <string name=\"location_simulation_router_mac\">Địa chỉ Mac Router</string>\n    <string name=\"location_simulation_work_title\">Tiêu đề</string>\n    <string name=\"location_simulation_work_offset\">Chênh lệch</string>\n    <string name=\"location_simulation_work_base_station\">Trạm cơ sở</string>\n    <string name=\"location_simulation_work_longitude_latitude\">Vĩ độ và kinh độ</string>\n    <string name=\"location_simulation_work_remarks\">Nhận xét</string>\n    <string name=\"app_details_playstore\">Mở bằng cửa hàng ứng dụng</string>\n    <string name=\"app_details_launch\">Khởi chạy</string>\n    <string name=\"app_details_nolaunch\">Ứng dụng chưa đặt khởi chạy mặc định</string>\n    <string name=\"app_details_apk_file\">Đường dẫn APK</string>\n    <string name=\"app_details_apk_version_code\">Số phiên bản ứng dụng</string>\n    <string name=\"app_details_data_path\">Đường dẫn dữ liệu</string>\n    <string name=\"app_details_app_uid\">ID người dùng</string>\n    <string name=\"app_details_sdk\">Phiên bản đích SDK</string>\n    <string name=\"app_details_min_sdk\">Phiên bản tối thiểu SDK</string>\n    <string name=\"disable_app_settings\">Đây là một ý tưởng tệ!</string>\n    <string name=\"disable_app_title\">Bạn có chắc muốn tắt ứng dụng này?</string>\n    <string name=\"disable_app_text\">Nếu đây là ứng dụng hệ thống cần thiết, tắt nó có thể gây ra nguy hiểm</string>\n    <string name=\"disable_app_fail\">Thất bại khi đổi trạng thái ứng dụng</string>\n    <string name=\"unlimited\">Không giới hạn</string>\n    <string name=\"calls\">Cuộc gọi</string>\n    <string name=\"system_volume\">Hệ thống</string>\n    <string name=\"notification_volume\">Thông báo</string>\n    <string name=\"freeform_notification\">Thông báo cửa sổ nổi</string>\n    <string name=\"share_app\">Chia sẻ với các ứng dụng bên thứ ba</string>\n    <string name=\"show_newmods_title\">Đánh dấu module mới</string>\n    <string name=\"default_volume_stream_ring\">Nhạc chuông</string>\n    <string name=\"default_volume_stream_media\">Đa phương tiện</string>\n    <string name=\"default_volume_stream_tip\">Thông báo</string>\n    <string name=\"open_with_test_picture\">Hình ảnh</string>\n    <string name=\"open_with_test_audio\">Âm thanh</string>\n    <string name=\"open_with_test_media\">Video</string>\n    <string name=\"open_with_test_doc\">Tài liệu</string>\n    <string name=\"open_with_test_zip\">Tập tin</string>\n    <string name=\"open_with_test_all\">Tất cả</string>\n    <string name=\"location_custom\">Tùy chỉnh</string>\n    <string name=\"operator_fix_none\">Không sữa chữa</string>\n    <string name=\"operator_fix_1\">Cách 1</string>\n    <string name=\"operator_fix_2\">Phương pháp 2 (khuyên dùng)</string>\n    <string name=\"custom_hook_new\">Thêm Hook</string>\n    <string name=\"custom_hook_mode\">Chọn chế độ</string>\n    <string name=\"cemiuiler_notice\">Kéo thanh trạng thái xuống để hiển thị đồng thời các công tắc phím tắt và thông báo hệ thống</string>\n    <string name=\"cemiuiler_restart_quick\">Phạm vi khởi động lại nhanh</string>\n    <string name=\"location_add\">Thêm</string>\n    <string name=\"location_delete\">Xóa</string>\n    <!--Tip-->\n    <string name=\"tip_0\">Mẹo: Đây là một số mẹo!</string>\n    <string name=\"tip_1\">Mẹo: Bạn có thể hỗ trợ chúng tôi bằng cách quyên góp : Giới thiệu - Tài trợ.</string>\n    <string name=\"tip_2\">Mẹo: Bạn muốn liên hệ với nhà phát triển? Telegram@Sevtinge_PM_bot Hoặc Bilibili@绀漓丨Sevtinge.</string>\n    <string name=\"tip_3\">Mẹo: Bạn muốn tham gia nhóm chính thức? Telegram@cemiuiler Hoặc tìm 247909573 trong QQ.</string>\n    <string name=\"tip_4\">Mẹo: Cemiuiler = Ceiler + MIUI, Ceiler = Ceil + er.</string>\n    <string name=\"tip_5\">Mẹo: Đoán xem bạn phải xem lại mẹo này bao nhiêu lần nữa?</string>\n    <string name=\"tip_6\">Mẹo: Làm cho MIUI tuyệt vời trở lại!</string>\n    <string name=\"tip_7\">Mẹo: Chào mừng bạn theo dõi trên Github@sevtinge Hoặc Bilibili@绀漓丨Sevtinge.</string>\n    <string name=\"tip_8\">Mẹo: Sevtinge là con trai hay con gái?</string>\n    <string name=\"tip_9\">Mẹo: Tin tức Sanjiang: Chuyến tàu GL3625 bị mất tích được tìm thấy vào lúc 5 giờ sáng ngày 7 tháng 4 năm 1404 trên chuyến Haimen-Jincheng xuất phát từ Haimen đến Jincheng của công ty vận tải đường sắt Har-Jincheng, toa thứ 13 đã biến mất một cách bí ẩn.</string>\n    <string name=\"tip_10\">Mẹo: Sanjiang news: Sevtinge được xác nhận đã ngồi trên toa thứ 13 của đoàn tàu GL3625.</string>\n    <string name=\"tip_11\">Mẹo: Sanjiang news: Người dân cho biết họ đã quen với việc đoàn tàu GL3625 biến mất.</string>\n    <string name=\"tip_12\">Mẹo: Bạn có biết? Trong thực tế, Tất cả Mẹo là vô nghĩa.</string>\n    <string name=\"tip_13\">Mẹo: Bạn có biết? Sinh nhật của Cemiuiler vào ngày 1/5, sinh nhật của Sevtinge vào ngày 2/2.</string>\n    <string name=\"tip_14\">Mẹo: Sevtinge học tại Trường Đại học công nghệ thông tin Shanhe tại Thành Phố Sanjiang.</string>\n    <string name=\"tip_15\">Mẹo: Tôi nghe nói Sevtinge có hai dạng phát hành khác nhau.</string>\n    <string name=\"tip_16\">Mẹo: Sevtinge là một con cáo!</string>\n    <string name=\"tip_17\">Mẹo: Ling Qiqi có hai nhân cách, một là catgirl, hai là loli (x</string>\n    <string name=\"tip_18\">Mẹo: Cemiuiler là ứng dụng tiêu hao pin nhanh nhất</string>\n    <string name=\"tip_19\">Mẹo: Nếu không có chú thích đặc biệt cho chức năng chuyển sang màu xám, điều đó có nghĩa là chức năng đó không bình thường và nó không được lên kế hoạch mở cho người dùng trong thời điểm hiện tại</string>\n    <string name=\"tip_20\">Mẹo: Đừng chạy theo phiên bản Canary nếu bạn không có việc gì làm và đừng vội cập nhật nếu nó bị hỏng (</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/strings.xml",
    "content": "<resources>\n    <!--Xposed 模块简介-->\n    <string name=\"xposed_description\">Make MIUI Great Again!</string>\n\n    <string name=\"new_permission_wifi_state_desc\">用于xxx</string>\n    <string name=\"new_permission_location_desc\">用于提供经纬度等服务</string>\n    <string name=\"new_cta_agree_desc\">在使用过程中，为了为您提供更多功能，我们可能会向您申请 Root/Su 权限。您可随时前往权限管理调整所有权限的授权情况，Root/Su 权限请前往您的 Root/Su 管理器进行管理.</string>\n    <string name=\"new_cta_app_main_purpose\">修改系统应用</string>\n    <string name=\"new_cta_app_all_purpose_title\">欢迎使用 Cemiuiler，本应用依赖 Xposed 框架运行，你可以使用本应用劫持并修改其他受支持的应用以实现 MIUI 增强功能。在使用过程中，为了为您提供更多功能，我们可能会向您申请 Root/Su 权限。您可随时前往您的 Root/Su 管理器进行管理。</string>\n    <!--Cemiuiler 设置/关于页-->\n    <string name=\"language\">简体中文</string>\n    <string name=\"translator\">绀漓 | Sevtinge</string>\n    <string name=\"translator_url\">https://github.com/sevtinge</string>\n\n    <string name=\"settings\">设置</string>\n    <string name=\"about\">关于</string>\n    <string name=\"about_use\">引用</string>\n    <string name=\"about_use_desc\">Cemiuiler 使用了以下开源项目的部分或全部内容，感谢这些项目的开发者提供的大力支持（排名顺序不分先后）</string>\n    <string name=\"about_contributer\">贡献者</string>\n    <string name=\"about_contributer_desc\">感谢以下贡献者为 Cemiuiler 的开发提供了不同程度的帮助（排名顺序不分先后）</string>\n    <string name=\"about_donation\">支持</string>\n    <string name=\"about_donation_desc\">您可以在此处捐赠以支持我们</string>\n\n    <string name=\"settings_data_title\">备份与恢复</string>\n    <string name=\"settings_bug_title\">故障排查</string>\n    <string name=\"settings_debug_title\">调试模式</string>\n    <string name=\"settings_hide_app_icon\">桌面图标</string>\n    <string name=\"settings_icon\">设置图标</string>\n    <string name=\"settings_icon_desc\">设置模块入口在系统设置中的位置</string>\n    <string name=\"settings_icon_disable\">禁用</string>\n    <string name=\"settings_icon_top\">顶部</string>\n    <string name=\"settings_icon_medium\">中部</string>\n    <string name=\"settings_icon_down\">底部</string>\n    <string name=\"settings_icon_mode\">图标样式</string>\n    <string name=\"settings_icon_miui_14\">圆角矩形样式</string>\n    <string name=\"settings_icon_miui_13\">背景镂空样式</string>\n    <string name=\"settings_reboot\">重启作用域</string>\n    <string name=\"settings_back\">备份模块配置</string>\n    <string name=\"settings_rest\">恢复模块配置</string>\n    <string name=\"settings_reset\">重置模块配置</string>\n    <string name=\"reset_title\">确定要重置吗？</string>\n    <string name=\"reset_desc\">重置模块配置后其所有数据将会被删除！</string>\n    <string name=\"reset_okay\">已重置模块配置</string>\n    <string name=\"backup_success\">备份成功</string>\n    <string name=\"backup_failed\">备份失败</string>\n    <string name=\"rest_title\">恢复</string>\n    <string name=\"rest_success\">恢复成功</string>\n    <string name=\"rest_failed\">恢复失败</string>\n    <string name=\"backup_ask\">您是否要写入备份？</string>\n    <string name=\"backup_permission\">\"现在您必须手动启用此选项的权限。</string>\n    <string name=\"rest_ask\">您是否要恢复备份？</string>\n    <string name=\"rest_permission\">\"现在您必须手动启用此选项的权限。</string>\n    <string name=\"disable_detailed_log\">禁用详细日志输出</string>\n    <string name=\"disable_detailed_log_desc\">重启以应用更改</string>\n    <string name=\"settings_safe_mode\">安全模式</string>\n    <string name=\"settings_safe_mode_desc\">停用模块功能</string>\n\n    <string name=\"about_developer_title\">开发者</string>\n    <string name=\"about_translator_title\">译者</string>\n    <string name=\"about_chat_title\">讨论</string>\n    <string name=\"about_other_title\">其他</string>\n    <string name=\"about_qq_group\">QQ 群</string>\n    <string name=\"about_qq_channel\">QQ 频道</string>\n    <string name=\"about_tg_group\">Telegram 群组</string>\n    <string name=\"about_tg_channel\">Telegram 频道</string>\n    <string name=\"about_github\">项目地址</string>\n    <string name=\"about_github_desc\">本项目基于 AGPL-3.0 协议开源</string>\n    <string name=\"about_offical\">官方网站</string>\n    <string name=\"about_crwd\">翻译</string>\n    <string name=\"about_crwd_desc\">帮助我们将应用翻译为您的语言</string>\n    <string name=\"about_privacy\">隐私政策</string>\n    <string name=\"about_protocol\">用户协议</string>\n    <!--弹窗/miuix 部分-->\n    <string name=\"soft_reboot\">重启 </string>\n    <string name=\"restart_app_desc\">确定要立即重启%1$s吗？</string>\n    <string name=\"tip\">提示</string>\n    <string name=\"hook_failed\">模块暂未激活，请检查 Xposed 管理器是否启用，如有请重启或重新优化模块</string>\n    <string name=\"kill_failed\">结束进程失败，请检查是否为 Cemiuiler 授予了 Root/Su 权限?</string>\n    <string name=\"pid_failed\">目标应用未运行，不需要重启。</string>\n    <string name=\"reboot_failed\">重启失败，请检查是否为 Cemiuiler 授予了 Root/Su 权限?</string>\n\n    <string name=\"expand_button_title\">高级</string>\n    <string name=\"not_set\">未设置</string>\n    <string name=\"copy\">复制</string>\n    <string name=\"more\">更多</string>\n    <string name=\"clearable_edittext_clear_description\">清空</string>\n\n    <string name=\"preference_on\">已开启</string>\n    <string name=\"preference_off\">已关闭</string>\n    <string name=\"preference_copied\">已将 %1$s 复制到剪贴板。</string>\n    <string name=\"preference_default_value_text\">默认</string>\n    <string name=\"preference_dialog_color_picker_default_title\">选择颜色</string>\n    <string name=\"preference_dialog_color_picker_presets\">预置颜色</string>\n    <string name=\"preference_dialog_color_picker_custom\">自定义颜色</string>\n    <string name=\"preference_dialog_color_picker_transparency\">透明度</string>\n    <string name=\"preference_dialog_color_picker_select\">确认选择</string>\n\n    <string name=\"abc_action_bar_home_description\">转到首页</string>\n    <string name=\"abc_action_bar_up_description\">转到上一层级</string>\n    <string name=\"actionbar_button_up_description\">返回</string>\n    <string name=\"appcompat_action_mode_select_all\">全选</string>\n    <string name=\"appcompat_action_mode_inverse\">反选</string>\n    <string name=\"appcompat_cancel_description\">取消</string>\n    <string name=\"appcompat_confirm_description\">确认</string>\n    <string name=\"appcompat_select_all_description\">全选</string>\n    <string name=\"appcompat_deselect_all_description\">全不选</string>\n    <string name=\"appcompat_delete_description\">删除</string>\n    <string name=\"appcompat_search_action_mode_cancel\">取消</string>\n    <string name=\"appcompat_search_input_description\">搜索</string>\n    <string name=\"appcompat_actionbar_immersion_button_more_description\">更多</string>\n    <string name=\"color_picker_alpha_text_transparent\">不透明度</string>\n    <string name=\"color_picker_tab_grid\">网格取色</string>\n    <string name=\"color_picker_tab_slider\">滑块取色</string>\n    <string name=\"color_picker_view_page_text_hue\">色相</string>\n    <string name=\"color_picker_view_page_text_lightness\">亮度</string>\n    <string name=\"color_picker_view_page_text_saturation\">饱和度</string>\n    <!--字符串复用-->\n    <string name=\"top_margin\">顶部边距</string>\n    <string name=\"bottom_margin\">底部边距</string>\n    <string name=\"left_margin\">左侧间距</string>\n    <string name=\"right_margin\">右侧间距</string>\n    <string name=\"vertical_offset\">上下偏移量</string>\n    <string name=\"horizontal_alignment\">水平对齐</string>\n\n    <string name=\"feature\">功能</string>\n    <string name=\"recommend\">推荐</string>\n    <string name=\"editor\">编辑</string>\n    <string name=\"record\">录像</string>\n    <string name=\"shot\">拍照</string>\n    <string name=\"portrait\">人像</string>\n    <string name=\"camera_pro\">专业</string>\n    <string name=\"enable\">启用</string>\n    <string name=\"custom_enable\">启用自定义</string>\n    <string name=\"search\">搜索</string>\n    <string name=\"floating_window\">小窗</string>\n    <string name=\"save_to_screen_title\">规范保存位置</string>\n\n    <string name=\"system_ui_statusbar_indicator_default_title\">常规</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">扩展</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">固定宽度</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">防止相邻元素左右抖动</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">加粗</string>\n    <!--多列表 Array-->\n    <string name=\"array_close\">关闭</string>\n    <string name=\"array_default\">默认</string>\n    <string name=\"array_align_left\">左侧</string>\n    <string name=\"array_align_right\">右侧</string>\n    <string name=\"array_align_center\">居中</string>\n    <string name=\"array_netspeedicons_no\">无图标</string>\n\n    <string name=\"array_bold\">加粗</string>\n    <string name=\"array_theme\">跟随主题</string>\n    <string name=\"array_clock_center\">时钟居中</string>\n    <string name=\"array_clock_right\">时钟居右</string>\n    <string name=\"array_clock_center_and_icon_left\">时钟居中且图标居左</string>\n\n    <string name=\"array_clock_default\">预设</string>\n    <string name=\"array_clock_geek\">极客</string>\n\n    <string name=\"array_battery_both\">两者</string>\n    <string name=\"array_battery_power\">仅功率</string>\n    <string name=\"array_battery_current\">仅电流</string>\n    <string name=\"array_battery_temp\">电池温度</string>\n    <string name=\"array_cpu_temp\">CPU 温度</string>\n\n    <string name=\"array_global_actions_none\">无动作</string>\n    <string name=\"array_global_actions_notif\">打开通知中心</string>\n    <string name=\"array_global_actions_eqs\">展开快速设置面板</string>\n    <string name=\"array_global_actions_lock\">锁屏</string>\n    <string name=\"array_global_actions_sleep\">熄屏</string>\n    <string name=\"array_global_actions_screenshot\">截屏</string>\n    <string name=\"array_global_actions_menu\">打开菜单</string>\n    <string name=\"array_global_actions_recents\">打开最近任务</string>\n    <string name=\"array_global_actions_volume\">打开音量对话框</string>\n    <string name=\"array_global_actions_volume_up\">提高音量</string>\n    <string name=\"array_global_actions_volume_down\">降低音量</string>\n    <string name=\"array_global_actions_launch\">启动应用</string>\n    <string name=\"array_global_actions_launch_choose\">选择应用</string>\n    <string name=\"array_global_actions_shortcut\">启动快捷方式</string>\n    <string name=\"array_global_actions_activity\">启动活动</string>\n    <string name=\"array_global_actions_toggle\">切换功能</string>\n    <string name=\"array_global_actions_back\">切换到上一个应用</string>\n    <string name=\"array_global_actions_forceclose\">强制关闭当前应用</string>\n    <string name=\"array_global_actions_powermenu\">打开电源菜单</string>\n    <string name=\"array_global_actions_powermenu_short\">电源菜单</string>\n    <string name=\"array_global_actions_clear_memory\">清理内存</string>\n    <string name=\"array_global_actions_invert_colors\">颜色反转</string>\n    <string name=\"array_global_actions_switchkeyboard\">切换键盘</string>\n    <string name=\"array_global_actions_goback\">返回</string>\n    <string name=\"array_global_actions_onehanded_left\">单手模式 (左)</string>\n    <string name=\"array_global_actions_onehanded_right\">单手模式 (右)</string>\n    <string name=\"array_global_actions_scrolltotop\">回到顶部</string>\n    <string name=\"array_global_actions_expandsidebar\">展开侧边栏</string>\n    <string name=\"array_global_actions_floatingwindow\">迷你小窗</string>\n    <string name=\"array_global_actions_pinningwindow\">窗口贴边</string>\n\n    <string name=\"array_align_top\">顶部</string>\n    <string name=\"array_align_bottom\">底部</string>\n\n    <string name=\"array_discrete\">分离</string>\n    <string name=\"array_gradual\">缓慢</string>\n    <string name=\"array_rainbow\">彩虹</string>\n\n    <string name=\"various_install_app_info_version_name\">版本名称</string>\n    <string name=\"various_install_app_info_version_code\">版本代码</string>\n    <string name=\"various_install_app_info_sdk\">支持SDK</string>\n    <string name=\"various_install_app_size\">应用大小</string>\n\n    <string name=\"charge_animation_entries_disable\">禁用</string>\n    <string name=\"charge_animation_entries_aura\">光韵</string>\n    <string name=\"charge_animation_entries_stream\">流光</string>\n    <string name=\"charge_animation_entries_alpha\">律动</string>\n\n    <string name=\"status_bar_icon_mode_default\">默认</string>\n    <string name=\"status_bar_icon_mode_on\">始终显示</string>\n    <string name=\"status_bar_icon_mode_off\">始终隐藏</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">仅在未连接时隐藏</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">仅在响铃前显示</string>\n\n    <string name=\"seek_points_roll\">仅在滑动屏幕时显示</string>\n    <string name=\"seek_points_edit\">仅在编辑模式中显示</string>\n\n    <string name=\"home_mode_day\">浅色模式</string>\n    <string name=\"home_mode_dark\">深色模式</string>\n\n    <string name=\"dialog_gravity_medium\">居中</string>\n    <string name=\"dialog_gravity_down\">底部</string>\n\n    <string name=\"collapse_miui_title_off\">折叠</string>\n    <string name=\"collapse_miui_title_on\">展开</string>\n    <string name=\"collapse_miui_title_off_always\">始终折叠</string>\n    <string name=\"collapse_miui_title_on_always\">始终展开</string>\n\n    <string name=\"link_open_mode_default\">系统默认</string>\n    <string name=\"link_open_mode_mi\">小米浏览器</string>\n\n    <string name=\"app_sort_running\">默认排序</string>\n    <string name=\"app_sort_name\">应用名称</string>\n    <string name=\"app_sort_frequency\">使用频率</string>\n    <string name=\"app_sort_storage\">存储占用</string>\n    <string name=\"app_sort_install\">安装时间</string>\n\n    <string name=\"array_bluetooth_tile_style_3rows\">三排大磁贴</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\">一大和二小磁贴</string>\n\n    <string name=\"array_pa_blur_official\">官方自带模糊</string>\n    <string name=\"array_bpa_blur_customize\">自定义背景模糊</string>\n\n    <string name=\"control_center_sunshine_mode_default\">关闭</string>\n    <string name=\"control_center_sunshine_mode_one\">系统默认模式</string>\n    <string name=\"control_center_sunshine_mode_two\">强制最高亮度</string>\n    <!--系统框架-->\n    <string name=\"system_framework\">系统框架</string>\n    <string name=\"system_framework_volume_title\">音量</string>\n    <string name=\"system_framework_other_title\">其他</string>\n    <string name=\"system_framework_display_title\">显示</string>\n    <string name=\"system_framework_phone_title\">网络</string>\n\n    <string name=\"system_framework_bubble_title\">气泡通知</string>\n    <string name=\"system_framework_freeform_count\">多小窗</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">强制允许小窗</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">忽略系统黑名单与软件禁用小窗</string>\n    <string name=\"system_framework_freeform_sticky\">记住状态</string>\n    <string name=\"system_framework_freeform_bubble\">小窗气泡</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">将所有小窗转为迷你小窗</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">在最近任务中将所有小窗转为迷你小窗显示\\n此功能为实验性功能，具有较高不稳定性</string>\n    <string name=\"system_framework_freeform_jump\">跳转应用使用小窗打开</string>\n    <string name=\"system_framework_freeform_title_desc\">在下列场景中，需要跳转至其他应用时将使用小窗打开</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">仅支持链接</string>\n\n    <string name=\"system_framework_default_volume_stream\">默认调整音量</string>\n    <string name=\"system_framework_volume_first_press\">音量即时调整</string>\n    <string name=\"system_framework_volume_separate_control\">音量独立控制</string>\n    <string name=\"system_framework_volume_disable_safe\">移除高音量安全限制</string>\n    <string name=\"system_framework_volume_separate_slider\">通知音量滑块</string>\n    <string name=\"system_framework_volume_media_steps\">媒体音量阶数</string>\n    <string name=\"system_framework_volume_media_steps_desc\">可能会导致音量条的滚动卡顿或蓝牙音量异常</string>\n    <string name=\"system_framework_volume_steps\">音量级数倍增</string>\n\n    <string name=\"system_ui_display_cutout_title\">屏幕缺口</string>\n    <string name=\"system_ui_display_hide_cutout\">隐藏屏幕缺口</string>\n    <string name=\"system_ui_display_brightness_title\">亮度</string>\n    <string name=\"system_ui_display_auto_brightness\">自动亮度范围</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">定义自动亮度的最小值和最大值</string>\n    <string name=\"system_ui_display_min_brightness\">最小亮度</string>\n    <string name=\"system_ui_display_max_brightness\">最大亮度</string>\n    <string name=\"system_ui_display_toast_times_title\">显示时长调整</string>\n    <string name=\"system_ui_display_toast_times_desc\">修改 Toast 显示时长，显示时长始终大于 1 秒</string>\n\n    <string name=\"system_framework_phone_network_title\">网络设置</string>\n    <string name=\"phone_double_5g_nr\">双卡 5G (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">双卡同时使用 5G 网络 (卡 2 仅支持 NSA)</string>\n    <string name=\"phone_double_5g_sa\">双卡 SA (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">实验性功能。使卡 2 支持 SA</string>\n    <string name=\"system_framework_phone_band_title\">频段设置</string>\n    <string name=\"phone_n1\">解锁 N1 频段</string>\n    <string name=\"phone_n1_desc\">支持 N1 频段 (NR)</string>\n    <string name=\"phone_n28\">解锁 N28 频段</string>\n    <string name=\"phone_n28_desc\">支持 N28 频段 (NR)</string>\n    <string name=\"phone_n5_n8\">解锁 N5/N8 频段</string>\n    <string name=\"phone_n5_n8_desc\">在拨号界面输入 *#*#65686633#*#* 以打开 N5/N8 频段，若显示 \\\"enable N5 and N8 Mode\\\"，则开启成功</string>\n\n    <string name=\"system_framework_screen_all_rotations\">屏幕旋转</string>\n    <string name=\"system_framework_allow_untrusted_touch\">允许不受信任的触摸操作</string>\n    <string name=\"system_framework_allow_uninstall\">允许卸载部分预装 APP</string>\n    <string name=\"system_framework_allow_uninstall_desc\">该功能具有一定危险性</string>\n    <string name=\"system_framework_disable_app_link_verify\">禁用应用链接验证</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">打开链接时恢复为直接打开支持的应用，无需在应用设置中勾选支持的链接</string>\n    <string name=\"system_framework_clean_share_menu\">清理分享菜单</string>\n    <string name=\"system_framework_clean_share_apps\">已选应用</string>\n    <string name=\"system_framework_clean_share_apps_desc\">选中的应用将不会出现在分享菜单内</string>\n    <string name=\"system_framework_clean_open_menu\">清理打开方式菜单</string>\n    <string name=\"system_framework_clean_open_apps\">已选应用</string>\n    <string name=\"system_framework_clean_open_apps_desc\">选中的应用将不会出现在打开方式菜单内</string>\n    <string name=\"system_other_flag_secure\">允许截屏</string>\n    <string name=\"system_other_flag_secure_desc\">允许对任意应用进行截屏和录屏</string>\n    <string name=\"system_other_delete_on_post_notification\">移除上层显示通知</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">移除 \\\"此应用正显示在屏幕上其他应用的上层\\\" 通知</string>\n    <string name=\"system_framework_share_menu_test\">分享菜单测试</string>\n    <string name=\"system_framework_open_with_menu_test\">打开方式菜单测试</string>\n    <string name=\"system_framework_other_use_original_animation\">过渡动画使用原生样式</string>\n    <string name=\"system_framework_other_speed_install\">快速安装</string>\n    <string name=\"system_framework_other_speed_install_desc\">安装至运行内存以提升安装速度，需要系统底层支持</string>\n    <string name=\"system_framework_other_thermal_brightness\">禁止自动降低屏幕亮度</string>\n    <string name=\"system_framework_other_thermal_brightness_more\">仅限非温控导致的自动降低屏幕亮度</string>\n    <string name=\"system_framework_other_disable_cleaner\">禁止杀后台应用</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">实验性功能，可能导致运行内存占用异常</string>\n    <string name=\"system_framework_disable_72h_verify\">禁用每 72 小时验证锁屏密码</string>\n    <!--核心破解-->\n    <string name=\"system_framework_corepatch_title\">包管理服务</string>\n    <string name=\"system_framework_core_patch_downgr\">允许降级安装应用</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">允许应用在安装新版本的情况下直接覆盖安装旧版本</string>\n    <string name=\"system_framework_core_patch_auth_creak\">禁用软件包管理器签名验证</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">关闭安装应用时的签名验证，可以安装被篡改的应用</string>\n    <string name=\"system_framework_disable_integrity\">禁用系统完整性校验</string>\n    <string name=\"system_framework_disable_integrity_desc\">禁止自动恢复被篡改的内容，开启 \\\"禁用软件包管理器签名验证\\\" 功能时将默认启用。</string>\n    <string name=\"system_framework_core_patch_digest_creak\">禁用 APK 签名验证</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">允许直接覆盖安装同包名不同签名的应用</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">安装时始终使用已安装应用的签名</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">该功能极度危险，仅在绝对需要时启用</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">增强模式</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">可以解决一些应用内部的完整性校验，一般不需要开启</string>\n    <!--浏览器-->\n    <string name=\"browser\">浏览器</string>\n    <string name=\"browser_debug_mode\">解锁开发者选项</string>\n    <string name=\"browser_debug_mode_desc\">不支持 17.5.xxxxx 及以上版本</string>\n    <!--相机-->\n    <string name=\"camera\">相机</string>\n    <string name=\"camera_features_unlock_aiwatermark\">解锁 AI 水印</string>\n    <string name=\"camera_features_unlock_ambilight\">解锁长曝光</string>\n    <string name=\"camera_features_unlock_clone\">解锁魔法分身</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">解锁化妆镜</string>\n    <string name=\"camera_features_unlock_doc\">解锁文档</string>\n    <string name=\"camera_features_unlock_idcard\">解锁身份证拍摄</string>\n    <string name=\"camera_features_unlock_dualcam\">解锁前后双景</string>\n    <string name=\"camera_features_unlock_duration\">解锁延时摄影</string>\n    <string name=\"camera_features_unlock_milive\">解锁短视频</string>\n    <string name=\"camera_features_unlock_moon\">解锁超级月亮</string>\n    <string name=\"camera_features_unlock_pano\">解锁全景</string>\n    <string name=\"camera_features_unlock_pixel\">解锁超分辨率模式</string>\n    <string name=\"camera_features_unlock_portrait\">解锁人像</string>\n    <string name=\"camera_features_unlock_slow\">解锁慢动作</string>\n    <string name=\"camera_features_unlock_videosky\">解锁 Video-sky</string>\n    <string name=\"camera_features_unlock_vlog\">解锁 Vlog</string>\n    <string name=\"camera_features_unlock_vlog_pro\">解锁 Vlog Pro</string>\n    <string name=\"camera_features_unlock_film\">解锁电影镜头</string>\n    <string name=\"camera_features_unlock_film_delay\">解锁长曝光延时</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">解锁滑动变焦</string>\n    <string name=\"camera_features_unlock_film_dream\">解锁平行梦境</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">解锁慢快门</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">解锁时光倒流</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">解锁时间静止</string>\n    <string name=\"camera_shot_hand_gesture\">解锁手势拍照</string>\n    <string name=\"camera_shot_color_enhance\">解锁艳丽模式</string>\n    <string name=\"camera_shot_makeup\">解锁妆容</string>\n    <string name=\"camera_shot_makeup_desc\">仅在使用前置摄像头时生效</string>\n    <string name=\"camera_record_60fps\">解锁 60FPS</string>\n    <string name=\"camera_record_60fps_desc\">部分画质下不可用，部分设备硬件不支持</string>\n    <string name=\"camera_record_120fps\">解锁 120FPS</string>\n    <string name=\"camera_record_120fps_desc\">仅 4K 模式支持, 部分设备硬件不支持</string>\n    <string name=\"camera_record_audio_zoom\">解锁音源变焦</string>\n    <string name=\"camera_record_hdr\">解锁 HDR</string>\n    <string name=\"camera_record_ai\">解锁 AI 模式</string>\n    <string name=\"camera_portrait_new_beauty\">解锁新版美颜</string>\n    <string name=\"camera_portrait_new_beauty_desc\">仅在使用前置摄像头时生效</string>\n    <string name=\"camera_portrait_cvlens\">解锁大师镜头</string>\n    <string name=\"camera_portrait_cvlens_desc\">部分设备无法正常工作</string>\n    <string name=\"camera_pro_raw\">解锁 RAW</string>\n    <string name=\"camera_pro_log\">解锁 LOG</string>\n    <string name=\"camera_settings_heic\">解锁 HEIF 格式</string>\n    <string name=\"camera_settings_track_focus\">解锁万物追焦</string>\n    <string name=\"camera_settings_predictive\">解锁运动抓拍</string>\n    <string name=\"camera_settings_nevus\">解锁祛痣</string>\n    <string name=\"camera_settings_men_makeup\">解锁男性妆容适配</string>\n    <string name=\"camera_settings_lab_options\">启用实验室选项</string>\n    <string name=\"camera_settings_track_eyes\">解锁人眼追焦</string>\n    <!--时钟-->\n    <string name=\"clock\">时钟</string>\n    <string name=\"clock_enable_hour_glass\">解锁计时器沙漏动画</string>\n    <string name=\"clock_enable_hour_glass_desc\">不支持 13.65.0 及以上版本</string>\n    <!--文件管理-->\n    <string name=\"fileexplorer\">文件管理</string>\n    <string name=\"file_explorer_can_selectable\">文件夹名称允许长按选择操作</string>\n    <string name=\"file_explorer_is_single_line\">文件夹名称以单行显示</string>\n    <!--电话-->\n    <string name=\"incallui\">电话</string>\n    <string name=\"incallui_hide_crbt\">隐藏电话彩铃</string>\n    <string name=\"incallui_answer_in_head_up\">从浮动通知接听电话时不进入全屏</string>\n    <!--短信-->\n    <string name=\"mms\">短信</string>\n    <string name=\"mms_disable_ad\">禁用推广</string>\n    <string name=\"mms_disable_ad_desc\">移除屏幕下方快捷按钮与短信内容下方推广</string>\n    <!--电话服务-->\n    <string name=\"phone\">电话服务</string>\n    <string name=\"phone_smart_dual_sim\">解锁智能双卡切换</string>\n    <string name=\"phone_vice_slot_volte\">副卡 VoLTE 通话时可联网</string>\n    <string name=\"phone_vice_slot_volte_desc\">在副卡通话时将会将数据切换至副卡</string>\n    <!--下载管理程序-->\n    <string name=\"downloads\">下载管理程序</string>\n    <string name=\"various_fuck_xlDownload\">阻止创建 .xlDownload 文件夹</string>\n    <string name=\"various_fuck_xlDownload_desc\">防止下载管理程序在内部存储的根目录上生成 .xlDownload 文件夹</string>\n    <!--系统界面-->\n    <string name=\"system_ui\">系统界面</string>\n    <string name=\"system_ui_lockscreen_title\">锁屏</string>\n    <string name=\"system_ui_lockscreen_safe_title\">安全</string>\n    <string name=\"system_ui_lockscreen_ui_title\">界面</string>\n    <string name=\"system_ui_lockscreen_information_title\">信息</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">乱序 PIN</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">随机更改 PIN 键盘顺序</string>\n    <string name=\"system_ui_lock_screen_password_free\">开机免输入密码</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">需要设备未启用加密才会生效</string>\n    <string name=\"system_ui_lock_screen_password_free_tip\">当前设备已加密，此功能不可用</string>\n    <string name=\"system_ui_lock_screen_default_theme\">仅支持默认主题</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">锁屏底部显示充电信息</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">显示详细电流</string>\n    <string name=\"system_ui_lock_screen_show_battery_temperature\">显示电池温度</string>\n    <string name=\"system_ui_lock_screen_show_spacing\">显示刷新间隔</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">隐藏相机</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">隐藏负一屏</string>\n    <string name=\"system_ui_lock_screen_current\">当前电流</string>\n    <string name=\"system_ui_lock_screen_show_second\">时钟显示秒数</string>\n    <string name=\"system_ui_lock_screen_blur_button\">相机和负一屏按钮背景模糊</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">时钟强制使用系统字体</string>\n    <string name=\"system_ui_lock_screen_double_lock\">双击锁屏</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">双击空白位置锁屏</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">隐藏勿扰模式通知</string>\n    <string name=\"system_ui_lock_screen_unlock_tip_title\">隐藏屏幕底部解锁提示</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">锁屏时隐藏状态栏</string>\n\n    <string name=\"system_ui_navigation_title\">导航栏</string>\n    <string name=\"system_ui_navigation_handle_title\">手势提示线</string>\n    <string name=\"system_ui_hide_navigation_bar\">隐藏手势提示线</string>\n    <string name=\"system_ui_hide_navigation_bar_more\">请重启系统桌面和系统界面两个作用域</string>\n    <string name=\"system_ui_navigation_handle_custom\">自定义手势提示线</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">高度</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">竖屏宽度</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">横屏宽度</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">粗细</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">浅色背景下颜色</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">深色背景下颜色</string>\n    <string name=\"system_ui_navigation_custom\">自定义导航栏</string>\n    <string name=\"system_ui_navigation_custom_height\">竖屏导航栏高度</string>\n    <string name=\"system_ui_navigation_custom_height_land\">横屏导航栏高度</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">竖屏导航栏框架高度</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">横屏导航栏框架高度</string>\n\n    <string name=\"system_ui_statusbar_title\">状态栏</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">图标</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">网速指示器</string>\n    <string name=\"system_ui_statusbar_clock_title\">时钟指示器</string>\n    <string name=\"system_ui_statusbar_device_title\">硬件指示器</string>\n    <string name=\"system_ui_statusbar_layout_title\">布局</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_title\">兼容模式</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_desc\">对所有异形屏强制开启完整屏布局</string>\n    <string name=\"system_ui_statusbar_layout_mode_title\">布局模式</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">双击状态栏锁屏</string>\n\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">双排移动网络图标</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">图标样式</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">图标缩放</string>\n\n    <string name=\"system_ui_status_bar_mobile_type_single\">移动网络类型图标单独显示</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">显示在信号左侧</string>\n    <string name=\"system_ui_status_bar_mobile_type_only_show_network\">仅显示上网卡</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">隐藏移动网络活动指示器</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">自定义文本内容</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">字体大小</string>\n\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">交换电池图标与百分比位置</string>\n    <string name=\"system_ui_status_bar_battery_style_font_size\">电量百分比字体大小</string>\n    <string name=\"system_ui_status_bar_battery_style_font_mark_size\">电量百分比符号字体大小</string>\n    <string name=\"system_ui_status_bar_battery_style_vertical_offset\">电量百分比符号上下偏移量</string>\n\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">WIFI</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">蓝牙</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">移动网络</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">位置信息</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">状态图标</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">通知图标</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">电池</string>\n    <string name=\"system_ui_statusbar_iconmanage_call_title\">通话</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">图标左侧显示</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">图标右侧显示</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">WIFI 图标</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">辅助 WIFI 图标</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">WIFI 标准</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">WIFI 热点</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">网络活动指示器</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">蓝牙</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">蓝牙电量</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">新 HD 图标</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">小 HD 图标</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">大 HD 图标</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">无 SIM 卡图标</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">SIM 卡 1 信号图标</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">SIM 卡 2 信号图标</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">显示逻辑</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">大网络类型图标</string>\n    <string name=\"system_ui_status_bar_icon_location\">位置信息</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">闹钟</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">仅在闹钟响铃前显示闹钟图标</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d 小时</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">飞行模式</string>\n    <string name=\"system_ui_status_bar_icon_vowifi\">隐藏 VoWiFi 图标</string>\n    <string name=\"system_ui_status_bar_icon_headset\">耳机</string>\n    <string name=\"system_ui_status_bar_icon_volume\">音量</string>\n    <string name=\"system_ui_status_bar_icon_data_saver\">流量节省</string>\n    <string name=\"system_ui_status_bar_icon_zen\">勿扰模式</string>\n    <string name=\"system_ui_status_bar_icon_stealth\">隐藏隐身模式图标</string>\n    <string name=\"system_ui_status_bar_icon_mute\">隐藏麦克风静音图标</string>\n    <string name=\"system_ui_status_bar_icon_speakerphone\">隐藏免提图标</string>\n    <string name=\"system_ui_status_bar_icon_call_record\">隐藏录音图标</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">通知省略点数最大数量</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">通知图标最大数量</string>\n    <string name=\"system_ui_status_bar_battery_percent\">隐藏电量百分比</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">隐藏电量百分比符号</string>\n    <string name=\"system_ui_status_bar_battery_charging\">隐藏充电指示器</string>\n    <string name=\"system_ui_status_bar_battery_icon\">隐藏电池图标</string>\n    <string name=\"system_ui_status_bar_battery_style_title\">电池自定义</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">电量指示器</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">WIFI</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">移动网络</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">交换 WIFI 与移动网络</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">网速</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">声音情景</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">强制使用新 HD 图标</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">仅支持部分系统版本</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">网速分隔符</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">于居中摄像头的设备上不显示时间和网速间的竖线</string>\n    <string name=\"system_ui_status_bar_hide_icon\">截屏时隐藏状态栏</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">移动网络类型图标</string>\n\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">网速更新间隔</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">网速字体大小</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">值和单位双排显示</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">显示上下行网速</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">双排显示上下行网速</string>\n    <string name=\"system_ui_statusbar_network_speed_swap_places\">交换上下行网速与图标位置</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">分别显示传入和传出的网络速度</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">隐藏慢速</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_all\">当上下行均为慢速时隐藏</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">当网速低时不再显示指示器</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">慢速水平</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">网速值低于该水平时被认为慢，部分指示器图标会显示不同的指示器图标</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">网速隐藏 *b/s 单位</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">指示器图标</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">启用自定义</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_ms\">%d ms</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_s\">%d s</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_m\">%d m</string>\n    <string name=\"system_ui_statusbar_network_speed_format_KBs\">%d KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_oneKBs\">1 KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_Bs\">B/s</string>\n    <string name=\"system_ui_statusbar_network_speed_lux\">%s lux</string>\n\n    <string name=\"system_ui_statusbar_clock_mode\">自定义时钟模式</string>\n    <string name=\"system_ui_statusbar_clock_editor\">时钟格式</string>\n    <string name=\"system_ui_statusbar_clock_year\">显示年份</string>\n    <string name=\"system_ui_statusbar_clock_month\">显示月份</string>\n    <string name=\"system_ui_statusbar_clock_date\">显示日期</string>\n    <string name=\"system_ui_statusbar_clock_week\">显示星期</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">显示时辰</string>\n    <string name=\"system_ui_statusbar_clock_period\">显示时段</string>\n    <string name=\"system_ui_statusbar_clock_second\">显示秒数</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">隐藏间隔</string>\n    <string name=\"system_ui_statusbar_clock_double\">双排显示</string>\n    <string name=\"system_ui_statusbar_clock_double_mode_title\">双排对齐方式</string>\n    <string name=\"system_ui_statusbar_clock_desc\">时钟格式示例</string>\n    <string name=\"system_ui_statusbar_clock_size\">时钟大小</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">双排时钟大小</string>\n\n    <string name=\"system_ui_statusbar_indicator_battery_title\">功耗相关</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">温度相关</string>\n    <string name=\"system_ui_statusbar_battery_size\">字体大小</string>\n    <string name=\"system_ui_statusbar_battery_show\">显示内容</string>\n    <string name=\"system_ui_statusbar_temp_decimal_places\">隐藏小数位</string>\n    <string name=\"system_ui_statusbar_battery_disable\">隐藏单位</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">右侧显示</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">电流总显示正值</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">单排显示</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">反序</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">仅在充电时显示</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">状态更新间隔</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">更改 CPU 温度获取源</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">输入 /sys/devices/virtual/thermal/ 文件夹下 thermal_zone* 文件夹后的数字以指定源</string>\n\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">居中</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">圆角</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">限制可见性</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">垂直对齐</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">颜色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">满电量颜色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">低电量颜色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">省电模式颜色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">充电颜色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">高度</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">水平边距</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">透明度</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">发光</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">低电量水平</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">测试</string>\n\n    <string name=\"system_ui_controlcenter_title\">通知与控制中心</string>\n    <string name=\"system_ui_controlcenter_card_title\">卡片</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">磁贴</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">通知</string>\n    <string name=\"system_control_center_qs_detail_bg\">卡片背景透明度</string>\n    <string name=\"system_control_center_5g_tile\">5G 网络开关</string>\n    <string name=\"system_control_center_5g_toggle_label\">5G网络</string>\n    <string name=\"system_control_center_sunshine_mode\">阳光模式</string>\n    <string name=\"system_ui_control_auto_close\">磁贴自动收起</string>\n    <string name=\"system_ui_control_auto_close_more\">开启后点击状态栏磁贴会自动收起状态栏</string>\n    <string name=\"system_control_center_qs_tile_label\">移除标题</string>\n    <string name=\"system_control_center_qs_rows\">行数</string>\n    <string name=\"system_control_center_qs_rows_format\">%d 行</string>\n    <string name=\"system_control_center_qs_rows_horizontal\">行数（横屏）</string>\n    <string name=\"system_control_center_qs_columns\">列数</string>\n    <string name=\"system_control_center_qs_columns_format\">%d 列</string>\n    <string name=\"system_control_center_qs_columns_horizontal\">列数（横屏）</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">小米妙播</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">小米妙享</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">智能生活</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">面板详情背景透明度</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">通知设置</string>\n    <string name=\"system_ui_control_center_notification_blur_fix\">通知优化</string>\n    <string name=\"system_ui_control_center_notification_blur_fix_desc\">实验性功能，仅供 Android 13 及以上机型使用，启用后将对部分区域的通知模糊进行优化\\n可能会存在部分机型系统界面崩溃的问题</string>\n    <string name=\"system_ui_control_center_blur_radius\">通知模糊程度</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">不含下拉通知</string>\n    <string name=\"system_ui_control_center_corner_radius\">通知模糊区域圆角</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">默认主题无需调节</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">通知背景透明度</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">下拉通知背景透明度</string>\n    <string name=\"system_ui_control_center_fix_media_control_panel\">修复音乐面板背景图异常</string>\n    <string name=\"system_ui_control_center_compact_notice\">紧凑通知</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">减小通知垂直边框</string>\n    <string name=\"system_ui_control_center_redirect_notice\">重定向通知设置</string>\n    <string name=\"system_ui_control_center_redirect_notice_desc\">打开通知菜单的设置会导航到目标频道设置而不是应用通知设置</string>\n    <string name=\"system_ui_control_center_show_weather\">显示天气</string>\n    <string name=\"system_ui_control_center_show_weather_city\">显示地区</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">亮屏时静音</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">亮屏时弹出通知不播放提示音</string>\n    <string name=\"system_ui_control_center_rounded_rect\">圆角矩形磁贴</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">对调控制中心与通知抽屉</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">蓝牙磁贴样式</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">蓝牙磁贴移至网络磁贴区域</string>\n\n    <string name=\"system_ui_controlcenter_new_title\">新控制中心</string>\n    <string name=\"system_ui_controlcenter_old_title\">经典控制中心</string>\n    <string name=\"system_ui_controlcenter_unlock_old_title\">解锁控制中心样式</string>\n    <string name=\"system_ui_controlcenter_enable_title\">自定义行列数</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">竖屏显示 5 行时会隐藏标签，横屏时则限制为 3 行</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">竖屏时会额外增加一列\\n如果您的 ROM 具有快速设置紧凑布局选项，不管是横屏还是竖屏都会增加其他列</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">横屏时将会额外增加一列</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">折叠面板中的列数</string>\n    <string name=\"system_control_center_old_qs_grid_columns_horizontal\">折叠面板中的列数（横屏）</string>\n\n    <string name=\"system_ui_other_title\">其他</string>\n    <string name=\"system_ui_charge_animation_title\">充电动画</string>\n    <string name=\"system_ui_charge_animation_style\">充电动画样式</string>\n    <string name=\"system_ui_charge_animation_style_desc\">选择锁屏充电动画样式</string>\n    <string name=\"system_ui_origin_charge_animation\">原生充电动画</string>\n    <string name=\"system_ui_another_title\">其他</string>\n    <string name=\"system_ui_notification_freeform\">更多应用通知栏下拉打开小窗</string>\n    <string name=\"system_ui_notification_freeform_desc\">可能不支持 Mi Push 推送的通知</string>\n    <string name=\"system_ui_monet_title\">主题色</string>\n    <string name=\"system_ui_monet_overlay_custom\">自定义主题色</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">自定义主题颜色，而不是从壁纸中提取颜色</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">选择主题色</string>\n    <string name=\"system_ui_volume_timer\">扩展计时器</string>\n    <string name=\"system_ui_qs_label\">快捷开关标签</string>\n    <string name=\"system_ui_notification_title\">通知</string>\n    <string name=\"system_ui_other_notification_fix\">禁用通知白名单</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">音量条模糊</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">仅供 Android 12 及以上的 MTK 机型使用，可能存在 GPU 负载较高的情况</string>\n    <!--系统设置-->\n    <string name=\"system_settings\">设置</string>\n    <string name=\"system_settings_international_build\">国际版本设置页面</string>\n    <string name=\"system_settings_safe_wifi\">查看已保存的 WIFI 密码</string>\n    <string name=\"system_settings_safe_wifi_desc\">解锁管理已保存网络\\n路径：设置-WLAN-高级设置-管理保存的网络</string>\n    <string name=\"system_settings_wifipassword_btn_title\">查看</string>\n    <string name=\"system_settings_wifi_password_label\">密码</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">WiFi 详情</string>\n    <string name=\"system_settings_novelty_haptic_title\">解锁新版触感调节页面</string>\n    <string name=\"system_settings_novelty_haptic_desc\">仅支持有 \\\"声音与触感-触感\\\" 页面的设备</string>\n    <string name=\"system_settings_enable_pad_area\">解锁平板专区</string>\n    <string name=\"system_settings_enable_fold_area\">解锁折叠屏专区</string>\n    <string name=\"system_settings_enable_area_desc\">不支持的设备解锁后会导致设置闪退</string>\n\n    <string name=\"system_settings_connection_sharing_title\">连接与共享</string>\n    <string name=\"system_settings_new_nfc_page\">新版 NFC 页面</string>\n    <string name=\"system_settings_new_nfc_page_desc\">此功能会导致不支持的机型默认付款应用无法选中小米钱包\\n</string>\n\n    <string name=\"system_settings_accessibility_title\">快捷手势</string>\n    <string name=\"system_settings_area_screenshot\">解锁区域截屏</string>\n\n    <string name=\"system_settings_lab_title\">特色功能</string>\n    <string name=\"system_settings_voip_assistant_controller\">解锁网络通话助手</string>\n\n    <string name=\"system_settings_ai_image_title\">AI 大师画质引擎</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">解锁超分辨率增强</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">解锁 AI 智能场景优化与视频画质增强</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">解锁动态画面补偿</string>\n\n    <string name=\"system_settings_permission_title\">权限</string>\n    <string name=\"system_settings_permission_show_app_up\">显示在其他应用上层权限直达</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">恢复旧版行为，直接跳转对应应用 \\\"显示在其他应用上层\\\" 的权限开关</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">安装未知应用权限直达</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">使用国际版行为，直接跳转对应应用 \\\"安装未知应用\\\" 的权限开关</string>\n\n    <string name=\"system_settings_develop_title\">开发者选项</string>\n    <string name=\"system_settings_apps_freezer\">强制显示暂停执行已缓存的应用</string>\n    <string name=\"system_settings_apps_freezer_more\">开启后可在\"开发者选项\"中找到此功能，为强制显示，不保证可用\"</string>\n    <string name=\"system_settings_develop_speed_mode\">极致模式</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">在不支持的机型上开启后不会显示入口</string>\n    <string name=\"system_settings_window_animation_scale\">窗口动画缩放</string>\n    <string name=\"system_settings_transition_animation_scale\">过渡动画缩放</string>\n    <string name=\"system_settings_animator_duration_scale\">Animator 时长缩放</string>\n    <!--主题壁纸-->\n    <string name=\"theme_manager\">主题壁纸</string>\n    <string name=\"theme_manager_version_code_modify\">禁用 MIUI 版本检测</string>\n    <string name=\"theme_manager_diable_ads\">禁用广告</string>\n    <string name=\"theme_manager_diable_ads_desc\">将 “猜你喜欢” 的广告替换为空白卡片，其余位置的广告将完全移除</string>\n    <string name=\"theme_manager_crack\">主题破解</string>\n    <string name=\"theme_manager_enable_pad_theme\">启用 Pad 主题</string>\n    <string name=\"theme_manager_enable_fold_theme\">启用 Fold 主题</string>\n    <!--系统更新-->\n    <string name=\"updater\">系统更新</string>\n    <string name=\"updater_fuck_vab\">移除 OTA 验证</string>\n    <string name=\"updater_fuck_vab_desc\">仅支持 VAB 设备，其他非 VAB 设备请不要开启！\\n- 无需内测权限即可刷入完整内测卡刷包\\n- 跨不同版本类型刷入后建议清除数据\\n- 不支持任何非官方 ROM 使用\\n- 此功能有一定危险性，请在了解 Fastboot 操作后再评估是否开启</string>\n    <string name=\"updater_version_mode\">伪装类型</string>\n    <string name=\"updater_big_version\">伪装大版本</string>\n    <string name=\"updater_big_version_desc\">伪装 Xiaomi HyperOS 版本时需要填写的项目，默认为 V816</string>\n    <string name=\"updater_miui_version\">伪装版本</string>\n    <string name=\"updater_miui_version_desc\">仅对系统更新修改，可在一定程度上屏蔽系统更新</string>\n    <string name=\"updater_device\">伪装机型</string>\n    <string name=\"updater_device_desc\">输入目标设备的机型代号以指定机型，可用于获取其他机型的 ROM 包，该功能极度危险</string>\n    <!--权限管理服务-->\n    <string name=\"lbe\">权限管理服务</string>\n    <string name=\"clipboard\">剪切板</string>\n    <string name=\"lbe_disable_clipboard_tip\">隐藏 Toast 提示</string>\n    <string name=\"lbe_clipboard_tip_toast\">使用 Toast 提示读取剪贴板</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">隐藏对话框并允许应用默认读取剪切板</string>\n    <string name=\"lbe_clipboard_tip\">读取了剪贴板</string>\n    <!--投屏-->\n    <string name=\"milink\">投屏</string>\n    <string name=\"milink_unlock_mishare\">解锁小米妙享</string>\n    <!--万象息屏-->\n    <string name=\"aod\">万象息屏</string>\n    <string name=\"aod_unlock_always_on_display\">解锁息屏显示时长限制</string>\n    <!--传送门-->\n    <string name=\"content_extension\">传送门</string>\n    <string name=\"content_extension_browser\">使用第三方浏览器</string>\n    <string name=\"content_extension_browser_desc\">使传送门不强制使用 MIUI 浏览器进行搜索，需自行选择默认浏览器</string>\n    <string name=\"content_extension_unlock_taplus_title\">解锁传送门</string>\n    <string name=\"content_extension_unlock_taplus_horizontal_title\">允许在横屏方向上使用传送门</string>\n    <string name=\"content_extension_double_press\">开放双指长按</string>\n    <string name=\"content_extension_super_image\">开放超分辨率图片</string>\n    <string name=\"content_extension_super_image_summary\">需要系统底层支持</string>\n    <string name=\"content_extension_link_open_mode\">链接打开方式</string>\n    <string name=\"content_extension_link_open_mode_desc\">选择一个浏览器以打开链接</string>\n    <!--小米创作-->\n    <string name=\"creation\">小米创作</string>\n    <string name=\"creation_unlock\">解除手机端使用限制</string>\n    <!--相册-->\n    <string name=\"gallery\">相册</string>\n    <string name=\"gallery_enable_hdr_enhanced\">解锁超动态显示</string>\n    <string name=\"gallery_enable_pdf\">解锁生成 PDF</string>\n    <string name=\"gallery_enable_ocr\">解锁提取文字</string>\n    <string name=\"gallery_enable_ocr_form\">解锁提取表格</string>\n    <string name=\"gallery_enable_id_photo\">解锁证件照</string>\n    <string name=\"gallery_enable_photo_movie\">解锁照片电影</string>\n    <string name=\"gallery_enable_video_post\">解锁视频特效</string>\n    <string name=\"gallery_enable_video_editor\">解锁 Mi 剪辑</string>\n    <string name=\"gallery_enable_text_yanhua\">解锁文字烟花</string>\n    <string name=\"gallery_enable_remover_2\">解锁魔法消除</string>\n    <string name=\"gallery_enable_magic_matting\">解锁魔法抠图</string>\n    <string name=\"gallery_enable_magic_sky\">解锁魔法换天</string>\n    <!--MIUI 安全组件-->\n    <string name=\"guard_provider\">MIUI 安全组件</string>\n    <string name=\"guard_provider_disable_upload_applist\">阻止自动上传已安装应用列表</string>\n    <!--系统桌面-->\n    <string name=\"home\">系统桌面</string>\n    <string name=\"home_gesture\">手势与导航</string>\n    <string name=\"home_navigation_title\">导航</string>\n    <string name=\"home_navigation_quick_back\">切换上一个应用</string>\n    <string name=\"home_navigation_quick_back_more\">从屏幕两侧向内滑动并停顿，快速切换上一个应用</string>\n    <string name=\"home_navigation_back_area_height\">返回手势区域高度</string>\n    <string name=\"home_navigation_back_area_width\">返回手势区域宽度</string>\n    <string name=\"home_gesture_title2\">手势</string>\n    <string name=\"home_gesture_mainscreen_title\">主屏幕</string>\n    <string name=\"home_gesture_gesture_title\">全面屏手势</string>\n    <string name=\"home_gesture_double_tap\">双击</string>\n    <string name=\"home_gesture_double_tap_desc\">在任意主屏幕空白处双击</string>\n    <string name=\"home_gesture_shake\">摇晃</string>\n    <string name=\"home_gesture_shake_desc\">在任意主屏幕摇晃设备</string>\n    <string name=\"home_gesture_left_swipe\">左滑</string>\n    <string name=\"home_gesture_left_swipe_desc\">在主屏幕 Dock 栏向左滑动</string>\n    <string name=\"home_gesture_right_swipe\">右滑</string>\n    <string name=\"home_gesture_right_swipe_desc\">在主屏幕 Dock 栏向右滑动</string>\n    <string name=\"home_gesture_up_swipe\">上滑</string>\n    <string name=\"home_gesture_up_swipe_desc\">在任意主屏幕单指上滑</string>\n    <string name=\"home_gesture_down_swipe\">下滑</string>\n    <string name=\"home_gesture_down_swipe_desc\">在任意主屏幕单指下滑</string>\n    <string name=\"home_gesture_up_swipe2\">双指上滑</string>\n    <string name=\"home_gesture_up_swipe2_desc\">在任意主屏幕双指上滑</string>\n    <string name=\"home_gesture_down_swipe2\">双指下滑</string>\n    <string name=\"home_gesture_down_swipe2_desc\">在任意主屏幕双指下滑</string>\n    <string name=\"home_gesture_pinch\">双指捏合</string>\n    <string name=\"home_gesture_spread\">双指扩展</string>\n    <string name=\"home_gesture_swipe_and_stop\">滑动并停止</string>\n    <string name=\"home_gesture_swipe_and_stop_desc\">在任意非主屏幕由屏幕两侧向内滑动并停止</string>\n    <string name=\"home_gesture_multi_choose_app\">选择应用</string>\n    <string name=\"home_gesture_multi_choose_app_none\">未选择</string>\n\n    <string name=\"home_layout\">布局</string>\n    <string name=\"home_layout_home_title\">主屏幕</string>\n    <string name=\"home_layout_hotseats_title\">底栏</string>\n    <string name=\"home_layout_searchbar_title\">搜索框</string>\n    <string name=\"home_layout_seek_points\">页面指示器</string>\n    <string name=\"home_layout_show_clock\">显示时间</string>\n    <string name=\"home_layout_show_clock_desc\">时钟小部件所在页面始终显示时间</string>\n    <string name=\"home_layout_unlock_grids\">解锁布局</string>\n    <string name=\"home_layout_unlock_grids_desc\">解锁主屏幕图标布局行列数限制</string>\n    <string name=\"home_layout_unlock_grids_no_words\">解锁布局 (无字模式)</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">解锁主屏幕图标布局行列数限制</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">主屏幕距离屏幕底部边距</string>\n    <string name=\"home_layout_workspace_padding_top_desc\">主屏幕距离屏幕顶部边距</string>\n    <string name=\"home_layout_hotseats_height\">高度</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">底栏距离页面指示器边距</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">底栏距离屏幕底部边距</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">搜索栏距离屏幕底部边距</string>\n\n    <string name=\"home_folder\">文件夹</string>\n    <string name=\"home_small_folder_title\">小文件夹</string>\n    <string name=\"home_big_folder_title\">大文件夹</string>\n    <string name=\"home_small_folder_icon_bg\">图标背景</string>\n    <string name=\"home_small_folder_icon_bg_custom\">背景自定义</string>\n    <string name=\"home_small_folder_icon_bg_size\">背景大小</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">横三宫格背景自定义</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">自定义</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">背景宽度</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">背景高度</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">竖三宫格背景自定义</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">自定义</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">背景宽度</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">背景高度</string>\n    <string name=\"home_big_folder_icon_bg\">九宫格背景自定义</string>\n    <string name=\"home_big_folder_icon_bg_2x1_n\">八宫格背景自定义</string>\n    <string name=\"home_big_folder_icon_bg_1x2_n\">四宫格背景自定义</string>\n    <string name=\"home_big_folder_icon_bg_n\">九、十六宫格背景自定义</string>\n    <string name=\"home_big_folder_icon_bg_custom\">自定义</string>\n    <string name=\"home_big_folder_icon_bg_width\">背景宽度</string>\n    <string name=\"home_big_folder_icon_bg_height\">背景高度</string>\n    <string name=\"home_big_folder_item_max_count\">真·九宫格</string>\n    <string name=\"home_auto_close_folder_title\">自动关闭</string>\n    <string name=\"home_auto_close_folder_summary\">启动应用后关闭所在的文件夹</string>\n    <string name=\"home_wallpaper\">背景</string>\n    <string name=\"home_wallpaper_blur\">背景模糊</string>\n    <string name=\"home_enable_blur\">启用模糊</string>\n    <string name=\"home_blur_radius_title\">模糊半径</string>\n    <string name=\"home_folder_shade_title\">颜色覆盖</string>\n    <string name=\"home_folder_shade_summary\">增强或减弱背景颜色</string>\n    <string name=\"home_folder_shade_solid\">整个背景</string>\n    <string name=\"home_folder_shade_gradient\">仅中间</string>\n    <string name=\"home_folder_shade_level_title\">色彩强度</string>\n    <string name=\"home_folder_cols_title\">文件夹排列数量</string>\n    <string name=\"home_folder_cols_format\">%d 列</string>\n    <string name=\"home_folder_vertical_padding_title\">文件夹水平间距</string>\n    <string name=\"home_folder_width_title\">使用整个文件夹的宽度</string>\n    <string name=\"home_folder_space_title\">减少边距</string>\n    <string name=\"home_folder_blur_title\">背景模糊</string>\n    <string name=\"home_folder_anim_title\">回弹动画</string>\n    <string name=\"home_folder_anim_1\">打开时回弹幅度</string>\n    <string name=\"home_folder_anim_2\">打开时慢放速度</string>\n    <string name=\"home_folder_anim_3\">关闭时回弹幅度</string>\n    <string name=\"home_folder_anim_4\">关闭时慢放速度</string>\n\n    <string name=\"home_drawer\">抽屉</string>\n    <string name=\"home_drawer_all\">移除 “全部” 分页</string>\n    <string name=\"home_drawer_all_desc\">移除抽屉栏内应用分组的 “全部” 分页</string>\n    <string name=\"home_drawer_editor\">移除 “编辑” 按钮</string>\n    <string name=\"home_drawer_editor_desc\">移除抽屉栏内应用分页的 “编辑” 按钮</string>\n    <string name=\"home_drawer_blur\">抽屉模糊</string>\n    <string name=\"home_drawer_blur_desc\">需将应用程序抽屉的背景透明度设置为 100%</string>\n    <string name=\"home_drawer_pinyin\">按拼音顺序排列</string>\n    <string name=\"home_drawer_pinyin_more\">非简体中文语言时抽屉内应用仍按照拼音排列</string>\n\n    <string name=\"home_title\">图标与标题</string>\n    <string name=\"home_title_icon_title\">图标</string>\n    <string name=\"home_title_bigicon_title\">大图标</string>\n    <string name=\"home_title_title_title\">标题</string>\n    <string name=\"home_title_title_marquee\">文字滚动</string>\n    <string name=\"home_title_title_marquee_desc\">过长的应用名称将以滚动进行显示，不再使用换行</string>\n    <string name=\"home_title_title_new_install\">禁止新安装软件显示指示标</string>\n    <string name=\"home_title_drawer_font_hidden\">隐藏所有应用标题</string>\n    <string name=\"home_title_drawer_font_hidden_more\">抽屉内应用标题也会被隐藏，如需保留抽屉内应用标题，请使用 “文本大小” 进行调整</string>\n    <string name=\"home_title_title_new_install_more\">安装新应用时不显示应用标题旁边的指示标</string>\n    <string name=\"home_title_font_size\">文本大小</string>\n    <string name=\"home_title_title_color\">文本颜色</string>\n    <string name=\"home_title_animation_speed\">动画速度</string>\n    <string name=\"home_title_big_icon_corner\">中等图标圆角跟随</string>\n    <string name=\"home_title_download_animation\">下载动画</string>\n    <string name=\"home_title_fix_animation\">优化打断动画</string>\n    <string name=\"home_title_icon_scale\">图标缩放</string>\n    <string name=\"home_title_disable_hide_file\">禁止隐藏 \\\"文件\\\" 图标</string>\n    <string name=\"home_title_disable_hide_theme\">禁止隐藏 \\\"主题壁纸\\\" 图标</string>\n    <string name=\"home_title_custom_anim_param\">自定义动画曲线</string>\n    <string name=\"home_title_custom_anim_param_damping_title\">阻尼</string>\n    <string name=\"home_title_custom_anim_param_stiffness_title\">刚度</string>\n\n    <string name=\"home_recent\">最近任务</string>\n    <string name=\"home_recent_animation_speed\">动画速度</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">取消壁纸压暗</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">隐藏状态栏</string>\n    <string name=\"home_recent_hide_freeform\">隐藏小窗按钮</string>\n    <string name=\"home_recent_hide_clean_up\">隐藏清理按钮</string>\n    <string name=\"home_recent_remove_icon\">隐藏图标</string>\n    <string name=\"home_recent_modify_animation\">修改划卡动画</string>\n    <string name=\"home_recent_text\">无后台时显示的文本</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">应用名称距卡片</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">卡片圆角大小</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">竖屏平铺卡片大小</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">横屏平铺卡片大小</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">瀑布卡片大小</string>\n    <string name=\"home_recent_text_size\">卡片文字大小</string>\n    <string name=\"home_recent_text_color\">卡片文字颜色</string>\n    <string name=\"home_recent_freeform_background_color\">小窗应用卡片背景颜色</string>\n    <string name=\"home_recent_show_real_memory\">显示真实使用内存量</string>\n    <string name=\"home_recent_show_memory_info_sum\">仅供平板使用</string>\n    <string name=\"home_recent_show_memory_info\">强制展示内存信息</string>\n    <string name=\"home_recent_always_show_clean_up\">无卡片时不隐藏清理图标</string>\n\n    <string name=\"home_widget\">小部件</string>\n    <string name=\"home_widget_all_widget_animation\">强制所有小部件使用动画</string>\n    <string name=\"home_widget_show_miui_widget\">显示 MIUI 小部件</string>\n    <string name=\"home_widget_show_miui_widget_desc\">在安卓小部件页面显示 MIUI 小部件</string>\n    <string name=\"home_widget_corner_radius\">小部件圆角</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">允许将安卓小部件移动至负一屏</string>\n    <string name=\"home_widget_hide_title\">隐藏小部件标题</string>\n    <string name=\"home_widget_resizable\">解除小部件大小限制</string>\n\n    <string name=\"home_dock\">底栏</string>\n    <string name=\"home_dock_bg_enable\">添加 Dock 栏背景</string>\n    <string name=\"home_dock_bg_height\">高度</string>\n    <string name=\"home_dock_bg_height_desc\">Dock 栏高度</string>\n    <string name=\"home_dock_bg_margin_horizontal\">水平边距</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Dock 栏距屏幕两侧边距</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Dock 栏距页面指示器边距</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Dock 栏距屏幕底部边距</string>\n    <string name=\"home_dock_icon_margin_bottom\">图标底部边距</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Dock 栏图标距屏幕底部边距</string>\n    <string name=\"home_dock_bg_custom\">背景模糊</string>\n    <string name=\"home_dock_icon_bottom_margin\">图标距离底部边距</string>\n    <string name=\"home_dock_margin_bottom\">页面指示器距屏幕底部边距</string>\n    <string name=\"home_dock_unlock_hotseat\">解锁底栏图标数量限制</string>\n    <string name=\"home_dock_fold\">Fold 样式底栏</string>\n    <string name=\"home_dock_hide_seekpoint\">移除页面指示器</string>\n    <string name=\"home_dock_icon_title\">显示应用标题</string>\n    <string name=\"home_dock_disable_recents_icon\">隐藏 Dock 栏最近应用的图标</string>\n\n    <string name=\"home_other\">其他</string>\n    <string name=\"home_other_shortcut_title\">快捷菜单</string>\n    <string name=\"home_other_home_mode\">桌面模式</string>\n    <string name=\"home_other_infinite_scroll\">无限滚动</string>\n    <string name=\"home_other_infinite_scroll_desc\">从末页跳转至首页，反之亦然</string>\n    <string name=\"home_other_freeform_shortcut_menu\">小窗模式</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">在快捷菜单中添加小窗菜单</string>\n    <string name=\"home_other_tasks_shortcut_menu\">多开模式</string>\n    <string name=\"home_other_tasks_shortcut_menu_desc\">在快捷菜单中添加多开菜单</string>\n    <string name=\"home_other_user_present_animation\">优化解锁动画</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">始终模糊桌面壁纸</string>\n    <string name=\"home_other_perfect_icon\">完美图标优先级</string>\n    <string name=\"home_other_icon_mono_chrome\">图标背景色</string>\n    <string name=\"home_other_icon_monet_color\">使用 Monet 取色</string>\n    <string name=\"home_other_use_edit_color\">使用自定义颜色</string>\n    <string name=\"home_other_your_color\">编辑颜色</string>\n    <string name=\"home_other_portrait_reverse\">允许反向竖屏</string>\n    <string name=\"home_other_shortcut_background_blur\">快捷菜单背景模糊</string>\n    <string name=\"home_other_blur_radius\">模糊半径</string>\n    <string name=\"home_large_icon_corner_radius\">大图标圆角</string>\n    <string name=\"home_other_app_icon_hide\">桌面快捷方式管理</string>\n    <string name=\"home_other_toast_slide_again\">禁止提示 \\\"请再划一次\\\" Toast</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">解锁快捷菜单数量限制</string>\n    <string name=\"home_other_disable_hide_google\">禁止隐藏 Google 图标</string>\n    <string name=\"home_other_fix_android_r_s\">修复兼容性问题导致桌面黑屏</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">快捷菜单背景透明度</string>\n    <string name=\"home_other_high_models\">强制识别为高端机型</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_title\">解锁桌面设置更多选项</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_desc\">解锁后的功能不一定可用，部分功能需要系统底层支持</string>\n\n    <string name=\"home_recent_blur_level\">模糊等级</string>\n    <string name=\"home_recent_complete_blur_plus\">完整模糊补充 (实验性)</string>\n    <string name=\"home_recent_complete_blur\">完整模糊</string>\n    <string name=\"home_recent_test_blur\">测试模糊</string>\n    <string name=\"home_recent_simple_blur\">简单模糊</string>\n    <string name=\"home_recent_none_blur\">无模糊</string>\n    <string name=\"home_recent_none_blur_simple_anim\">无模糊 (精简动画)</string>\n    <!--小米相册-编辑-->\n    <string name=\"mediaeditor\">小米相册-编辑</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">解锁最小裁切图片限制</string>\n    <string name=\"mediaeditor_filter_manager\">解锁大师滤镜</string>\n    <!--小米互传-->\n    <string name=\"mishare\">小米互传</string>\n    <string name=\"mishare_disable_mishare_auto_off\">禁用自动关闭小米互传</string>\n    <string name=\"mishare_unlock_turbo_mode\">解锁极速传输模式</string>\n    <!--壁纸-->\n    <string name=\"miwallpaper\">壁纸</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">解锁超级壁纸</string>\n    <!--应用包管理组件-->\n    <string name=\"package_installer\">应用包管理组件</string>\n    <string name=\"miui_package_installer_modify\">净化页面</string>\n    <string name=\"miui_package_installer_safe_mode\">纯净模式</string>\n    <string name=\"miui_package_installer_safe_mode_desc\">强制开启并锁定官方的安全守护</string>\n    <string name=\"miui_package_installer_disable_ad\">禁用推广</string>\n    <string name=\"miui_package_installer_install_risk\">禁用风险检测</string>\n    <string name=\"miui_package_installer_safe_model_tip\">禁用安全守护提示</string>\n    <string name=\"miui_package_installer_count_checking\">禁用频繁安装应用检查</string>\n    <string name=\"miui_package_installer_update_system_app\">解除系统应用安装限制</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">允许任何非系统渠道安装系统应用</string>\n    <string name=\"miui_package_installer_install_source\">自定义安装来源</string>\n    <string name=\"miui_package_installer_apk_info\">显示更多安装包信息</string>\n    <string name=\"miui_package_installer_apk_info_desc\">显示安装中应用的更多相关信息</string>\n    <!--networkboost-->\n    <string name=\"various_disable_link_turbo_toast\">隐藏正在使用流量加速 Toast</string>\n    <string name=\"various_disable_link_turbo_toast_more\">开关后请在快速重启作用域中重启 NetworkBoost</string>\n    <!--nfc-->\n    <string name=\"nfc\">NFC 服务</string>\n    <string name=\"nfc_disable_sound\">禁用声音</string>\n    <string name=\"nfc_allow_information_screen\">允许息屏时识别</string>\n    <!--智能助理-->\n    <string name=\"personal_assistant\">智能助理</string>\n    <string name=\"personal_assistant_widget_crack\">小部件破解</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Pad/Fold 小部件</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">启用 Pad/Fold 样式的小部件</string>\n    <string name=\"personal_assistant_overlap_mode\">负一屏 Fold 样式</string>\n    <string name=\"personal_assistant_blur_model\">负一屏背景设置</string>\n    <string name=\"personal_assistant_blur_value\">背景样式</string>\n    <string name=\"personal_assistant_blurradius\">负一屏背景模糊程度</string>\n    <string name=\"personal_assistant_color\">负一屏背景叠加层颜色</string>\n    <!--音乐-->\n    <string name=\"music\">音乐</string>\n    <string name=\"music_disable_ad\">移除广告</string>\n    <!--电量与性能-->\n    <string name=\"powerkeeper\">电量与性能</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">自定义高刷新率应用</string>\n    <string name=\"powerkeeper_lock_max_fps\">锁定当前刷新率上限</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">尝试不要杀死后台应用</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">可能使耗电量增加</string>\n    <string name=\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\">禁止恢复电池优化白名单</string>\n    <!--屏幕录制-->\n    <string name=\"screenrecorder\">屏幕录制</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">强制启用原生屏幕录制支持</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">需要屏幕录制版本支持</string>\n    <string name=\"screen_recorder_config\">添加更多帧率与码率选项</string>\n    <string name=\"screen_recorder_config_desc\">请根据硬件情况酌情选择</string>\n    <string name=\"screen_recorder_more_volume\">解锁更多声音来源选项</string>\n    <string name=\"screen_recorder_more_volume_desc\">仅支持部分版本</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">规范录制视频保存位置到 Movies/ScreenRecorder</string>\n    <!--截屏-->\n    <string name=\"screenshot\">截屏</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">解锁最小裁切图片限制</string>\n    <string name=\"screenshot_unlock_privacy_marking_title\">解锁智能隐私打码</string>\n    <string name=\"screenshot_unlock_privacy_marking_desc\">需要预装高版本 “MiAI引擎” APP 才能正常使用</string>\n    <string name=\"screenshot_save_to_pictures_desc\">规范截屏保存位置到 Pictures/Screenshots</string>\n    <string name=\"screenshot_device_customize_title\">自定义带壳截屏机型</string>\n    <string name=\"screenshot_device_customize_desc\">填写请输入 机型代号</string>\n    <!--手机管家/平板管家-->\n    <string name=\"security_center\">手机管家</string>\n    <string name=\"security_center_pad\">平板管家</string>\n    <string name=\"security_center_app_title\">应用管理</string>\n    <string name=\"security_center_battery_title\">省电与电池</string>\n    <string name=\"security_center_privacy_title\">隐私保护</string>\n    <string name=\"security_center_beauty_title\">前置摄像助手</string>\n    <string name=\"security_center_bubble_and_freeform_title\">小窗和气泡通知</string>\n    <string name=\"security_center_newbox_title\">全局侧边栏</string>\n    <string name=\"security_center_dolby_open\">关闭杜比弹窗</string>\n    <string name=\"security_center_show_battery_temperature\">显示电池温度</string>\n    <string name=\"security_center_ai_clipboard\">剪贴板隐私保护</string>\n    <string name=\"security_center_blur_location\">模糊定位</string>\n    <string name=\"security_center_gms_open\">GMS 开关</string>\n    <string name=\"security_center_flash_light\">手电筒亮度控制</string>\n    <string name=\"security_center_flash_light_more\">开启手电筒时劫持亮度条，拖动亮度条即可控制手电筒亮度</string>\n    <string name=\"security_center_get_number\">管理应用获取手机号并一键登录</string>\n    <string name=\"security_center_applock_pin_scramble\">应用锁乱序 PIN</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">随机更改应用锁 PIN 键盘顺序</string>\n    <string name=\"security_center_beauty_light_auto\">解锁智能调节补光灯亮度</string>\n    <string name=\"security_center_beauty_face\">解锁视频通话美颜</string>\n    <string name=\"security_center_beauty_privacy\">解锁隐私拍摄</string>\n    <string name=\"security_center_beauty_pc\">解锁人像居中</string>\n    <string name=\"security_center_disable_root_check\">禁用 Root 检测</string>\n    <string name=\"security_center_remove_macro_black_list\">移除自动连招黑名单</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">禁止发送 “发现恶意应用” 通知</string>\n    <string name=\"security_center_newbox_custom_enable\">启用自定义</string>\n    <string name=\"security_center_newbox_bg_custom\">背景模糊</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">水平边距</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">垂直边距</string>\n    <string name=\"security\">手机管家</string>\n    <string name=\"security_app_title\">显示更多应用信息</string>\n    <string name=\"security_app_summary\">添加新字段到应用信息页面:\\n- 版本代码\\n- APK 完整目录\\n- 数据目录\\n- 用户标识符\\n- 最低 SDK 版本\\n- 目标 SDK 版本\\n- 链接到商店页面\\n- 启动应用</string>\n    <string name=\"security_app_sort_title\">应用管理列表排序</string>\n    <string name=\"security_app_sort_summary\">修改应用管理列表默认排序</string>\n    <string name=\"security_restrict_app_title\">全限制</string>\n    <string name=\"security_restrict_app_summary\">允许配置省电程序并且为系统应用接入 WIFI</string>\n    <string name=\"security_disable_app_title\">应用状态控制</string>\n    <string name=\"security_disable_app_summary\">允许从应用信息页面禁用任何应用</string>\n    <string name=\"security_disable_app_url_title\">应用打开链接管理</string>\n    <string name=\"security_disable_app_url_summary\">将应用详情中 \\\"消除默认操作\\\" 更改为 \\\"默认打开\\\" 设置</string>\n    <string name=\"app_link_open_always\">允许应用打开支持的链接</string>\n    <string name=\"app_link_open_never\">不允许应用打开链接</string>\n    <string name=\"open_by_default\">默认打开</string>\n    <string name=\"security_score\">禁用体检优化</string>\n    <string name=\"security_score_summary\">锁定 100 分与禁用优化</string>\n    <string name=\"security_center_skip_waiting_time\">跳过倒计时限制</string>\n    <string name=\"security_center_skip_waiting_time_desc\">跳过大部分官方危险选项的等待确认倒计时时间</string>\n    <string name=\"security_center_newbox_blur\">全局侧边栏模糊</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">移除气泡通知应用限制</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">隐藏低电量警告</string>\n    <string name=\"security_center_remove_low_battery_reminder_summary\">当电量低于 20% 时，不再弹出打开省电模式的警告对话框</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">移除打开应用弹窗</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">移除 \\\"XXX 想要打开 XXX\\\" 的弹窗</string>\n    <string name=\"security_center_no_permission\">未取得所需权限</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">解锁贴边小窗</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">为底层支持但受限制的设备解锁贴边小窗，这将同时影响手机切后台时小窗的行为</string>\n    <string name=\"security_center_unlock_smart_charge_title\">解锁 “智能断充保护” 和 “低电疾充” 功能</string>\n    <string name=\"security_center_super_wireless_charge\">解锁极速无线充电模式</string>\n    <string name=\"security_center_blur_model\">全局侧边栏背景自定义</string>\n    <string name=\"security_center_blurradius\">全局侧边栏背景模糊程度</string>\n    <string name=\"security_center_color\">全局侧边栏背景叠加层颜色</string>\n    <string name=\"security_center_other_title\">其他</string>\n    <string name=\"security_center_sidebar_line_color\">全局侧边栏提示线自定义</string>\n    <string name=\"security_center_sidebar_line_color_default\">默认全局侧边栏提示线颜色</string>\n    <string name=\"security_center_sidebar_line_color_dark\">深色背景下全局侧边栏提示线颜色</string>\n    <string name=\"security_center_sidebar_line_color_light\">浅色背景下全局侧边栏提示线颜色</string>\n    <string name=\"security_center_disable_ban\">移除举报键</string>\n    <string name=\"security_center_unlock_screen_time\">显示详细耗电数据</string>\n    <string name=\"security_center_unlock_screen_time_desc\">在耗电排行中显示屏幕耗电信息，并恢复显示所有其他应用的耗电量和时间</string>\n    <string name=\"security_center_unlock_gun_service\">解锁准星辅助</string>\n    <string name=\"security_center_disable_remove_screen_hold_on\">禁用移除息屏听剧与熄屏挂机</string>\n    <string name=\"security_center_unlock_memc\">解锁动态画面补偿</string>\n    <string name=\"security_center_unlock_enhance_contours\">解锁影像轮廓增强</string>\n    <string name=\"security_center_unlock_s_resolution\">解锁极清播放</string>\n    <string name=\"security_center_hide_sidebar\">隐藏侧边栏</string>\n    <string name=\"security_center_leave_open\">保留侧滑展开</string>\n    <string name=\"security_center_disable_sidebar_show_suggest\">禁止展示推荐应用</string>\n    <!--小米智能卡-->\n    <string name=\"tsmclient\">小米智能卡</string>\n    <string name=\"tsmclient_auto_nfc\">自动管理 NFC</string>\n    <string name=\"tsmclient_auto_nfc_desc\">进入刷卡页面时自动开启 NFC，退出时将自动关闭</string>\n    <string name=\"tsmclient_nfc_turning_on\">正在自动开启 NFC …</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">手动开启 NFC</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">自动开启 NFC 失败</string>\n    <!--天气-->\n    <string name=\"weather\">天气</string>\n    <string name=\"weather_device_level_title\">动画等级</string>\n    <string name=\"weather_device_level_title_low\">低</string>\n    <string name=\"weather_device_level_title_middle\">中</string>\n    <string name=\"weather_device_level_title_high\">高</string>\n    <!--小爱翻译-->\n    <string name=\"aiasst\">小爱翻译</string>\n    <string name=\"aiasst_ai_captions\">强制启用实时字幕</string>\n    <string name=\"aiasst_ai_captions_desc\">只能识别翻译中文、英文</string>\n    <!--弹幕通知-->\n    <string name=\"barrage\">弹幕通知</string>\n    <string name=\"barrage_any_barrage\">允许所有应用使用弹幕通知</string>\n    <string name=\"barrage_custom_barrage_length\">自定义弹幕长度</string>\n    <!--Joyose-->\n    <string name=\"joyose\">Joyose</string>\n    <string name=\"joyose_cloud_control_title\">云控</string>\n    <string name=\"joyose_disable_cloud_control\">禁用云控</string>\n    <string name=\"joyose_game_title\">游戏空间</string>\n    <string name=\"joyose_enable_gpu_tuner\">性能调度</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">开启后 \\\"游戏空间\\\" 的底部中间增加游戏 GPU 相关设置</string>\n    <!--应用商店-->\n    <string name=\"market\">应用商店</string>\n    <string name=\"market_device_modify\">机型伪装</string>\n    <string name=\"market_device_modify_desc\">伪装设备机型为 Xiaomi 13 Ultra</string>\n    <string name=\"market_disable_new_icon\">禁止使用第三方图标</string>\n    <string name=\"market_disable_new_icon_desc\">使桌面更加整洁</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">解锁 MIUI+</string>\n    <!--小米设置-->\n    <string name=\"mi_settings\">小米设置</string>\n    <string name=\"mi_input_settings\">输入设置</string>\n    <string name=\"mi_settings_show_fps\">显示更多帧率设置项</string>\n    <string name=\"mi_settings_show_fps_desc\">模块默认解锁全部帧率，不保证全部可用</string>\n    <!--鲁班 (MTB)-->\n    <string name=\"mtb\">鲁班 (MTB)</string>\n    <string name=\"mtb_auth\">绕过鲁班 (MTB) 鉴权</string>\n    <string name=\"mtb_auth_desc\">这是一个高危险性的功能，由此引发的后果全部由用户本人承担，请及时备份基带。</string>\n    <!--小爱视觉-->\n    <string name=\"scanner\">小爱视觉</string>\n    <string name=\"scanner_card\">解锁扫名片</string>\n    <string name=\"scanner_translation\">解锁翻译</string>\n    <string name=\"scanner_ocr\">解锁识文字</string>\n    <string name=\"scanner_document\">解锁转文档</string>\n    <string name=\"scanner_excel\">解锁提取表格</string>\n    <string name=\"scanner_ppt\">解锁提取 PPT</string>\n    <string name=\"scanner_doc_ppt\">解锁扫文件</string>\n    <!--其他-->\n    <string name=\"various\">其他</string>\n    <string name=\"notes\">笔记</string>\n    <string name=\"share_center\">小米妙享中心</string>\n    <string name=\"new_task\">多开</string>\n    <string name=\"custom_hook\">自定义</string>\n\n    <string name=\"app_version_not_supported\">不受支持的版本</string>\n\n    <string name=\"various_location_simulation_title\">位置模拟</string>\n    <string name=\"various_dialog_title\">弹窗</string>\n    <string name=\"various_mipad_title\">Pad 相关</string>\n    <string name=\"various_open_aosp_something_title\">隐藏特性</string>\n    <string name=\"various_open_aosp_something_desc\">便捷打开被隐藏的原生界面</string>\n    <string name=\"settings_notfication_importance\">显示通知重要程度</string>\n    <string name=\"various_no_overscroll\">禁用越界回弹</string>\n    <string name=\"various_disable_bluetooth_restrict\">禁用蓝牙临时关闭</string>\n    <string name=\"various_disable_access_device_logs\">关闭访问设备日志确认</string>\n    <string name=\"various_unlock_ime\">解锁输入法全面屏优化</string>\n    <string name=\"various_unlock_ime_desc\">开启后请在 Xposed 管理器中勾选对应输入法作用域</string>\n    <string name=\"various_collapse_miui_title\">MIUI 标题</string>\n    <string name=\"various_collapse_miui_title_desc\">调整 MIUI 应用中的顶栏标题</string>\n    <string name=\"various_disable_folder_cantuse\">移除部分文件夹不可选择限制</string>\n\n    <string name=\"various_super_clipboard_title\">超级剪切板</string>\n    <string name=\"various_unlock_super_clipboard\">解锁超级剪切板</string>\n    <string name=\"various_super_clipboard_summary\">仅支持包含 is_support_miui_super_clipboard 元数据的应用</string>\n    <string name=\"various_super_clipboard_picture_desc\">允许复制图片至剪贴板</string>\n    <string name=\"various_super_clipboard_files_desc\">允许复制文件至剪贴板</string>\n\n    <string name=\"various_open_aosp_battery_title\">电池优化</string>\n    <string name=\"various_open_aosp_notification_title\">通知设置</string>\n    <string name=\"various_open_aosp_app_manage_title\">应用管理</string>\n    <string name=\"various_open_aosp_language_title\">语言设置</string>\n    <string name=\"various_open_aosp_extremely_dark_title\">极暗</string>\n\n    <string name=\"various_mipad_input_title\">输入</string>\n    <string name=\"various_mipad_input_close_magic_title\">关闭 Magic Pointer</string>\n    <string name=\"various_mipad_input_close_magic_desc\">移除 MIUI For Pad 破烂的圆形鼠标指针，并恢复为安卓原生的鼠标指针</string>\n    <string name=\"various_mipad_input_restore_esc_title\">恢复 ESC 键功能</string>\n    <string name=\"various_mipad_input_restore_esc_desc\">恢复被 MIUI 强硬射为 \\\"返回\\\" 功能的 ESC 键</string>\n    <string name=\"various_mipad_input_disable_bluetooth_title\">移除触控笔蓝牙限制</string>\n    <string name=\"various_mipad_input_disable_bluetooth_desc\">无需链接小米灵感触控笔的蓝牙即可使用兼容的触控笔</string>\n    <string name=\"various_mipad_input_bluetooth_version_title\">驱动版本</string>\n    <string name=\"various_mipad_input_bluetooth_version_desc\">移除触控笔蓝牙限制所使用的驱动版本</string>\n    <string name=\"various_mipad_input_ingore_gesture_title\">忽略触控笔按键手势</string>\n    <string name=\"various_mipad_input_ingore_gesture_desc\">忽略触控笔长按按键时的手势</string>\n    <string name=\"various_mipad_input_need_finger_num_title\">交换手势所需的手指数量</string>\n    <string name=\"various_mipad_input_need_finger_num_desc\">将三指截屏、三指长按区域截屏、三指横向分屏手势更改为四指触发，切换应用手势更改为三指触发</string>\n\n    <string name=\"custom_background_blur_enabled\">高斯模糊</string>\n    <string name=\"custom_background_blur_radius\">模糊半径</string>\n    <string name=\"custom_background_color\">颜色</string>\n    <string name=\"custom_background_color_alpha\">背景颜色透明度</string>\n    <string name=\"custom_background_corner_radius\">圆角</string>\n\n    <string name=\"custom_blur_enabled\">背景模糊</string>\n    <string name=\"various_blur_radius\">模糊半径</string>\n    <string name=\"various_background_corner_radius\">背景圆角</string>\n    <string name=\"various_background_alpha\">背景遮罩透明度</string>\n    <string name=\"various_background_color\">背景颜色</string>\n\n    <string name=\"various_dialog_window_blur_title\">模糊</string>\n    <string name=\"various_dialog_gravity\">弹窗位置</string>\n    <string name=\"various_dialog_margin_horizontal\">弹窗垂直边距</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">弹窗距屏幕两侧的距离</string>\n    <string name=\"various_dialog_margin_bottom\">弹窗底部边距</string>\n    <string name=\"various_dialog_margin_bottom_desc\">弹窗距屏幕底部的距离</string>\n    <string name=\"various_dialog_window_blur\">窗口模糊</string>\n    <string name=\"various_dialog_window_blur_radius\">窗口模糊半径</string>\n\n    <string name=\"location_data_title\">数据库</string>\n    <string name=\"various_location_simulation_1_title\">任务 1</string>\n    <string name=\"various_location_simulation_2_title\">任务 2</string>\n    <string name=\"various_location_simulation_3_title\">任务 3</string>\n    <string name=\"various_location_simulation_all_title\">通用</string>\n    <string name=\"location_simulation_package_name\">包名</string>\n    <string name=\"location_simulation_location\">位置</string>\n    <string name=\"location_simulation_location_custom\">选择位置</string>\n    <string name=\"location_simulation_network\">网络</string>\n    <string name=\"location_simulation_operator_fix\">运营商伪装修复</string>\n    <string name=\"location_simulation_mac\">Mac 地址</string>\n    <string name=\"location_simulation_wifi\">WIFI</string>\n    <string name=\"location_simulation_router_mac\">路由器 Mac 地址</string>\n    <string name=\"location_simulation_work_title\">标题</string>\n    <string name=\"location_simulation_work_offset\">偏移</string>\n    <string name=\"location_simulation_work_base_station\">基站</string>\n    <string name=\"location_simulation_work_longitude_latitude\">经纬度</string>\n    <string name=\"location_simulation_work_remarks\">备注</string>\n\n    <string name=\"app_details_playstore\">使用应用商店打开</string>\n    <string name=\"app_details_launch\">启动</string>\n    <string name=\"app_details_nolaunch\">应用没有默认可启动的活动</string>\n    <string name=\"app_details_apk_file\">APK 目录</string>\n    <string name=\"app_details_apk_version_code\">应用版本号</string>\n    <string name=\"app_details_data_path\">数据目录</string>\n    <string name=\"app_details_app_uid\">用户标识符</string>\n    <string name=\"app_details_sdk\">目标 SDK 版本</string>\n    <string name=\"app_details_min_sdk\">最低 SDK 版本</string>\n\n    <string name=\"disable_app_settings\">这是一个坏主意！</string>\n    <string name=\"disable_app_title\">确定要禁用该应用吗？</string>\n    <string name=\"disable_app_text\">如果这是一个必要的系统应用，将其禁用可能会造成损坏</string>\n    <string name=\"disable_app_fail\">更改应用状态失败</string>\n\n    <string name=\"unlimited\">无限制</string>\n\n    <string name=\"calls\">通话</string>\n    <string name=\"system_volume\">系统</string>\n    <string name=\"notification_volume\">通知</string>\n    <string name=\"freeform_notification\">通知悬浮窗</string>\n    <string name=\"share_app\">分享至三方应用</string>\n\n    <string name=\"show_newmods_title\">标记新模块</string>\n\n    <string name=\"default_volume_stream_ring\">铃声</string>\n    <string name=\"default_volume_stream_media\">媒体</string>\n    <string name=\"default_volume_stream_tip\">通知</string>\n\n    <string name=\"open_with_test_picture\">图片</string>\n    <string name=\"open_with_test_audio\">音频</string>\n    <string name=\"open_with_test_media\">视频</string>\n    <string name=\"open_with_test_doc\">文档</string>\n    <string name=\"open_with_test_zip\">归档</string>\n    <string name=\"open_with_test_all\">全部</string>\n\n    <string name=\"location_custom\">自定义</string>\n\n    <string name=\"operator_fix_none\">不修复</string>\n    <string name=\"operator_fix_1\">方法一</string>\n    <string name=\"operator_fix_2\">方法二（推荐）</string>\n\n    <string name=\"custom_hook_new\">添加 Hook</string>\n    <string name=\"custom_hook_mode\">选择模式</string>\n\n    <string name=\"cemiuiler_notice\">下拉状态栏，同时展示快捷开关和系统通知</string>\n\n    <string name=\"cemiuiler_restart_quick\">快速重启作用域</string>\n\n    <string name=\"location_add\">添加</string>\n    <string name=\"location_delete\">删除</string>\n    <!--Tip-->\n    <string name=\"tip_0\">Tip: 叮咚~ 来了一条消息！      哦，是 Tip 啊，那没事了（</string>\n    <string name=\"tip_1\">Tip: 您可以在 \\\"关于-支持\\\" 中捐赠以支持和维护我们的开发。</string>\n    <string name=\"tip_2\">Tip: 想要联系开发者？Telegram@Sevtinge_PM_bot 或者 哔哩哔哩@绀漓丨Sevtinge。</string>\n    <string name=\"tip_3\">Tip: 想要加入群聊一起划水？Telegram@cemiuiler 或者在 QQ 搜索 247909573 加入群聊。</string>\n    <string name=\"tip_4\">Tip: Cemiuiler = Ceiler + MIUI, Ceiler = Ceil + er.</string>\n    <string name=\"tip_5\">Tip: 猜猜下一次看到这条 Tip 是什么时候？</string>\n    <string name=\"tip_6\">Tip: Make MIUI Great Again!</string>\n    <string name=\"tip_7\">Tip: 关注绀漓喵，关注绀漓谢谢喵~ (Github@sevtinge 或者 哔哩哔哩@绀漓丨Sevtinge)</string>\n    <string name=\"tip_8\">Tip: 理想中的乌托邦并不存在于现实中。</string>\n    <string name=\"tip_9\">Tip: 三江市趋于崩溃。</string>\n    <string name=\"tip_10\">Tip: 啊，这个世界真美好......       可惜这份美好不属于绀漓。</string>\n    <string name=\"tip_11\">Tip: 我保留了一些 bug，这样你才知道你用的是 Cemiuiler 。</string>\n    <string name=\"tip_12\">Tip: 你知道吗？其实 Tips 全是废话。(确信)</string>\n    <string name=\"tip_13\">Tip: 你知道吗？Cemiuiler 的生日在 5 月 1 日，而绀漓的在 2 月 2 日。</string>\n    <string name=\"tip_14\">Tip: 绀漓目前就读于山河大学三江市校区信息工程技术学院。</string>\n    <string name=\"tip_15\">Tip: 据说绀漓有两种不同的形态。</string>\n    <string name=\"tip_16\">Tip: 绀漓是小奶狐！(划掉)</string>\n    <string name=\"tip_17\">Tip: 铃柒柒有两种人格，一种是猫娘控，一种是萝莉控（x</string>\n    <string name=\"tip_18\">Tip: Cemiuiler 是电老虎 (暴论)</string>\n    <string name=\"tip_19\">Tip: 变成灰色的功能，如果没有特别注译的话，就是功能存在异常，暂时不打算开放给用户使用，简称饼</string>\n    <string name=\"tip_20\">Tip: 没事不要追新版 Canary，坏了不要催更（</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rHK/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">讓 MIUI 再次偉大！</string>\n    <string name=\"new_permission_wifi_state_desc\">在裝置的內部儲存空間新增和刪除檔案</string>\n    <string name=\"new_permission_location_desc\">用於提供緯度和經度等服務</string>\n    <string name=\"new_cta_agree_desc\">在使用過程中，為了提供您更多功能，我們可能會向您申請 Root/Su 權限。您可以隨時到權限管理調整所有權限的授權狀態，並請到您的 Root/Su 管理器管理 Root/Su 權限。</string>\n    <string name=\"new_cta_app_main_purpose\">修改系統應用程式</string>\n    <string name=\"new_cta_app_all_purpose_title\">歡迎使用 Cemiuiler，這個應用程式運行在 Xposed 框架上，您可以使用這個應用程式來劫持和修改其他支援的應用程式，以實現 MIUI 的增強功能。在使用過程中，為了提供您更多功能，我們可能會向您申請 Root/Su 權限。您可以到您的 Root/Su 管理器管理 Root/Su 權限。</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">繁體中文 (香港)</string>\n    <string name=\"translator\">聖小熊</string>\n    <string name=\"translator_url\">https://github.com/a406010503</string>\n    <string name=\"settings\">設定</string>\n    <string name=\"about\">關於</string>\n    <string name=\"about_use\">項目引用</string>\n    <string name=\"about_use_desc\">Cemiuiler 使用了以下開源項目的部分或全部內容，感謝這些項目的開發者提供的大力支援（排名順序不分先後）</string>\n    <string name=\"about_contributer\">貢獻者</string>\n    <string name=\"about_contributer_desc\">感謝以下貢獻者為 Cemiuiler 的開發提供了不同程度的幫助（排名順序不分先後）</string>\n    <string name=\"about_donation\">贊助</string>\n    <string name=\"about_donation_desc\">您可以在此處贊助以支援我們</string>\n    <string name=\"about_privacy\">隱私政策</string>\n    <string name=\"about_protocol\">用戶協議</string>\n    <string name=\"settings_data_title\">備份與還原</string>\n    <string name=\"settings_bug_title\">疑難排解</string>\n    <string name=\"settings_debug_title\">調試模式</string>\n    <string name=\"settings_hide_app_icon\">桌面圖示</string>\n    <string name=\"settings_icon\">設定圖示</string>\n    <string name=\"settings_icon_desc\">設定模組入口在系统設定中的位置</string>\n    <string name=\"settings_icon_disable\">禁用</string>\n    <string name=\"settings_icon_top\">頂部</string>\n    <string name=\"settings_icon_medium\">中部</string>\n    <string name=\"settings_icon_down\">底部</string>\n    <string name=\"settings_icon_mode\">圖示樣式</string>\n    <string name=\"settings_icon_miui_14\">圓角矩形樣式</string>\n    <string name=\"settings_icon_miui_13\">背景鏤空樣式</string>\n    <string name=\"settings_reboot\">重啟作用域</string>\n    <string name=\"settings_back\">備份模組設定</string>\n    <string name=\"settings_rest\">還原模組設定</string>\n    <string name=\"settings_reset\">重設模組設定</string>\n    <string name=\"reset_title\">確定要重設嗎？</string>\n    <string name=\"reset_desc\">重設模組設定後其所有數據將會被刪除！</string>\n    <string name=\"reset_okay\">已重設模組設定</string>\n    <string name=\"backup_success\">備份成功</string>\n    <string name=\"backup_failed\">備份失敗</string>\n    <string name=\"rest_title\">還原</string>\n    <string name=\"rest_success\">還原成功</string>\n    <string name=\"rest_failed\">還原失敗</string>\n    <string name=\"backup_ask\">您是否要寫入備份？</string>\n    <string name=\"backup_permission\">現在您必須手動啟用此選項的權限。</string>\n    <string name=\"rest_ask\">您是否要還原備份？</string>\n    <string name=\"rest_permission\">現在您必須手動啟用此選項的權限。</string>\n    <string name=\"disable_detailed_log\">禁用詳細日誌輸出</string>\n    <string name=\"disable_detailed_log_desc\">重新啟動設備以應用更改</string>\n    <string name=\"settings_safe_mode\">安全模式</string>\n    <string name=\"settings_safe_mode_desc\">禁用模組功能</string>\n    <string name=\"about_developer_title\">開發者</string>\n    <string name=\"about_translator_title\">翻譯者</string>\n    <string name=\"about_chat_title\">討論</string>\n    <string name=\"about_other_title\">其他</string>\n    <string name=\"about_qq_group\">QQ 群組</string>\n    <string name=\"about_qq_channel\">QQ 頻道</string>\n    <string name=\"about_tg_group\">Telegram 聊天室</string>\n    <string name=\"about_tg_channel\">Telegram 頻道</string>\n    <string name=\"about_github\">Github 存放庫</string>\n    <string name=\"about_github_desc\">本項目基於 AGPL-3.0 協議開源</string>\n    <string name=\"about_offical\">官網</string>\n    <string name=\"about_crwd\">Crowdin 翻譯</string>\n    <string name=\"about_crwd_desc\">協助我們將這個應用程式翻譯為您的語言</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">重啟 </string>\n    <string name=\"restart_app_desc\">確定要立即重啟%1$s嗎？</string>\n    <string name=\"tip\">提示</string>\n    <string name=\"hook_failed\">模組尚未啟動。\\n請檢查是否在寄生管理器中啟用。 如果是，請重新啟動或重新優化模組。</string>\n    <string name=\"kill_failed\">結束進程失敗，請檢查是否為 Cemiuiler 授予了 Root/Su 權限？</string>\n    <string name=\"pid_failed\">目標應用程式未運行，不需要重新啟動。</string>\n    <string name=\"reboot_failed\">重啟失敗，請檢查是否為 Cemiuiler 授予了 Root/Su 權限？</string>\n    <string name=\"expand_button_title\">進階</string>\n    <string name=\"not_set\">未設定</string>\n    <string name=\"copy\">複製</string>\n    <string name=\"more\">更多</string>\n    <string name=\"clearable_edittext_clear_description\">清空</string>\n    <string name=\"preference_on\">已開啟</string>\n    <string name=\"preference_off\">已關閉</string>\n    <string name=\"preference_copied\">已將%1$s複製到剪貼簿。</string>\n    <string name=\"preference_default_value_text\">預設</string>\n    <string name=\"preference_dialog_color_picker_default_title\">選擇顏色</string>\n    <string name=\"preference_dialog_color_picker_presets\">預設顏色</string>\n    <string name=\"preference_dialog_color_picker_custom\">自訂顏色</string>\n    <string name=\"preference_dialog_color_picker_transparency\">透明度</string>\n    <string name=\"preference_dialog_color_picker_select\">確認選擇</string>\n    <string name=\"abc_action_bar_home_description\">轉到首頁</string>\n    <string name=\"abc_action_bar_up_description\">轉到上一層級</string>\n    <string name=\"actionbar_button_up_description\">返回</string>\n    <string name=\"appcompat_action_mode_select_all\">全選</string>\n    <string name=\"appcompat_cancel_description\">取消</string>\n    <string name=\"appcompat_confirm_description\">確認</string>\n    <string name=\"appcompat_select_all_description\">全選</string>\n    <string name=\"appcompat_deselect_all_description\">全不選</string>\n    <string name=\"appcompat_delete_description\">刪除</string>\n    <string name=\"appcompat_search_action_mode_cancel\">取消</string>\n    <string name=\"appcompat_search_input_description\">搜索</string>\n    <string name=\"appcompat_actionbar_immersion_button_more_description\">更多</string>\n    <string name=\"appcompat_action_mode_inverse\">反選</string>\n    <string name=\"color_picker_alpha_text_transparent\">不透明度</string>\n    <string name=\"color_picker_tab_grid\">網格取色</string>\n    <string name=\"color_picker_tab_slider\">滑塊取色</string>\n    <string name=\"color_picker_view_page_text_hue\">色調</string>\n    <string name=\"color_picker_view_page_text_lightness\">亮度</string>\n    <string name=\"color_picker_view_page_text_saturation\">飽和度</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">頂部邊距</string>\n    <string name=\"bottom_margin\">底部邊距</string>\n    <string name=\"left_margin\">左側間距</string>\n    <string name=\"right_margin\">右側間距</string>\n    <string name=\"vertical_offset\">上下偏移量</string>\n    <string name=\"horizontal_alignment\">水準對齊</string>\n    <string name=\"feature\">功能</string>\n    <string name=\"recommend\">推薦</string>\n    <string name=\"editor\">編輯</string>\n    <string name=\"record\">錄影</string>\n    <string name=\"shot\">拍照</string>\n    <string name=\"portrait\">人像</string>\n    <string name=\"camera_pro\">專業</string>\n    <string name=\"enable\">啟用</string>\n    <string name=\"custom_enable\">啟用自訂</string>\n    <string name=\"search\">搜索</string>\n    <string name=\"floating_window\">小窗</string>\n    <string name=\"save_to_screen_title\">規範儲存位置</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">常規</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">擴展</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">固定寬度</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">防止相鄰元素左右抖動</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">加粗</string>\n    <!--Multi-list Array-->\n    <string name=\"array_close\">關閉</string>\n    <string name=\"array_default\">預設</string>\n    <string name=\"array_align_left\">左側</string>\n    <string name=\"array_align_right\">右側</string>\n    <string name=\"array_align_center\">置中</string>\n    <string name=\"array_netspeedicons_no\">無圖示</string>\n    <string name=\"array_bold\">加粗</string>\n    <string name=\"array_theme\">跟隨主題</string>\n    <string name=\"array_clock_center\">時鐘置中</string>\n    <string name=\"array_clock_right\">時鐘置右</string>\n    <string name=\"array_clock_center_and_icon_left\">時鐘置中且圖示置左</string>\n    <string name=\"array_clock_default\">預設</string>\n    <string name=\"array_clock_geek\">極客</string>\n    <string name=\"array_battery_both\">兩者</string>\n    <string name=\"array_battery_power\">僅功率</string>\n    <string name=\"array_battery_current\">僅電流</string>\n    <string name=\"array_battery_temp\">電池溫度</string>\n    <string name=\"array_cpu_temp\">CPU 溫度</string>\n    <string name=\"array_global_actions_none\">無動作</string>\n    <string name=\"array_global_actions_notif\">打開通知中心</string>\n    <string name=\"array_global_actions_eqs\">展開快速設定頁面</string>\n    <string name=\"array_global_actions_lock\">鎖定螢幕</string>\n    <string name=\"array_global_actions_sleep\">螢幕待機</string>\n    <string name=\"array_global_actions_screenshot\">截圖</string>\n    <string name=\"array_global_actions_menu\">打開選單</string>\n    <string name=\"array_global_actions_recents\">打開最近任務</string>\n    <string name=\"array_global_actions_volume\">打開音量對話框</string>\n    <string name=\"array_global_actions_volume_up\">提高音量</string>\n    <string name=\"array_global_actions_volume_down\">降低音量</string>\n    <string name=\"array_global_actions_launch\">啟動應用程式</string>\n    <string name=\"array_global_actions_launch_choose\">選擇應用程式</string>\n    <string name=\"array_global_actions_shortcut\">啟動快捷方式</string>\n    <string name=\"array_global_actions_activity\">啟動活動</string>\n    <string name=\"array_global_actions_toggle\">切換功能</string>\n    <string name=\"array_global_actions_back\">切換上一個應用程式</string>\n    <string name=\"array_global_actions_forceclose\">強制關閉當前應用程式</string>\n    <string name=\"array_global_actions_powermenu\">打開電源擴展選單</string>\n    <string name=\"array_global_actions_powermenu_short\">電源選單</string>\n    <string name=\"array_global_actions_clear_memory\">清理記憶體</string>\n    <string name=\"array_global_actions_invert_colors\">顏色反轉</string>\n    <string name=\"array_global_actions_switchkeyboard\">切換鍵盤</string>\n    <string name=\"array_global_actions_goback\">返回</string>\n    <string name=\"array_global_actions_onehanded_left\">單手模式（左）</string>\n    <string name=\"array_global_actions_onehanded_right\">單手模式（右）</string>\n    <string name=\"array_global_actions_scrolltotop\">回到頂部</string>\n    <string name=\"array_global_actions_expandsidebar\">展開側邊欄</string>\n    <string name=\"array_global_actions_floatingwindow\">迷你小窗</string>\n    <string name=\"array_global_actions_pinningwindow\">窗口貼邊</string>\n    <string name=\"array_align_top\">頂部</string>\n    <string name=\"array_align_bottom\">底部</string>\n    <string name=\"array_discrete\">分離</string>\n    <string name=\"array_gradual\">緩慢</string>\n    <string name=\"array_rainbow\">彩虹</string>\n    <string name=\"various_install_app_info_version_name\">版本名稱</string>\n    <string name=\"various_install_app_info_version_code\">版本號碼</string>\n    <string name=\"various_install_app_info_sdk\">支援 SDK</string>\n    <string name=\"various_install_app_size\">應用程式大小</string>\n    <string name=\"charge_animation_entries_disable\">禁用</string>\n    <string name=\"charge_animation_entries_aura\">光暈</string>\n    <string name=\"charge_animation_entries_stream\">流光</string>\n    <string name=\"charge_animation_entries_alpha\">律動</string>\n    <string name=\"status_bar_icon_mode_default\">預設</string>\n    <string name=\"status_bar_icon_mode_on\">總是顯示</string>\n    <string name=\"status_bar_icon_mode_off\">總是隱藏</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">僅在未連接時隱藏</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">僅在響鈴前顯示</string>\n    <string name=\"seek_points_roll\">僅在滑動螢幕時顯示</string>\n    <string name=\"seek_points_edit\">僅在編輯模式中顯示</string>\n    <string name=\"home_mode_day\">淺色模式</string>\n    <string name=\"home_mode_dark\">深色模式</string>\n    <string name=\"dialog_gravity_medium\">置中</string>\n    <string name=\"dialog_gravity_down\">底部</string>\n    <string name=\"collapse_miui_title_off\">折疊</string>\n    <string name=\"collapse_miui_title_on\">展開</string>\n    <string name=\"collapse_miui_title_off_always\">總是折疊</string>\n    <string name=\"collapse_miui_title_on_always\">總是展開</string>\n    <string name=\"link_open_mode_default\">系统預設</string>\n    <string name=\"link_open_mode_mi\">小米瀏覽器</string>\n    <string name=\"app_sort_running\">預設排序</string>\n    <string name=\"app_sort_name\">應用程式名稱</string>\n    <string name=\"app_sort_frequency\">使用頻率</string>\n    <string name=\"app_sort_storage\">儲存空間佔用</string>\n    <string name=\"app_sort_install\">安裝時間</string>\n    <string name=\"array_bluetooth_tile_style_3rows\">三個大磁貼</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\">大尺寸磁貼與兩個小磁貼</string>\n    <string name=\"array_pa_blur_official\">官方自備模糊</string>\n    <string name=\"array_bpa_blur_customize\">自訂背景模糊</string>\n    <string name=\"control_center_sunshine_mode_default\">關閉</string>\n    <string name=\"control_center_sunshine_mode_one\">系統預設模式</string>\n    <string name=\"control_center_sunshine_mode_two\">強制最大亮度</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">系统框架</string>\n    <string name=\"system_framework_volume_title\">音量</string>\n    <string name=\"system_framework_other_title\">其他</string>\n    <string name=\"system_framework_display_title\">顯示</string>\n    <string name=\"system_framework_phone_title\">網絡</string>\n    <string name=\"system_framework_bubble_title\">氣泡通知</string>\n    <string name=\"system_framework_freeform_count\">多小窗</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">禁用小窗應用程式黑名單</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">忽略系统黑名單與軟體禁用小窗</string>\n    <string name=\"system_framework_freeform_sticky\">記住狀態</string>\n    <string name=\"system_framework_freeform_bubble\">小窗氣泡</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">將所有小窗轉為迷你小窗</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">在最近任務中將所有小窗轉為迷你小窗顯示\\n此功能為實驗性功能，具有較高不穩定性</string>\n    <string name=\"system_framework_freeform_jump\">跳轉應用程式使用小視窗開啟</string>\n    <string name=\"system_framework_freeform_title_desc\">在下列場景中，需要跳轉至其他應用程式時將使用小視窗開啟</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">僅支援鏈接</string>\n    <string name=\"system_framework_default_volume_stream\">預設調整音量</string>\n    <string name=\"system_framework_volume_first_press\">音量即時調整</string>\n    <string name=\"system_framework_volume_separate_control\">音量獨立控制</string>\n    <string name=\"system_framework_volume_disable_safe\">移除高音量安全限制</string>\n    <string name=\"system_framework_volume_separate_slider\">通知音量滑動條</string>\n    <string name=\"system_framework_volume_media_steps\">媒體音量階數</string>\n    <string name=\"system_framework_volume_media_steps_desc\">可能會導致音量條的滾動卡頓或藍牙音量異常</string>\n    <string name=\"system_framework_volume_steps\">音量級數倍增</string>\n    <string name=\"system_ui_display_cutout_title\">顯示瀏海</string>\n    <string name=\"system_ui_display_hide_cutout\">隱藏屏幕瀏海</string>\n    <string name=\"system_ui_display_brightness_title\">亮度</string>\n    <string name=\"system_ui_display_auto_brightness\">自動亮度範圍</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">自訂自動亮度的最小值和最大值</string>\n    <string name=\"system_ui_display_min_brightness\">最小亮度</string>\n    <string name=\"system_ui_display_max_brightness\">最大亮度</string>\n    <string name=\"system_ui_display_toast_times_title\">顯示時長調整</string>\n    <string name=\"system_ui_display_toast_times_desc\">修改 Toast 顯示時長，顯示時長始終大於 1 秒</string>\n    <string name=\"system_framework_phone_network_title\">網絡設定</string>\n    <string name=\"phone_double_5g_nr\">雙卡 5G (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">雙卡同時使用 5G 網絡 (卡 2 僅支援 NSA)</string>\n    <string name=\"phone_double_5g_sa\">雙卡 SA (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">實驗性功能。使卡 2 支援 SA</string>\n    <string name=\"system_framework_phone_band_title\">頻段設定</string>\n    <string name=\"phone_n1\">解鎖 N1 頻段</string>\n    <string name=\"phone_n1_desc\">支援 N1 頻段 (NR)</string>\n    <string name=\"phone_n28\">解鎖 N28 頻段</string>\n    <string name=\"phone_n28_desc\">支援 N28 頻段 (NR)</string>\n    <string name=\"phone_n5_n8\">解鎖 N5/N8 頻段</string>\n    <string name=\"phone_n5_n8_desc\">在撥號介面輸入 *#*#65686633#*#* 以打開 N5/N8 頻段，若顯示 enable N5 and N8 Mode，則開啟成功</string>\n    <string name=\"system_framework_screen_all_rotations\">螢幕旋轉</string>\n    <string name=\"system_framework_allow_untrusted_touch\">允許不受信任的觸摸操作</string>\n    <string name=\"system_framework_allow_uninstall\">允許卸載部分預裝 APP</string>\n    <string name=\"system_framework_allow_uninstall_desc\">該功能具有一定危險性</string>\n    <string name=\"system_framework_disable_app_link_verify\">禁用應用程式連結驗證</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">打開連結時還原為直接打開支援的應用程式，無需在應用程式設定中勾選支援的連結</string>\n    <string name=\"system_framework_clean_share_menu\">清理分享選單</string>\n    <string name=\"system_framework_clean_share_apps\">已選擇的應用程式</string>\n    <string name=\"system_framework_clean_share_apps_desc\">選取的應用程式將不會出現在分享選單中</string>\n    <string name=\"system_framework_clean_open_menu\">清理打開方式選單</string>\n    <string name=\"system_framework_clean_open_apps\">已選擇的應用程式</string>\n    <string name=\"system_framework_clean_open_apps_desc\">選取的應用程式將不會出現在開啟方式選單中</string>\n    <string name=\"system_other_flag_secure\">允許截圖</string>\n    <string name=\"system_other_flag_secure_desc\">允許對任意應用程式進行截圖和錄製螢幕</string>\n    <string name=\"system_other_delete_on_post_notification\">移除上層顯示通知</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">移除「此應用程式正顯示在螢幕上其他應用程式的上層」通知</string>\n    <string name=\"system_framework_share_menu_test\">分享選單測試</string>\n    <string name=\"system_framework_open_with_menu_test\">打開方式選單測試</string>\n    <string name=\"system_framework_other_use_original_animation\">過渡動畫使用原生樣式</string>\n    <string name=\"system_framework_other_speed_install\">快速安裝</string>\n    <string name=\"system_framework_other_speed_install_desc\">安裝至運行記憶體以提升安裝速度，需要系统底層支援</string>\n    <string name=\"system_framework_other_thermal_brightness\">停用自动降低屏幕亮度</string>\n    <string name=\"system_framework_other_thermal_brightness_more\">僅限非溫控導致的自動降低屏幕亮度</string>\n    <string name=\"system_framework_other_disable_cleaner\">禁止關閉後台應用程式</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">實驗性功能，可能導致運行內存佔用異常</string>\n    <string name=\"system_framework_disable_72h_verify\">禁用每 72 小時驗證鎖定螢幕密碼</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">包管理服務</string>\n    <string name=\"system_framework_core_patch_downgr\">允許降級安裝應用程式</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">允許應用程式在安裝新版本的情況下直接覆蓋安裝舊版本</string>\n    <string name=\"system_framework_core_patch_auth_creak\">禁用應用程式包管理器簽名校驗</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">關閉安裝應用程式時的簽名驗證，可以安裝被竄改的應用程式</string>\n    <string name=\"system_framework_disable_integrity\">禁用系统完整性校驗</string>\n    <string name=\"system_framework_disable_integrity_desc\">禁止自動恢復被更改的內容。當啟用「禁用應用程式包管理器簽名校驗」功能時，它將默認啟用。\\n僅支援 Android 13 及以上版本</string>\n    <string name=\"system_framework_core_patch_digest_creak\">禁用 APK 簽名校驗</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">允許直接覆蓋安裝同包名且不同簽名的應用程式</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">安裝時始終使用已安裝應用程式的簽名</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">該功能極度危險，僅在絕對需要時啟用</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">增強模式</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">可以解決一些應用程式內部的完整性校驗，一般不需要開啟</string>\n    <!--Browser-->\n    <string name=\"browser\">瀏覽器</string>\n    <string name=\"browser_debug_mode\">開發者選項</string>\n    <string name=\"browser_debug_mode_desc\">不支援 17.5.xxxxx 及以上版本</string>\n    <!--Camera-->\n    <string name=\"camera\">相機</string>\n    <string name=\"camera_features_unlock_aiwatermark\">解鎖 AI 浮水印</string>\n    <string name=\"camera_features_unlock_ambilight\">解鎖長曝光</string>\n    <string name=\"camera_features_unlock_clone\">解鎖魔法分身</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">解鎖化妝鏡</string>\n    <string name=\"camera_features_unlock_doc\">解鎖文件</string>\n    <string name=\"camera_features_unlock_idcard\">解鎖身份證拍攝</string>\n    <string name=\"camera_features_unlock_dualcam\">解鎖前後雙景</string>\n    <string name=\"camera_features_unlock_duration\">解鎖延時攝影</string>\n    <string name=\"camera_features_unlock_milive\">解鎖短影片</string>\n    <string name=\"camera_features_unlock_moon\">解鎖超級月亮</string>\n    <string name=\"camera_features_unlock_pano\">解鎖全景</string>\n    <string name=\"camera_features_unlock_pixel\">解鎖超解析度模式</string>\n    <string name=\"camera_features_unlock_portrait\">解鎖人像</string>\n    <string name=\"camera_features_unlock_slow\">解鎖慢動作</string>\n    <string name=\"camera_features_unlock_videosky\">解鎖 Video-sky</string>\n    <string name=\"camera_features_unlock_vlog\">解鎖 VLOG</string>\n    <string name=\"camera_features_unlock_vlog_pro\">解鎖 VLOG Pro</string>\n    <string name=\"camera_features_unlock_film\">解鎖電影鏡頭</string>\n    <string name=\"camera_features_unlock_film_delay\">解鎖長曝光延時</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">解鎖滑動變焦</string>\n    <string name=\"camera_features_unlock_film_dream\">解鎖平行夢境</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">解鎖慢快門</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">解鎖時光倒流</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">解鎖時間靜止</string>\n    <string name=\"camera_shot_hand_gesture\">解鎖手勢拍照</string>\n    <string name=\"camera_shot_color_enhance\">解鎖鮮豔模式</string>\n    <string name=\"camera_shot_makeup\">解鎖妝容</string>\n    <string name=\"camera_shot_makeup_desc\">僅在使用前置鏡頭時生效</string>\n    <string name=\"camera_record_60fps\">解鎖 60FPS</string>\n    <string name=\"camera_record_60fps_desc\">部分畫質下不可用，部分設備硬體不支援</string>\n    <string name=\"camera_record_120fps\">解鎖 120FPS</string>\n    <string name=\"camera_record_120fps_desc\">僅 4K 模式支援，部分設備硬體不支援</string>\n    <string name=\"camera_record_audio_zoom\">解鎖音源變焦</string>\n    <string name=\"camera_record_hdr\">解鎖 HDR</string>\n    <string name=\"camera_record_ai\">解鎖 AI 模式</string>\n    <string name=\"camera_portrait_new_beauty\">解鎖新版美肌</string>\n    <string name=\"camera_portrait_new_beauty_desc\">僅在使用前置鏡頭時生效</string>\n    <string name=\"camera_portrait_cvlens\">解鎖大師鏡頭</string>\n    <string name=\"camera_portrait_cvlens_desc\">部分設備無法正常工作</string>\n    <string name=\"camera_pro_raw\">解鎖 RAW</string>\n    <string name=\"camera_pro_log\">解鎖 LOG</string>\n    <string name=\"camera_settings_heic\">解鎖 HEIF 格式</string>\n    <string name=\"camera_settings_track_focus\">解鎖萬物追焦</string>\n    <string name=\"camera_settings_predictive\">解鎖運動抓拍</string>\n    <string name=\"camera_settings_nevus\">解鎖除痣</string>\n    <string name=\"camera_settings_men_makeup\">解鎖男性妝容適配</string>\n    <string name=\"camera_settings_lab_options\">啟用實驗室選項</string>\n    <string name=\"camera_settings_track_eyes\">解鎖人眼追焦</string>\n    <!--Clock-->\n    <string name=\"clock\">時鐘</string>\n    <string name=\"clock_enable_hour_glass\">解鎖計時器沙漏動畫</string>\n    <string name=\"clock_enable_hour_glass_desc\">不支援 13.65.0 及以上版本</string>\n    <!--File Manager-->\n    <string name=\"fileexplorer\">檔案管理</string>\n    <string name=\"file_explorer_can_selectable\">資料夾名稱可以選擇操作</string>\n    <string name=\"file_explorer_is_single_line\">資料夾名稱以單行顯示</string>\n    <!--Phone-->\n    <string name=\"incallui\">電話</string>\n    <string name=\"incallui_hide_crbt\">隱藏電話彩鈴</string>\n    <string name=\"incallui_answer_in_head_up\">從浮動通知接聽電話時不進入全螢幕</string>\n    <!--Message-->\n    <string name=\"mms\">簡訊</string>\n    <string name=\"mms_disable_ad\">禁用推廣</string>\n    <string name=\"mms_disable_ad_desc\">移除螢幕下方快捷按鈕與簡訊內容下方推廣</string>\n    <!--Phone Service-->\n    <string name=\"phone\">電話服務</string>\n    <string name=\"phone_smart_dual_sim\">解鎖智慧雙卡切換</string>\n    <string name=\"phone_vice_slot_volte\">副卡 VoLTE 通話時可聯網</string>\n    <string name=\"phone_vice_slot_volte_desc\">在副卡通話時會將數據切換至副卡</string>\n    <!--Download management program-->\n    <string name=\"downloads\">下載管理程式</string>\n    <string name=\"various_fuck_xlDownload\">阻止建立 .xlDownload 資料夾</string>\n    <string name=\"various_fuck_xlDownload_desc\">防止下載管理程式在內部記憶體的根目錄上生成 .xlDownload 資料夾</string>\n    <!--System UI-->\n    <string name=\"system_ui\">系统介面</string>\n    <string name=\"system_ui_lockscreen_title\">鎖定螢幕</string>\n    <string name=\"system_ui_lockscreen_safe_title\">安全</string>\n    <string name=\"system_ui_lockscreen_ui_title\">UI</string>\n    <string name=\"system_ui_lockscreen_information_title\">訊息</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">亂序 PIN</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">隨機更改 PIN 鍵盤順序</string>\n    <string name=\"system_ui_lock_screen_password_free\">開機免輸入密碼</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">需要設備未啟用加密才會生效</string>\n    <string name=\"system_ui_lock_screen_password_free_tip\">當前設備已加密，此功能不可用</string>\n    <string name=\"system_ui_lock_screen_default_theme\">僅支援預設主題</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">鎖屏底部顯示充電資訊</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">顯示詳細電流</string>\n    <string name=\"system_ui_lock_screen_show_battery_temperature\">顯示電池溫度</string>\n    <string name=\"system_ui_lock_screen_show_spacing\">顯示刷新間隔</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">禁用相機</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">禁用資訊助理</string>\n    <string name=\"system_ui_lock_screen_current\">當前</string>\n    <string name=\"system_ui_lock_screen_show_second\">時鐘顯示秒數</string>\n    <string name=\"system_ui_lock_screen_blur_button\">相機和智慧助理按鈕背景模糊</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">時鐘強制使用系统字體</string>\n    <string name=\"system_ui_lock_screen_double_lock\">雙擊鎖定螢幕</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">雙擊空白處鎖定螢幕</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">隱藏勿擾模式通知</string>\n    <string name=\"system_ui_lock_screen_unlock_tip_title\">隱藏螢幕底部解鎖提示</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">鎖屏時隱藏狀態欄</string>\n    <string name=\"system_ui_navigation_title\">導航欄</string>\n    <string name=\"system_ui_navigation_handle_title\">手勢提示線</string>\n    <string name=\"system_ui_hide_navigation_bar\">隱藏導覽欄</string>\n    <string name=\"system_ui_hide_navigation_bar_more\">請重新啟動 「系統桌面」 和 「系統介面」</string>\n    <string name=\"system_ui_navigation_handle_custom\">手勢提示線自訂</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">高度</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">豎屏寬度</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">橫屏寬度</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">粗細</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">淺色背景下顏色</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">深色背景下顏色</string>\n    <string name=\"system_ui_navigation_custom\">自訂導航欄</string>\n    <string name=\"system_ui_navigation_custom_height\">竪屏導航欄高度</string>\n    <string name=\"system_ui_navigation_custom_height_land\">橫屏導航欄高度</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">竪屏導航欄框架高度</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">橫屏導航欄框架高度</string>\n    <string name=\"system_ui_statusbar_title\">狀態欄</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">圖示</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">網速指示器</string>\n    <string name=\"system_ui_statusbar_clock_title\">時鐘指示器</string>\n    <string name=\"system_ui_statusbar_device_title\">硬體指示器</string>\n    <string name=\"system_ui_statusbar_layout_title\">佈局</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_title\">相容模式</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_desc\">對所有異形螢幕強制開啟完整螢幕版面配置</string>\n    <string name=\"system_ui_statusbar_layout_mode_title\">佈局模式</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">雙擊狀態欄鎖屏</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">雙排蜂窩移動網絡圖示</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">圖示樣式</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">圖示縮放</string>\n    <string name=\"system_ui_status_bar_mobile_type_single\">蜂窩移動網絡類型圖示單獨顯示</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">顯示在信號左側</string>\n    <string name=\"system_ui_status_bar_mobile_type_only_show_network\">僅展示網絡卡片</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">隱藏移動網絡活動指示器</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">個性化文本內容</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">字體大小</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">交換電池的圖示和百分比位置</string>\n    <string name=\"system_ui_status_bar_battery_style_font_size\">電量百分比字體大小</string>\n    <string name=\"system_ui_status_bar_battery_style_font_mark_size\">電量百分比符號字體大小</string>\n    <string name=\"system_ui_status_bar_battery_style_vertical_offset\">電量百分比符號上下偏移量</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wi-Fi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">藍牙</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">行動網絡</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">位置</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">狀態圖示</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">通知圖示</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">電池</string>\n    <string name=\"system_ui_statusbar_iconmanage_call_title\">電話</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">圖示左側顯示</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">圖示右側顯示</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">從 Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Wi-Fi 標準</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">WIFI 熱點</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">網絡活動指示器</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">藍牙</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">藍牙電池</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">新 HD 圖示</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">小 HD 圖示</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">大 HD 圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">無 SIM 卡圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">SIM 卡 1 訊號圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">SIM 卡 2 訊號圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">显示逻辑</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">大網絡類型圖示</string>\n    <string name=\"system_ui_status_bar_icon_location\">位置訊息</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">鬧鐘</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">僅在鬧鐘響鈴前顯示鬧鐘圖示</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d 分鐘</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">飛行模式</string>\n    <string name=\"system_ui_status_bar_icon_vowifi\">隱藏 VoWiFi 圖示</string>\n    <string name=\"system_ui_status_bar_icon_headset\">耳機</string>\n    <string name=\"system_ui_status_bar_icon_volume\">音量</string>\n    <string name=\"system_ui_status_bar_icon_data_saver\">數據節省模式</string>\n    <string name=\"system_ui_status_bar_icon_zen\">免打擾模式</string>\n    <string name=\"system_ui_status_bar_icon_stealth\">隱藏無痕模式圖示</string>\n    <string name=\"system_ui_status_bar_icon_mute\">隱藏麥克風靜音圖示</string>\n    <string name=\"system_ui_status_bar_icon_speakerphone\">隱藏揚聲器靜音圖示</string>\n    <string name=\"system_ui_status_bar_icon_call_record\">隱藏錄製圖示</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">通知點數最大數量</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">通知圖示最大數量</string>\n    <string name=\"system_ui_status_bar_battery_percent\">隱藏電量百分比</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">隱藏電量百分比符號</string>\n    <string name=\"system_ui_status_bar_battery_charging\">隱藏充電指示器</string>\n    <string name=\"system_ui_status_bar_battery_icon\">隱藏電池圖示</string>\n    <string name=\"system_ui_status_bar_battery_style_title\">電池自訂</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">電量指示器</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">行動網絡</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">交換 Wi-Fi 與行動網絡</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">網絡速度</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">聲音情境</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">強制使用新 HD 圖示</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">僅支援部分系统版本</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">網速分隔符號</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">於水滴屏的設備上不顯示時間和網速間的分隔號</string>\n    <string name=\"system_ui_status_bar_hide_icon\">截圖時隱藏狀態欄</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">蜂窩移動網絡類型圖示</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">網速更新間隔</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">網速字體大小</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">值和單位雙排顯示</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">顯示上下行網速</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">上下行網速雙排顯示</string>\n    <string name=\"system_ui_statusbar_network_speed_swap_places\">交換上下行速度顯示位置</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">分別顯示傳入和傳出的網絡速度</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">隱藏慢速</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_all\">上下行網速緩慢時隱藏</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">當網速低時不再顯示指示器</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">慢速水準</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">網速值低於該水準時被認為慢，部分指示器圖示會有所不同</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">網速隱藏 *b/s 單位</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">指示器圖示</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">啟用自訂</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_ms\">%d ms</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_s\">%d s</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_m\">%d m</string>\n    <string name=\"system_ui_statusbar_network_speed_format_KBs\">%d KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_oneKBs\">1 KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_Bs\">B/s</string>\n    <string name=\"system_ui_statusbar_network_speed_lux\">%s lux</string>\n    <string name=\"system_ui_statusbar_clock_mode\">自訂時鐘模式</string>\n    <string name=\"system_ui_statusbar_clock_editor\">時鐘格式</string>\n    <string name=\"system_ui_statusbar_clock_year\">顯示年份</string>\n    <string name=\"system_ui_statusbar_clock_month\">顯示月份</string>\n    <string name=\"system_ui_statusbar_clock_date\">顯示日期</string>\n    <string name=\"system_ui_statusbar_clock_week\">顯示星期</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">顯示時辰</string>\n    <string name=\"system_ui_statusbar_clock_period\">顯示時段</string>\n    <string name=\"system_ui_statusbar_clock_second\">顯示秒數</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">隱藏間隔</string>\n    <string name=\"system_ui_statusbar_clock_double\">雙排顯示</string>\n    <string name=\"system_ui_statusbar_clock_double_mode_title\">雙排對齊方式</string>\n    <string name=\"system_ui_statusbar_clock_desc\">時鐘格式範例</string>\n    <string name=\"system_ui_statusbar_clock_size\">時鐘大小</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">雙排時鐘大小</string>\n    <string name=\"system_ui_statusbar_indicator_battery_title\">功耗相關</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">溫度相關</string>\n    <string name=\"system_ui_statusbar_battery_size\">字體大小</string>\n    <string name=\"system_ui_statusbar_battery_show\">顯示內容</string>\n    <string name=\"system_ui_statusbar_temp_decimal_places\">隱藏小數位</string>\n    <string name=\"system_ui_statusbar_battery_disable\">隱藏單位</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">右側顯示</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">電流總顯示正值</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">單排顯示</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">反序</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">僅在充電時顯示</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">狀態更新間隔</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">更改 CPU 溫度獲取源</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">輸入 /sys/devices/virtual/thermal/ 資料夾下 thermal_zone* 資料夾後的數位以指定源</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">置中</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">圓角</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">限制可見性</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">垂直對齊</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">滿電量顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">低電量顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">省電模式顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">充電顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">高度</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">水準邊距</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">透明度</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">發光</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">低電量水準</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">測試</string>\n    <string name=\"system_ui_controlcenter_title\">通知與控制中心</string>\n    <string name=\"system_ui_controlcenter_card_title\">卡片</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">磁貼</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">通知</string>\n    <string name=\"system_control_center_qs_detail_bg\">卡片背景透明度</string>\n    <string name=\"system_control_center_5g_tile\">5G 網絡開關</string>\n    <string name=\"system_control_center_5g_toggle_label\">5G 網絡</string>\n    <string name=\"system_control_center_sunshine_mode\">陽光模式</string>\n    <string name=\"system_ui_control_auto_close\">磁貼自動收起</string>\n    <string name=\"system_ui_control_auto_close_more\">開啓後點擊磁貼會自動收起狀態欄</string>\n    <string name=\"system_control_center_qs_tile_label\">移除標題</string>\n    <string name=\"system_control_center_qs_rows\">行數</string>\n    <string name=\"system_control_center_qs_rows_format\">%d 行</string>\n    <string name=\"system_control_center_qs_rows_horizontal\">行 (橫向)</string>\n    <string name=\"system_control_center_qs_columns\">列數</string>\n    <string name=\"system_control_center_qs_columns_format\">%d 列</string>\n    <string name=\"system_control_center_qs_columns_horizontal\">列（橫向）</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">妙播入口</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">小米妙享</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">智慧生活</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">面板詳情背景透明度</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">通知設定</string>\n    <string name=\"system_ui_control_center_notification_blur_fix\">通知優化</string>\n    <string name=\"system_ui_control_center_notification_blur_fix_desc\">實驗性功能，僅向 Android 13 及以上設備使用，啓用後將對部分區域的通知模糊進行優化\\n可能會存在部分設備系统介面程式崩潰的問題</string>\n    <string name=\"system_ui_control_center_blur_radius\">通知模糊程度</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">不含下拉通知</string>\n    <string name=\"system_ui_control_center_corner_radius\">通知模糊區域圓角</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">預設主題無需調節</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">通知背景透明度</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">下拉通知背景透明度</string>\n    <string name=\"system_ui_control_center_fix_media_control_panel\">修正音樂面板背景圖異常</string>\n    <string name=\"system_ui_control_center_compact_notice\">緊湊通知</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">減小通知垂直邊框</string>\n    <string name=\"system_ui_control_center_redirect_notice\">重定向通知設定</string>\n    <string name=\"system_ui_control_center_redirect_notice_desc\">打開通知功能表的設置將導航到目標通道設定，而不是應用通知設定</string>\n    <string name=\"system_ui_control_center_show_weather\">顯示天氣</string>\n    <string name=\"system_ui_control_center_show_weather_city\">顯示地區</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">亮屏時靜音</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">亮屏時彈出通知不播放提示音</string>\n    <string name=\"system_ui_control_center_rounded_rect\">圓角矩形磁貼</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">交換控制中心與通知中心位置</string>\n    <string name=\"system_ui_controlcenter_new_title\">新控制中心</string>\n    <string name=\"system_ui_controlcenter_old_title\">經典控制中心</string>\n    <string name=\"system_ui_controlcenter_unlock_old_title\">解鎖控制中心樣式</string>\n    <string name=\"system_ui_controlcenter_enable_title\">自訂行列數</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">豎屏顯示 5 行時會隱藏標籤，橫屏時則限制為 3 行</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">豎屏時會額外增加一列\\n如果您的 ROM 具有快速設置緊湊佈局選項，不管是橫屏還是豎屏都會增加其他列</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">橫屏時將會額外增加一列</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">折疊面板中的列數</string>\n    <string name=\"system_control_center_old_qs_grid_columns_horizontal\">折疊面板中的列數（橫向）</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">藍牙磁貼樣式</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">調整藍牙磁貼位置至網絡磁貼旁</string>\n    <string name=\"system_ui_other_title\">其他</string>\n    <string name=\"system_ui_charge_animation_title\">充電動畫</string>\n    <string name=\"system_ui_charge_animation_style\">充電動畫樣式</string>\n    <string name=\"system_ui_charge_animation_style_desc\">選擇鎖定螢幕充電動畫樣式</string>\n    <string name=\"system_ui_origin_charge_animation\">原生充電動畫</string>\n    <string name=\"system_ui_another_title\">其他</string>\n    <string name=\"system_ui_notification_freeform\">更多應用程式通知攔下拉打開小窗</string>\n    <string name=\"system_ui_notification_freeform_desc\">可能不支援 Mi Push 推送的通知</string>\n    <string name=\"system_ui_monet_title\">主題色</string>\n    <string name=\"system_ui_monet_overlay_custom\">自訂主題顏色</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">自訂主題顏色，而不是從桌布中提取顏色</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">選擇主題顏色</string>\n    <string name=\"system_ui_volume_timer\">擴展計時器</string>\n    <string name=\"system_ui_qs_label\">快捷開關標籤</string>\n    <string name=\"system_ui_notification_title\">通知</string>\n    <string name=\"system_ui_other_notification_fix\">禁用通知白名單</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">音量條模糊</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">僅供 Android 12 及以上 MTK 設備使用，可能存在 GPU 負載較高的情形</string>\n    <!--Settings-->\n    <string name=\"system_settings\">設定</string>\n    <string name=\"system_settings_international_build\">國際版本設定頁面</string>\n    <string name=\"system_settings_safe_wifi\">查看已保存的 WIFI 密碼</string>\n    <string name=\"system_settings_safe_wifi_desc\">解锁管理已保存網絡\\n路徑：設定-WLAN-高級設定-管理保存的網絡</string>\n    <string name=\"system_settings_wifipassword_btn_title\">查看</string>\n    <string name=\"system_settings_wifi_password_label\">密碼</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">WiFi 詳情</string>\n    <string name=\"system_settings_novelty_haptic_title\">解鎖新版觸感調節頁面</string>\n    <string name=\"system_settings_novelty_haptic_desc\">僅供有「聲音與觸感-觸感」頁面的設備使用</string>\n    <string name=\"system_settings_enable_pad_area\">解鎖 Pad 專區</string>\n    <string name=\"system_settings_enable_fold_area\">解鎖 Fold 專區</string>\n    <string name=\"system_settings_enable_area_desc\">不支援的設備會導致系統設定開啟後崩潰</string>\n    <string name=\"system_settings_connection_sharing_title\">連接與分享</string>\n    <string name=\"system_settings_new_nfc_page\">新版 NFC 頁面</string>\n    <string name=\"system_settings_new_nfc_page_desc\">開啟後，不支援的設備預設付款應用程式無法選中小米錢包</string>\n    <string name=\"system_settings_accessibility_title\">快速啟動手勢</string>\n    <string name=\"system_settings_area_screenshot\">解鎖區域截圖</string>\n    <string name=\"system_settings_lab_title\">特色功能</string>\n    <string name=\"system_settings_voip_assistant_controller\">網絡通話助手</string>\n    <string name=\"system_settings_ai_image_title\">AI 大師畫質引擎</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">解鎖超解析度增強</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">解鎖 AI 智慧場景最佳化與影片畫質增強</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">解鎖動態畫面補償</string>\n    <string name=\"system_settings_permission_title\">權限</string>\n    <string name=\"system_settings_permission_show_app_up\">上層權限免翻應用程式列表</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">還原舊版行為，直接跳轉對應應用程式「顯示在其他應用程式上層」的權限開關</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">安裝未知應用程式許可權免翻應用程式列表</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">使用國際版行為，直接跳轉對應應用程式的「安裝未知應用程式」許可權開關</string>\n    <string name=\"system_settings_develop_title\">開發者選項</string>\n    <string name=\"system_settings_apps_freezer\">强制顯示暫停執行已緩存的應用</string>\n    <string name=\"system_settings_apps_freezer_more\">開啓后可在\\\"開發者選項\\\"中找到此功能，為强制顯示，不保證可用</string>\n    <string name=\"system_settings_develop_speed_mode\">極致模式</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">在不支援的機型上開啟後不會顯示入口</string>\n    <string name=\"system_settings_window_animation_scale\">視窗動畫縮放</string>\n    <string name=\"system_settings_transition_animation_scale\">轉場動畫比例縮放</string>\n    <string name=\"system_settings_animator_duration_scale\">動畫持續時間縮放</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">主題桌布</string>\n    <string name=\"theme_manager_version_code_modify\">禁用 MIUI 版本檢測</string>\n    <string name=\"theme_manager_diable_ads\">禁用廣告</string>\n    <string name=\"theme_manager_diable_ads_desc\">將「猜你喜歡」的廣告替換為空白卡片，其餘位置的廣告將完全移除</string>\n    <string name=\"theme_manager_crack\">主題破解</string>\n    <string name=\"theme_manager_enable_pad_theme\">啟用 Pad 主題</string>\n    <string name=\"theme_manager_enable_fold_theme\">啟用 Fold 主題</string>\n    <!--Updater-->\n    <string name=\"updater\">系统更新</string>\n    <string name=\"updater_fuck_vab\">移除 OTA 驗證</string>\n    <string name=\"updater_fuck_vab_desc\">僅支援 VAB 設備，其他非 VAB 設備請不要開啟！\\n功能特點：無需內測權限即可刷入完整內測卡刷包\\n注意事項：\\n- 跨不同版本類型刷入後建議清除數據\\n- 不支援任何非官方 ROM 使用\\n- 此功能有一定危險性，請在了解 Fastboot 操作後再評估是否開啟</string>\n    <string name=\"updater_miui_version\">偽裝 MIUI 版本</string>\n    <string name=\"updater_miui_version_desc\">僅對系统更新修改，可在一定程度上遮罩系统更新</string>\n    <string name=\"updater_device\">偽裝機型</string>\n    <string name=\"updater_device_desc\">輸入目標設備代號以指定設備，可用於獲取其他機型的 ROM 包，此功能極度危險</string>\n    <!--Permissions-->\n    <string name=\"lbe\">權限管理服務</string>\n    <string name=\"clipboard\">剪貼簿</string>\n    <string name=\"lbe_disable_clipboard_tip\">隱藏 Toast 提示</string>\n    <string name=\"lbe_clipboard_tip_toast\">使用 Toast 提示讀取剪貼簿</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">隱藏對話框並允許應用程式默認讀取剪貼簿</string>\n    <string name=\"lbe_clipboard_tip\">讀取了剪貼簿</string>\n    <!--Cast-->\n    <string name=\"milink\">投影</string>\n    <string name=\"milink_unlock_mishare\">解鎖小米妙享</string>\n    <!--Always-on display-->\n    <string name=\"aod\">萬象息屏</string>\n    <string name=\"aod_unlock_always_on_display\">解鎖息屏顯示時長限制</string>\n    <!--Taplus-->\n    <string name=\"content_extension\">傳送門</string>\n    <string name=\"content_extension_browser\">使用協力廠商瀏覽器</string>\n    <string name=\"content_extension_browser_desc\">使傳送門不強制使用 MIUI 瀏覽器進行搜尋，需自行選擇預設瀏覽器</string>\n    <string name=\"content_extension_unlock_taplus_title\">解鎖傳送門</string>\n    <string name=\"content_extension_unlock_taplus_horizontal_title\">允許在橫向螢幕上使用傳送門</string>\n    <string name=\"content_extension_double_press\">開放雙指長按</string>\n    <string name=\"content_extension_super_image\">開放超解析度圖片</string>\n    <string name=\"content_extension_super_image_summary\">需要系统底層支援</string>\n    <string name=\"content_extension_link_open_mode\">鏈接開啟方式</string>\n    <string name=\"content_extension_link_open_mode_desc\">選擇一個瀏覽器以打開鏈接</string>\n    <!--Mi Canvas-->\n    <string name=\"creation\">小米創作</string>\n    <string name=\"creation_unlock\">移除限制手機使用規則</string>\n    <!--Gallery-->\n    <string name=\"gallery\">相簿</string>\n    <string name=\"gallery_enable_hdr_enhanced\">解鎖超動態顯示</string>\n    <string name=\"gallery_enable_pdf\">解鎖生成 PDF</string>\n    <string name=\"gallery_enable_ocr\">解鎖提取文字</string>\n    <string name=\"gallery_enable_ocr_form\">解鎖提取表格</string>\n    <string name=\"gallery_enable_id_photo\">解鎖證件照</string>\n    <string name=\"gallery_enable_photo_movie\">解鎖照片電影</string>\n    <string name=\"gallery_enable_video_post\">解鎖影片特效</string>\n    <string name=\"gallery_enable_video_editor\">解鎖影片剪輯</string>\n    <string name=\"gallery_enable_text_yanhua\">解鎖文字煙花</string>\n    <string name=\"gallery_enable_remover_2\">解鎖魔法消除</string>\n    <string name=\"gallery_enable_magic_matting\">解鎖魔法摳圖</string>\n    <string name=\"gallery_enable_magic_sky\">解鎖魔法換天</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">MIUI 安全性群組件</string>\n    <string name=\"guard_provider_disable_upload_applist\">阻止自動上傳已安裝的應用程式列表</string>\n    <!--System launcher-->\n    <string name=\"home\">系统桌面</string>\n    <string name=\"home_gesture\">手勢與導航欄</string>\n    <string name=\"home_navigation_title\">導航</string>\n    <string name=\"home_navigation_back_area_height\">返回手勢區域高度</string>\n    <string name=\"home_navigation_back_area_width\">返回手勢區域寬度</string>\n    <string name=\"home_gesture_title2\">手勢</string>\n    <string name=\"home_gesture_mainscreen_title\">主畫面</string>\n    <string name=\"home_gesture_gesture_title\">全屏幕手勢</string>\n    <string name=\"home_gesture_double_tap\">雙擊</string>\n    <string name=\"home_gesture_double_tap_desc\">在任意主屏幕空白處雙擊</string>\n    <string name=\"home_gesture_shake\">搖晃</string>\n    <string name=\"home_gesture_shake_desc\">在任意主屏幕搖晃設備</string>\n    <string name=\"home_gesture_left_swipe\">左滑</string>\n    <string name=\"home_gesture_left_swipe_desc\">在主屏幕 Dock 欄向左滑動</string>\n    <string name=\"home_gesture_right_swipe\">右滑</string>\n    <string name=\"home_gesture_right_swipe_desc\">在主屏幕 Dock 欄向右滑動</string>\n    <string name=\"home_gesture_up_swipe\">上滑</string>\n    <string name=\"home_gesture_up_swipe_desc\">在任意主屏幕單指上滑</string>\n    <string name=\"home_gesture_down_swipe\">下滑</string>\n    <string name=\"home_gesture_down_swipe_desc\">在任意主屏幕單指下滑</string>\n    <string name=\"home_gesture_up_swipe2\">雙指上滑</string>\n    <string name=\"home_gesture_up_swipe2_desc\">在任意主屏幕雙指上滑</string>\n    <string name=\"home_gesture_down_swipe2\">雙指下滑</string>\n    <string name=\"home_gesture_down_swipe2_desc\">在任意主屏幕雙指下滑</string>\n    <string name=\"home_gesture_pinch\">雙指捏合</string>\n    <string name=\"home_gesture_spread\">雙指擴展</string>\n    <string name=\"home_gesture_swipe_and_stop\">滑動並停止</string>\n    <string name=\"home_gesture_swipe_and_stop_desc\">在任意非主屏幕由屏幕兩側向內滑動並停止</string>\n    <string name=\"home_gesture_multi_choose_app\">選擇應用程式</string>\n    <string name=\"home_gesture_multi_choose_app_none\">未選擇</string>\n    <string name=\"home_layout\">佈局</string>\n    <string name=\"home_layout_home_title\">主屏幕</string>\n    <string name=\"home_layout_hotseats_title\">Dock</string>\n    <string name=\"home_layout_searchbar_title\">搜尋框</string>\n    <string name=\"home_layout_seek_points\">頁面指示器</string>\n    <string name=\"home_layout_show_clock\">顯示時間</string>\n    <string name=\"home_layout_show_clock_desc\">時鐘小工具所在頁面始終顯示時間</string>\n    <string name=\"home_layout_unlock_grids\">解鎖佈局</string>\n    <string name=\"home_layout_unlock_grids_desc\">解鎖主屏幕圖示佈局大小限制</string>\n    <string name=\"home_layout_unlock_grids_no_words\">解鎖佈局（無字模式）</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">解鎖主屏幕圖示佈局大小限制</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">主屏幕距離屏幕底部邊距</string>\n    <string name=\"home_layout_workspace_padding_top_desc\">主屏幕距離屏幕頂部邊緣</string>\n    <string name=\"home_layout_hotseats_height\">高度</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">Dock 距離頁面指示器邊距</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">Dock 距離屏幕底部邊距</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">搜尋欄距離屏幕底部邊距</string>\n    <string name=\"home_folder\">資料夾</string>\n    <string name=\"home_small_folder_title\">小資料夾</string>\n    <string name=\"home_big_folder_title\">大資料夾</string>\n    <string name=\"home_small_folder_icon_bg\">圖示背景</string>\n    <string name=\"home_small_folder_icon_bg_custom\">背景自訂</string>\n    <string name=\"home_small_folder_icon_bg_size\">背景大小</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">橫三宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">自訂</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">背景寬度</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">背景高度</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">豎三宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">自訂</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">背景寬度</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">背景高度</string>\n    <string name=\"home_big_folder_icon_bg\">九宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_custom\">自訂</string>\n    <string name=\"home_big_folder_icon_bg_width\">背景寬度</string>\n    <string name=\"home_big_folder_icon_bg_height\">背景高度</string>\n    <string name=\"home_big_folder_item_max_count\">真·九宮格</string>\n    <string name=\"home_big_folder_icon_bg_2x1_n\">八宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_1x2_n\">四宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_n\">八宮格 和 十六宮格 背景自訂</string>\n    <string name=\"home_auto_close_folder_title\">自動關閉</string>\n    <string name=\"home_auto_close_folder_summary\">應用程式啟動後關閉資料夾</string>\n    <string name=\"home_wallpaper\">背景</string>\n    <string name=\"home_wallpaper_blur\">背景模糊</string>\n    <string name=\"home_enable_blur\">啟用模糊</string>\n    <string name=\"home_blur_radius_title\">模糊半徑</string>\n    <string name=\"home_folder_shade_title\">顏色覆蓋</string>\n    <string name=\"home_folder_shade_summary\">增強或減弱背景顏色</string>\n    <string name=\"home_folder_shade_solid\">整個背景</string>\n    <string name=\"home_folder_shade_gradient\">僅中間</string>\n    <string name=\"home_folder_shade_level_title\">色彩強度</string>\n    <string name=\"home_folder_cols_title\">資料夾欄位數量</string>\n    <string name=\"home_folder_cols_format\">%d 列</string>\n    <string name=\"home_folder_vertical_padding_title\">資料夾水準間距</string>\n    <string name=\"home_folder_width_title\">利用整個資料夾視圖的寬度</string>\n    <string name=\"home_folder_space_title\">減少邊距</string>\n    <string name=\"home_folder_blur_title\">背景模糊</string>\n    <string name=\"home_folder_anim_title\">回彈動畫</string>\n    <string name=\"home_folder_anim_1\">打開時回彈幅度</string>\n    <string name=\"home_folder_anim_2\">打開時慢放速度</string>\n    <string name=\"home_folder_anim_3\">關閉時回彈幅度</string>\n    <string name=\"home_folder_anim_4\">關閉時慢放速度</string>\n    <string name=\"home_drawer\">抽屜</string>\n    <string name=\"home_drawer_all\">移除「全部」分組</string>\n    <string name=\"home_drawer_all_desc\">移除抽屜欄內應用程式分組的「全部」分頁</string>\n    <string name=\"home_drawer_editor\">移除「編輯」按鈕</string>\n    <string name=\"home_drawer_editor_desc\">移除抽屜欄內應用程式分頁的「編輯」按鈕</string>\n    <string name=\"home_drawer_blur\">抽屜模糊</string>\n    <string name=\"home_drawer_blur_desc\">請將應用程式抽屜的背景透明度設定為 100% 以使用此功能</string>\n    <string name=\"home_drawer_pinyin\">按拼音順序排列</string>\n    <string name=\"home_drawer_pinyin_more\">非簡體中文語言時抽屜內應用程式仍按照拼音排列</string>\n    <string name=\"home_title\">圖示與標題</string>\n    <string name=\"home_title_icon_title\">圖示</string>\n    <string name=\"home_title_bigicon_title\">大圖示</string>\n    <string name=\"home_title_title_title\">標題</string>\n    <string name=\"home_title_title_marquee\">文字滾動</string>\n    <string name=\"home_title_title_marquee_desc\">過長的應用程式名稱將以滾動進行顯示，不再使用換行</string>\n    <string name=\"home_title_title_new_install\">新安裝的應用程式不展示指示器</string>\n    <string name=\"home_title_drawer_font_hidden\">隱藏全部應用程式標題</string>\n    <string name=\"home_title_drawer_font_hidden_more\">抽屜內應用程式標題也會被隱藏，如需保留抽屜文字標題，請使用「文本大小」進行調整</string>\n    <string name=\"home_title_title_new_install_more\">安裝新應用程式時，不在應用程式標題旁邊展示指示器</string>\n    <string name=\"home_title_font_size\">字體大小</string>\n    <string name=\"home_title_title_color\">文本顏色</string>\n    <string name=\"home_title_animation_speed\">動畫速度</string>\n    <string name=\"home_title_big_icon_corner\">中等圖示圓角跟隨</string>\n    <string name=\"home_title_download_animation\">下載動畫</string>\n    <string name=\"home_title_fix_animation\">最佳化打斷動畫</string>\n    <string name=\"home_title_icon_scale\">圖示縮放</string>\n    <string name=\"home_title_disable_hide_file\">禁用隱藏「檔案」圖示</string>\n    <string name=\"home_title_disable_hide_theme\">不要隱藏「主題管理」圖示</string>\n    <string name=\"home_title_custom_anim_param\">動畫曲線自訂</string>\n    <string name=\"home_title_custom_anim_param_damping_title\">阻尼</string>\n    <string name=\"home_title_custom_anim_param_stiffness_title\">剛度</string>\n    <string name=\"home_recent\">最近任務</string>\n    <string name=\"home_recent_animation_speed\">動畫速度</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">取消桌布壓暗</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">隱藏狀態欄</string>\n    <string name=\"home_recent_hide_freeform\">隱藏小窗按鈕</string>\n    <string name=\"home_recent_hide_clean_up\">隱藏清理按鈕</string>\n    <string name=\"home_recent_remove_icon\">隱藏圖示</string>\n    <string name=\"home_recent_modify_animation\">修改劃卡動畫</string>\n    <string name=\"home_recent_text\">無後台時顯示的文本</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">應用程式名稱距卡片</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">卡片圓角大小</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">縱向螢幕卡片大小</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">橫向螢幕卡片大小</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">瀑布卡片大小</string>\n    <string name=\"home_recent_text_size\">卡片文字大小</string>\n    <string name=\"home_recent_text_color\">卡片文字顏色</string>\n    <string name=\"home_recent_freeform_background_color\">小窗應用程式卡片背景顏色</string>\n    <string name=\"home_recent_show_real_memory\">顯示真實運行記憶體</string>\n    <string name=\"home_recent_show_memory_info_sum\">平板設備專用</string>\n    <string name=\"home_recent_show_memory_info\">顯示記憶體資訊</string>\n    <string name=\"home_recent_always_show_clean_up\">禁止卡片不存在時隱藏清理圖示</string>\n    <string name=\"home_widget\">小工具</string>\n    <string name=\"home_widget_all_widget_animation\">小工具動畫</string>\n    <string name=\"home_widget_show_miui_widget\">顯示 MIUI 小工具</string>\n    <string name=\"home_widget_show_miui_widget_desc\">在 Android 小工具頁面顯示 MIUI 小工具</string>\n    <string name=\"home_widget_corner_radius\">小工具圓角</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">允許將 Android 小工具移動至智慧助理</string>\n    <string name=\"home_widget_hide_title\">隱藏小工具標題</string>\n    <string name=\"home_widget_resizable\">解除小工具大小的限制</string>\n    <string name=\"home_dock\">Dock</string>\n    <string name=\"home_dock_bg_enable\">添加底欄背景</string>\n    <string name=\"home_dock_bg_height\">高度</string>\n    <string name=\"home_dock_bg_height_desc\">Dock 欄高度</string>\n    <string name=\"home_dock_bg_margin_horizontal\">垂直邊距</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Dock 欄距屏幕兩側邊距</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Dock 欄距頁面指示器邊距</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Dock 欄距屏幕底部邊距</string>\n    <string name=\"home_dock_icon_margin_bottom\">圖示底部邊距</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Dock 欄圖示距屏幕底部邊距</string>\n    <string name=\"home_dock_bg_custom\">背景模糊</string>\n    <string name=\"home_dock_icon_bottom_margin\">圖示距離底部邊距</string>\n    <string name=\"home_dock_margin_bottom\">頁面指示器距屏幕底部邊距</string>\n    <string name=\"home_dock_unlock_hotseat\">解鎖底欄圖示數量限制</string>\n    <string name=\"home_dock_fold\">Fold 樣式底欄</string>\n    <string name=\"home_dock_hide_seekpoint\">移除頁面指示器</string>\n    <string name=\"home_dock_icon_title\">顯示應用程式標題</string>\n    <string name=\"home_dock_disable_recents_icon\">在 Dock 欄中隱藏最近應用圖示</string>\n    <string name=\"home_other\">其他</string>\n    <string name=\"home_other_shortcut_title\">快捷選單</string>\n    <string name=\"home_other_home_mode\">桌面模式</string>\n    <string name=\"home_other_infinite_scroll\">無限滾動</string>\n    <string name=\"home_other_infinite_scroll_desc\">從末頁跳轉至首頁，反之亦然</string>\n    <string name=\"home_other_freeform_shortcut_menu\">小窗模式</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">在快捷選單中增加小窗應用程式</string>\n    <string name=\"home_other_tasks_shortcut_menu\">多開模式</string>\n    <string name=\"home_other_tasks_shortcut_menu_desc\">在快捷選單中新增多開選單</string>\n    <string name=\"home_other_user_present_animation\">最佳化解鎖動畫</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">始終模糊桌布</string>\n    <string name=\"home_other_perfect_icon\">完美圖示優先級</string>\n    <string name=\"home_other_icon_mono_chrome\">圖示背景色</string>\n    <string name=\"home_other_icon_monet_color\">使用 Monet 取色</string>\n    <string name=\"home_other_use_edit_color\">使用自訂顏色</string>\n    <string name=\"home_other_your_color\">編輯顏色</string>\n    <string name=\"home_other_portrait_reverse\">反向縱向螢幕</string>\n    <string name=\"home_other_shortcut_background_blur\">快捷選單背景模糊</string>\n    <string name=\"home_other_blur_radius\">模糊半徑</string>\n    <string name=\"home_large_icon_corner_radius\">大圖示圓角</string>\n    <string name=\"home_other_app_icon_hide\">桌面快捷方式管理</string>\n    <string name=\"home_other_toast_slide_again\">不再提示 「請再次觸摸」</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">解鎖 shortcut 數量限制</string>\n    <string name=\"home_other_disable_hide_google\">禁止隱藏 Google 圖示</string>\n    <string name=\"home_other_fix_android_r_s\">修復相容性問題導致系统桌布黑屏</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">Shortcut 選單背景透明度</string>\n    <string name=\"home_other_high_models\">強制識別為高端機型</string>\n    <string name=\"home_recent_blur_level\">模糊等級</string>\n    <string name=\"home_recent_complete_blur_plus\">完整模糊補充（實驗性）</string>\n    <string name=\"home_recent_complete_blur\">完整模糊</string>\n    <string name=\"home_recent_test_blur\">測試模糊</string>\n    <string name=\"home_recent_simple_blur\">簡單模糊</string>\n    <string name=\"home_recent_none_blur\">無模糊</string>\n    <string name=\"home_recent_none_blur_simple_anim\">無模糊（精簡動畫）</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_title\">解鎖更多的桌面設定選項</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_desc\">解鎖後的功能不一定可用，部分功能需要系統底層支援</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">相簿編輯</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">解鎖最小裁剪圖片限制</string>\n    <string name=\"mediaeditor_filter_manager\">解鎖大師濾鏡</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">小米互傳</string>\n    <string name=\"mishare_disable_mishare_auto_off\">禁用自動關閉小米互傳</string>\n    <string name=\"mishare_unlock_turbo_mode\">解鎖極速傳輸模式</string>\n    <!--Wallpaper-->\n    <string name=\"miwallpaper\">桌布</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">解鎖超級桌布</string>\n    <!--Package installer-->\n    <string name=\"package_installer\">應用程式檔案管理元件</string>\n    <string name=\"miui_package_installer_modify\">淨化頁面</string>\n    <string name=\"miui_package_installer_safe_mode\">純淨模式</string>\n    <string name=\"miui_package_installer_safe_mode_desc\">強制開啟並鎖定官方安全防護</string>\n    <string name=\"miui_package_installer_disable_ad\">禁用推廣</string>\n    <string name=\"miui_package_installer_install_risk\">禁用風險檢測</string>\n    <string name=\"miui_package_installer_safe_model_tip\">禁用安全守護提示</string>\n    <string name=\"miui_package_installer_count_checking\">禁用頻繁安裝應用程式檢查</string>\n    <string name=\"miui_package_installer_update_system_app\">解除系统應用程式安裝限制</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">允許任何非系统管道安裝系统應用程式</string>\n    <string name=\"miui_package_installer_install_source\">自訂安裝來源</string>\n    <string name=\"miui_package_installer_apk_info\">顯示更多安裝包資訊</string>\n    <string name=\"miui_package_installer_apk_info_desc\">顯示安裝中應用程式的更多相關資訊</string>\n    <!--networkboost-->\n    <string name=\"various_disable_link_turbo_toast\">隱藏 正在使用行動網络加速 Toast</string>\n    <string name=\"various_disable_link_turbo_toast_more\">請在快速重啟作用域內重啟 NetworkBoost</string>\n    <!--nfc-->\n    <string name=\"nfc\">NFC 服務</string>\n    <string name=\"nfc_disable_sound\">禁用聲音</string>\n    <string name=\"nfc_allow_information_screen\">允许關閉屏幕时识别</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">智慧助理</string>\n    <string name=\"personal_assistant_widget_crack\">小工具破解</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Pad/Fold 小工具</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">啟用 Pad/Fold 樣式的小工具</string>\n    <string name=\"personal_assistant_overlap_mode\">智慧助理 Fold 樣式</string>\n    <string name=\"personal_assistant_blur_model\">智慧助理背景設定</string>\n    <string name=\"personal_assistant_blur_value\">背景樣式</string>\n    <string name=\"personal_assistant_blurradius\">智慧助理背景模糊程度</string>\n    <string name=\"personal_assistant_color\">智慧助理背景疊加層顏色</string>\n    <!--Music-->\n    <string name=\"music\">音樂</string>\n    <string name=\"music_disable_ad\">移除廣告</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">電量和性能</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">自訂高螢幕更新率的應用程式</string>\n    <string name=\"powerkeeper_lock_max_fps\">鎖定當前螢幕更新率上限</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">嘗試不要殺死後台應用程式</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">可能使耗電量增加</string>\n    <string name=\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\">禁止恢復電池優化白名單</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">螢幕錄製</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">強制啟用原生螢幕錄製支援</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">需要螢幕錄製版本支援</string>\n    <string name=\"screen_recorder_config\">增加更多影格率與碼率選項</string>\n    <string name=\"screen_recorder_config_desc\">請根據硬體情況酌情選擇</string>\n    <string name=\"screen_recorder_more_volume\">解鎖更多聲音來源選項</string>\n    <string name=\"screen_recorder_more_volume_desc\">僅支援部分版本</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">規範錄製影片儲存位置為 Movies/ScreenRecorder</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">截圖</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">解鎖最小裁剪圖片限制</string>\n    <string name=\"screenshot_unlock_privacy_marking_title\">解鎖智能隱私打碼</string>\n    <string name=\"screenshot_unlock_privacy_marking_desc\">需要預先安裝更高版本的「Mi AI Engine」應用程式才能正常使用</string>\n    <string name=\"screenshot_save_to_pictures_desc\">規範截圖儲存位置為 /Pictures/Screenshots</string>\n    <string name=\"screenshot_device_customize_title\">自定義帶殼截圖型號</string>\n    <string name=\"screenshot_device_customize_desc\">請輸入機型代號</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">手機管家</string>\n    <string name=\"security_center_pad\">平板管家</string>\n    <string name=\"security_center_app_title\">應用程式管理</string>\n    <string name=\"security_center_battery_title\">省電與電池</string>\n    <string name=\"security_center_privacy_title\">隱私保護</string>\n    <string name=\"security_center_beauty_title\">前置照相助手</string>\n    <string name=\"security_center_bubble_and_freeform_title\">小窗和氣泡通知</string>\n    <string name=\"security_center_newbox_title\">全域側邊欄</string>\n    <string name=\"security_center_dolby_open\">關閉杜比彈出視窗</string>\n    <string name=\"security_center_show_battery_temperature\">顯示電池溫度</string>\n    <string name=\"security_center_ai_clipboard\">剪貼簿隱私保護</string>\n    <string name=\"security_center_blur_location\">模糊定位</string>\n    <string name=\"security_center_gms_open\">GMS 服務</string>\n    <string name=\"security_center_flash_light\">手電筒亮度控制</string>\n    <string name=\"security_center_flash_light_more\">啓用手電筒時通過拖動亮度條來控制手電筒亮度</string>\n    <string name=\"security_center_get_number\">管理應用程式取得手機號碼並一鍵登入</string>\n    <string name=\"security_center_applock_pin_scramble\">應用程式鎖亂序 PIN</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">隨機更改應用程式鎖 PIN 鍵盤順序</string>\n    <string name=\"security_center_beauty_light_auto\">解鎖智慧調節補光燈亮度</string>\n    <string name=\"security_center_beauty_face\">解鎖視訊通話美肌</string>\n    <string name=\"security_center_beauty_privacy\">解鎖隱私拍攝</string>\n    <string name=\"security_center_beauty_pc\">解鎖人像居中</string>\n    <string name=\"security_center_disable_root_check\">禁用 Root 檢測</string>\n    <string name=\"security_center_remove_macro_black_list\">去除自動連招黑名單</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">禁止發送「發現惡意應用程式」通知</string>\n    <string name=\"security_center_newbox_custom_enable\">啟用自訂</string>\n    <string name=\"security_center_newbox_bg_custom\">背景模糊</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">水準邊距</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">垂直邊距</string>\n    <string name=\"security\">手機管家</string>\n    <string name=\"security_app_title\">顯示更多應用程式資訊</string>\n    <string name=\"security_app_summary\">增加新欄位到應用程式資訊頁面:\\n- 版本號碼\\n- Apk 完整目錄\\n- 數據目錄\\n- 用戶標識符\\n- 最低 SDK 版本\\n- 目標 SDK 版本\\n- 連結到應用程式商店頁面\\n- 啟動應用程式</string>\n    <string name=\"security_app_sort_title\">應用程式管理列表排序</string>\n    <string name=\"security_app_sort_summary\">修改應用程式管理列表預設排序</string>\n    <string name=\"security_restrict_app_title\">全限制</string>\n    <string name=\"security_restrict_app_summary\">允許設定省電程式並且為系统應用程式接入 Wi-Fi</string>\n    <string name=\"security_disable_app_title\">應用程式狀態控制</string>\n    <string name=\"security_disable_app_summary\">允許從應用程式資訊頁面禁用任何應用程式</string>\n    <string name=\"security_disable_app_url_title\">應用程式打開連結管理</string>\n    <string name=\"security_disable_app_url_summary\">將應用程式詳情中 “消除預設操作” 更改為 “預設打開” 設置</string>\n    <string name=\"app_link_open_always\">允許應用程式打開支援的連結</string>\n    <string name=\"app_link_open_never\">不允許應用程式打開連結</string>\n    <string name=\"open_by_default\">預設打開</string>\n    <string name=\"security_score\">禁用體驗最佳化</string>\n    <string name=\"security_score_summary\">鎖定 100 分與禁用最佳化</string>\n    <string name=\"security_center_skip_waiting_time\">跳過倒數計時限制</string>\n    <string name=\"security_center_skip_waiting_time_desc\">跳過大部分官方危險選項的等待確認倒數時間</string>\n    <string name=\"security_center_newbox_blur\">全域側邊欄模糊</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">移除氣泡通知應用程式限制</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">隱藏低電量警告</string>\n    <string name=\"security_center_remove_low_battery_reminder_summary\">當電量低於 20% 時，不再彈出打開省電模式的警告對話框</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">移除打開應用程式彈窗</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">移除 \\\"XXX 想要打開 XXX\\\" 的彈窗</string>\n    <string name=\"security_center_no_permission\">未授予所需權限</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">解鎖貼邊小窗</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">為底層支援但受限制的設備解鎖貼邊小窗，這將同時影響手機切後台時小窗的行為</string>\n    <string name=\"security_center_unlock_smart_charge_title\">解鎖「智能斷充保護」和「低電疾充」功能</string>\n    <string name=\"security_center_super_wireless_charge\">解鎖極速無線充電模式</string>\n    <string name=\"security_center_blur_model\">全域側邊欄背景設定</string>\n    <string name=\"security_center_blurradius\">全域側邊欄背景模糊程度</string>\n    <string name=\"security_center_color\">全域側邊欄背景疊加層顏色</string>\n    <string name=\"security_center_other_title\">其他</string>\n    <string name=\"security_center_sidebar_line_color\">全域側邊欄提示線自訂</string>\n    <string name=\"security_center_sidebar_line_color_default\">預設全域側邊欄提示線顏色</string>\n    <string name=\"security_center_sidebar_line_color_dark\">深色背景下全域側邊欄提示線顏色</string>\n    <string name=\"security_center_sidebar_line_color_light\">淺色背景下全域側邊欄提示線顏色</string>\n    <string name=\"security_center_disable_ban\">移除舉報鍵</string>\n    <string name=\"security_center_unlock_screen_time\">顯示詳細耗電數據</string>\n    <string name=\"security_center_unlock_screen_time_desc\">在耗電排行中螢幕幕耗電訊息並恢復顯示所有其他應用程式的耗電量和時間</string>\n    <string name=\"security_center_unlock_gun_service\">解鎖準星輔助</string>\n    <string name=\"security_center_disable_remove_screen_hold_on\">禁用移除待機聽劇與關閉螢幕掛機</string>\n    <string name=\"security_center_unlock_memc\">解鎖動態畫面補償</string>\n    <string name=\"security_center_unlock_enhance_contours\">解鎖影像輪廓增強</string>\n    <string name=\"security_center_unlock_s_resolution\">解鎖極清播放</string>\n    <string name=\"security_center_hide_sidebar\">隱藏側邊欄</string>\n    <string name=\"security_center_leave_open\">保留側滑展開</string>\n    <string name=\"security_center_disable_sidebar_show_suggest\">禁止展示推薦應用程式</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">小米智慧卡</string>\n    <string name=\"tsmclient_auto_nfc\">自動管理 NFC</string>\n    <string name=\"tsmclient_auto_nfc_desc\">進入刷卡頁面時自動開啟 NFC，退出時將自動關閉</string>\n    <string name=\"tsmclient_nfc_turning_on\">正自動開啟 NFC 中 …</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">手動開啟 NFC</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">自動開啟 NFC 失敗</string>\n    <!--Weather-->\n    <string name=\"weather\">天氣</string>\n    <string name=\"weather_device_level_title\">動畫等級</string>\n    <string name=\"weather_device_level_title_low\">低</string>\n    <string name=\"weather_device_level_title_middle\">中</string>\n    <string name=\"weather_device_level_title_high\">高</string>\n    <!--AI Translate-->\n    <string name=\"aiasst\">小愛翻譯</string>\n    <string name=\"aiasst_ai_captions\">強制啟用實時字幕</string>\n    <string name=\"aiasst_ai_captions_desc\">只能識別翻譯中文、英文</string>\n    <!--Barrage-->\n    <string name=\"barrage\">彈幕通知</string>\n    <string name=\"barrage_any_barrage\">允許所有應用程式使用彈幕通知</string>\n    <string name=\"barrage_custom_barrage_length\">自訂彈幕通知長度</string>\n    <!--Joyose-->\n    <string name=\"joyose\">Joyose</string>\n    <string name=\"joyose_cloud_control_title\">雲控</string>\n    <string name=\"joyose_disable_cloud_control\">禁用雲端控制</string>\n    <string name=\"joyose_game_title\">遊戲空間</string>\n    <string name=\"joyose_enable_gpu_tuner\">性能調度</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">開啟後「遊戲空間」的底部中間增加遊戲 GPU 相關設定</string>\n    <!--GetApps-->\n    <string name=\"market\">應用程式商店</string>\n    <string name=\"market_device_modify\">機型偽裝</string>\n    <string name=\"market_device_modify_desc\">偽裝設備機型為 Xiaomi 13 Ultra</string>\n    <string name=\"market_disable_new_icon\">禁止使用協力廠商圖示</string>\n    <string name=\"market_disable_new_icon_desc\">使桌面更加整潔</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">解鎖 MIUI+</string>\n    <!--Mi Settings-->\n    <string name=\"mi_settings\">小米設定</string>\n    <string name=\"mi_input_settings\">輸入設定</string>\n    <string name=\"mi_settings_show_fps\">顯示更多幀數設定選項</string>\n    <string name=\"mi_settings_show_fps_desc\">該模塊預設解除所有幀率 (影格速率) 限制，不保證可用</string>\n    <!--MTB-->\n    <string name=\"mtb\">魯班 (MTB)</string>\n    <string name=\"mtb_auth\">繞過魯班 (MTB) 鑒權</string>\n    <string name=\"mtb_auth_desc\">這是一個高危險性的功能，由此引發的後果全部由使用者本人承擔，請及時備份基帶。</string>\n    <!--Scanner-->\n    <string name=\"scanner\">小愛視覺</string>\n    <string name=\"scanner_card\">解鎖掃名片</string>\n    <string name=\"scanner_translation\">解鎖翻譯</string>\n    <string name=\"scanner_ocr\">解鎖識文字</string>\n    <string name=\"scanner_document\">解鎖轉文檔</string>\n    <string name=\"scanner_excel\">解鎖提取表格</string>\n    <string name=\"scanner_ppt\">解鎖提取 PPT</string>\n    <string name=\"scanner_doc_ppt\">解鎖掃文件</string>\n    <!--Other-->\n    <string name=\"various\">其他</string>\n    <string name=\"notes\">筆記</string>\n    <string name=\"share_center\">小米妙享中心</string>\n    <string name=\"new_task\">多開</string>\n    <string name=\"custom_hook\">自訂</string>\n    <string name=\"app_version_not_supported\">不受支援的版本</string>\n    <string name=\"various_location_simulation_title\">位置模擬</string>\n    <string name=\"various_dialog_title\">彈窗</string>\n    <string name=\"various_mipad_title\">平板相關</string>\n    <string name=\"various_open_aosp_something_title\">隱藏屬性</string>\n    <string name=\"various_open_aosp_something_desc\">啟用 AOSP 中的「隱藏」接口</string>\n    <string name=\"settings_notfication_importance\">顯示通知重要程度</string>\n    <string name=\"various_no_overscroll\">禁用越界回彈</string>\n    <string name=\"various_disable_bluetooth_restrict\">禁用藍牙臨時關閉</string>\n    <string name=\"various_disable_access_device_logs\">關閉訪問設備日誌確認</string>\n    <string name=\"various_unlock_ime\">解鎖輸入法全螢幕鍵盤最佳化</string>\n    <string name=\"various_unlock_ime_desc\">啟用後請在 Xposed 管理器中勾選對應輸入法作用範圍</string>\n    <string name=\"various_collapse_miui_title\">MIUI 標題</string>\n    <string name=\"various_collapse_miui_title_desc\">調整 MIUI 應用程式中的頂欄標題</string>\n    <string name=\"various_disable_folder_cantuse\">移除部分資料夾不可選擇限制</string>\n    <string name=\"various_super_clipboard_title\">超級剪貼簿</string>\n    <string name=\"various_unlock_super_clipboard\">解鎖超級剪貼簿</string>\n    <string name=\"various_super_clipboard_summary\">僅支援具有 is_support_miui_super_clipboard 的元數據的應用程式</string>\n    <string name=\"various_super_clipboard_picture_desc\">允許將圖片複製到剪貼簿</string>\n    <string name=\"various_super_clipboard_files_desc\">允許複製檔案至剪貼簿</string>\n    <string name=\"various_open_aosp_battery_title\">電池效能最佳化</string>\n    <string name=\"various_open_aosp_notification_title\">通知設定</string>\n    <string name=\"various_open_aosp_app_manage_title\">應用程式管理</string>\n    <string name=\"various_open_aosp_language_title\">語言設定</string>\n    <string name=\"various_open_aosp_extremely_dark_title\">極暗模式</string>\n    <string name=\"various_mipad_input_title\">輸入</string>\n    <string name=\"various_mipad_input_close_magic_title\">關閉 Magic Pointer</string>\n    <string name=\"various_mipad_input_close_magic_desc\">移除 MIUI For Pad 破爛的圓形滑鼠指針，並恢復為安卓原生的滑鼠指針</string>\n    <string name=\"various_mipad_input_restore_esc_title\">恢復 ESC 鍵功能</string>\n    <string name=\"various_mipad_input_restore_esc_desc\">恢復被 MIUI 強硬射為 “返回” 功能的 ESC 鍵</string>\n    <string name=\"various_mipad_input_disable_bluetooth_title\">去除觸控筆藍牙限制</string>\n    <string name=\"various_mipad_input_disable_bluetooth_desc\">無需連結小米靈感觸控筆的藍牙即可使用相容的觸控筆</string>\n    <string name=\"various_mipad_input_bluetooth_version_title\">驅動版本</string>\n    <string name=\"various_mipad_input_bluetooth_version_desc\">移除觸控筆藍牙限制所使用的驅動版本</string>\n    <string name=\"various_mipad_input_ingore_gesture_title\">忽略觸控筆按鍵手勢</string>\n    <string name=\"various_mipad_input_ingore_gesture_desc\">忽略觸控筆長按按鍵時的手勢</string>\n    <string name=\"various_mipad_input_need_finger_num_title\">交換手勢所需的手指數量</string>\n    <string name=\"various_mipad_input_need_finger_num_desc\">將三指截圖、三指長按區域截圖、三指橫向分螢幕手勢更改為四指觸發，切換應用程式手勢更改為三指觸發</string>\n    <string name=\"custom_background_blur_enabled\">背景模糊</string>\n    <string name=\"custom_background_blur_radius\">模糊半徑</string>\n    <string name=\"custom_background_color\">背景顏色</string>\n    <string name=\"custom_background_color_alpha\">背景顏色透明度</string>\n    <string name=\"custom_background_corner_radius\">背景圓角</string>\n    <string name=\"custom_blur_enabled\">背景模糊</string>\n    <string name=\"various_blur_radius\">模糊半徑</string>\n    <string name=\"various_background_corner_radius\">背景圓角</string>\n    <string name=\"various_background_alpha\">背景遮罩透明度</string>\n    <string name=\"various_background_color\">背景顏色</string>\n    <string name=\"various_dialog_window_blur_title\">模糊</string>\n    <string name=\"various_dialog_gravity\">彈窗位置</string>\n    <string name=\"various_dialog_margin_horizontal\">彈窗垂直邊距</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">彈窗距螢幕兩側的距離</string>\n    <string name=\"various_dialog_margin_bottom\">彈窗底部邊距</string>\n    <string name=\"various_dialog_margin_bottom_desc\">彈窗距螢幕底部的距離</string>\n    <string name=\"various_dialog_window_blur\">窗口模糊</string>\n    <string name=\"various_dialog_window_blur_radius\">窗口模糊半徑</string>\n    <string name=\"location_data_title\">數據庫</string>\n    <string name=\"various_location_simulation_1_title\">任務 1</string>\n    <string name=\"various_location_simulation_2_title\">任務 2</string>\n    <string name=\"various_location_simulation_3_title\">任務 3</string>\n    <string name=\"various_location_simulation_all_title\">通用</string>\n    <string name=\"location_simulation_package_name\">包名</string>\n    <string name=\"location_simulation_location\">位置</string>\n    <string name=\"location_simulation_location_custom\">選擇位置</string>\n    <string name=\"location_simulation_network\">網絡</string>\n    <string name=\"location_simulation_operator_fix\">運營商偽裝修復</string>\n    <string name=\"location_simulation_mac\">Mac 位址</string>\n    <string name=\"location_simulation_wifi\">Wi-Fi</string>\n    <string name=\"location_simulation_router_mac\">路由器 Mac 位址</string>\n    <string name=\"location_simulation_work_title\">標題</string>\n    <string name=\"location_simulation_work_offset\">偏移</string>\n    <string name=\"location_simulation_work_base_station\">基站</string>\n    <string name=\"location_simulation_work_longitude_latitude\">經緯度</string>\n    <string name=\"location_simulation_work_remarks\">備註</string>\n    <string name=\"app_details_playstore\">使用應用程式商店打開</string>\n    <string name=\"app_details_launch\">啟動</string>\n    <string name=\"app_details_nolaunch\">應用程式沒有預設可啟動的活動</string>\n    <string name=\"app_details_apk_file\">APK 目錄</string>\n    <string name=\"app_details_apk_version_code\">版本號碼</string>\n    <string name=\"app_details_data_path\">數據目錄</string>\n    <string name=\"app_details_app_uid\">用戶標識符</string>\n    <string name=\"app_details_sdk\">目標 SDK 版本</string>\n    <string name=\"app_details_min_sdk\">最低 SDK 版本</string>\n    <string name=\"disable_app_settings\">這是一個壞主意！</string>\n    <string name=\"disable_app_title\">確定要禁用該應用程式嗎？</string>\n    <string name=\"disable_app_text\">如果這是一個必要的系统應用程式，將其禁用可能會導致設備損毀</string>\n    <string name=\"disable_app_fail\">更改應用程式狀態失敗</string>\n    <string name=\"unlimited\">無限制</string>\n    <string name=\"calls\">通話</string>\n    <string name=\"system_volume\">系统</string>\n    <string name=\"notification_volume\">通知</string>\n    <string name=\"freeform_notification\">通知懸浮視窗</string>\n    <string name=\"share_app\">分享至第三方應用程式</string>\n    <string name=\"show_newmods_title\">標記新模組</string>\n    <string name=\"default_volume_stream_ring\">鈴聲</string>\n    <string name=\"default_volume_stream_media\">媒體</string>\n    <string name=\"default_volume_stream_tip\">通知</string>\n    <string name=\"open_with_test_picture\">圖片</string>\n    <string name=\"open_with_test_audio\">聲音</string>\n    <string name=\"open_with_test_media\">影片</string>\n    <string name=\"open_with_test_doc\">文件</string>\n    <string name=\"open_with_test_zip\">歸檔</string>\n    <string name=\"open_with_test_all\">全部</string>\n    <string name=\"location_custom\">自訂</string>\n    <string name=\"operator_fix_none\">不修復</string>\n    <string name=\"operator_fix_1\">方法一</string>\n    <string name=\"operator_fix_2\">方法二（推薦）</string>\n    <string name=\"custom_hook_new\">增加 Hook</string>\n    <string name=\"custom_hook_mode\">選擇模式</string>\n    <string name=\"cemiuiler_notice\">下拉狀態欄，同時顯示快捷開關和系统通知</string>\n    <string name=\"cemiuiler_restart_quick\">快速重啟作用域</string>\n    <string name=\"location_add\">增加</string>\n    <string name=\"location_delete\">刪除</string>\n    <!--Tip-->\n    <string name=\"tip_0\">小提示：這是一個提示 (tip) ！</string>\n    <string name=\"tip_1\">小提示：您可以在「關於-赞助」中贊助支援我們。</string>\n    <string name=\"tip_2\">小提示：想要聯繫開發者？這裡可以找到我 Telegram@Sevtinge_PM_bot 或 Bilibili@绀漓丨Sevtinge。</string>\n    <string name=\"tip_3\">小提示：想要加入官方群組嗎？可以通過 Telegram@cemiuiler 或在 QQ 中搜索 247909573。</string>\n    <string name=\"tip_4\">小提示：Cemiuiler = Ceiler + MIUI ⇒ Ceiler = Ceil + er。</string>\n    <string name=\"tip_5\">小提示：猜猜這種小提示還會出現多少次？</string>\n    <string name=\"tip_6\">小提示：讓 MIUI 再次偉大！</string>\n    <string name=\"tip_7\">小提示：歡迎關注 Github@sevtinge 或 Bilibili@绀漓丨Sevtinge。</string>\n    <string name=\"tip_8\">小提示：理想中的烏托邦在現實中並不存在。</string>\n    <string name=\"tip_9\">小提示：三江市常發生倒塌。</string>\n    <string name=\"tip_10\">小提示：世間盡是錦繡，遺憾絢麗無緣 Sevtinge。</string>\n    <string name=\"tip_11\">小提示：我保留了一部分 bug 的味道，才知道你食的是 Cemiuiler。</string>\n    <string name=\"tip_12\">小提示：你知道嗎？提示都是廢話。(歪頭燦笑)</string>\n    <string name=\"tip_13\">小提示：誰懂啊？Cemiuiler 的生日 5 月 1 號，Sevtinge 的生日卻在 2 月 2 號。</string>\n    <string name=\"tip_14\">小提示：Sevtinge 曾就讀於山河大學三江市校區的資訊工程與技術學院。</string>\n    <string name=\"tip_15\">小提示：聽說…… Sevtinge 有兩種不同的形態。</string>\n    <string name=\"tip_16\">小提示：Sevtinge 是隻小狐娘！(小心福瑞控)</string>\n    <string name=\"tip_17\">小提示：鈴柒柒有兩種愛好，是個貓娘控也是個蘿莉控 (x</string>\n    <string name=\"tip_18\">小提示：Cemiuiler 是最會噴電的的系统內建 (喂！)</string>\n    <string name=\"tip_19\">小提示：變灰功能沒有特別註釋，代表功能異常，目前不計劃開放。</string>\n    <string name=\"tip_20\">小提示：沒事兒，別找 Canary 追新，有問題也別急著更新。(扶額</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--Introduction to Xposed Modules-->\n    <string name=\"xposed_description\">讓 MIUI 再次偉大！</string>\n    <string name=\"new_permission_wifi_state_desc\">在裝置的內部儲存空間新增和刪除檔案</string>\n    <string name=\"new_permission_location_desc\">用於提供緯度和經度等服務</string>\n    <string name=\"new_cta_agree_desc\">在使用過程中，為了提供您更多功能，我們可能會向您申請 Root/Su 權限。您可以隨時到權限管理調整所有權限的授權狀態，並請到您的 Root/Su 管理員管理 Root/Su 權限。</string>\n    <string name=\"new_cta_app_main_purpose\">修改系統應用程式</string>\n    <string name=\"new_cta_app_all_purpose_title\">歡迎使用 Cemiuiler，這個應用程式執行在 Xposed 框架上，您可以使用這個應用程式來劫持和修改其他支援的應用程式，以實現 MIUI 的增強功能。在使用過程中，為了提供您更多功能，我們可能會向您申請 Root/Su 權限。您可以到您的 Root/Su 管理員管理 Root/Su 權限。</string>\n    <!--Cemiuiler Settings/About Page-->\n    <string name=\"language\">繁體中文 (台灣)</string>\n    <string name=\"translator\">聖小熊</string>\n    <string name=\"translator_url\">https://github.com/a406010503</string>\n    <string name=\"settings\">設定</string>\n    <string name=\"about\">關於</string>\n    <string name=\"about_use\">項目引用</string>\n    <string name=\"about_use_desc\">Cemiuiler 使用了以下開源項目的部分或全部內容，感謝這些項目的開發者提供的大力支援（排名順序不分先後）</string>\n    <string name=\"about_contributer\">貢獻者</string>\n    <string name=\"about_contributer_desc\">感謝以下貢獻者為 Cemiuiler 的開發提供了不同程度的幫助（排名順序不分先後）</string>\n    <string name=\"about_donation\">贊助</string>\n    <string name=\"about_donation_desc\">您可以在此處贊助以支援我們</string>\n    <string name=\"about_privacy\">隱私政策</string>\n    <string name=\"about_protocol\">用戶協議</string>\n    <string name=\"settings_data_title\">備份與還原</string>\n    <string name=\"settings_bug_title\">疑難排解</string>\n    <string name=\"settings_debug_title\">除錯模式</string>\n    <string name=\"settings_hide_app_icon\">桌面圖示</string>\n    <string name=\"settings_icon\">設定圖示</string>\n    <string name=\"settings_icon_desc\">設定模組入口在系統設定中的位置</string>\n    <string name=\"settings_icon_disable\">停用</string>\n    <string name=\"settings_icon_top\">頂部</string>\n    <string name=\"settings_icon_medium\">中部</string>\n    <string name=\"settings_icon_down\">底部</string>\n    <string name=\"settings_icon_mode\">圖示樣式</string>\n    <string name=\"settings_icon_miui_14\">圓角矩形樣式</string>\n    <string name=\"settings_icon_miui_13\">背景鏤空樣式</string>\n    <string name=\"settings_reboot\">重啟作用域</string>\n    <string name=\"settings_back\">備份模組設定</string>\n    <string name=\"settings_rest\">還原模組設定</string>\n    <string name=\"settings_reset\">重設模組設定</string>\n    <string name=\"reset_title\">確定要重設嗎？</string>\n    <string name=\"reset_desc\">重設模組設定後其所有數據將會被刪除！</string>\n    <string name=\"reset_okay\">已重設模組設定</string>\n    <string name=\"backup_success\">備份成功</string>\n    <string name=\"backup_failed\">備份失敗</string>\n    <string name=\"rest_title\">還原</string>\n    <string name=\"rest_success\">還原成功</string>\n    <string name=\"rest_failed\">還原失敗</string>\n    <string name=\"backup_ask\">您是否要寫入備份？</string>\n    <string name=\"backup_permission\">現在您必須手動啟用此選項的權限。</string>\n    <string name=\"rest_ask\">您是否要還原備份？</string>\n    <string name=\"rest_permission\">現在您必須手動啟用此選項的權限。</string>\n    <string name=\"disable_detailed_log\">停用詳細日誌輸出</string>\n    <string name=\"disable_detailed_log_desc\">重新啟動裝置以套用更改</string>\n    <string name=\"settings_safe_mode\">安全模式</string>\n    <string name=\"settings_safe_mode_desc\">停用模組功能</string>\n    <string name=\"about_developer_title\">開發者</string>\n    <string name=\"about_translator_title\">翻譯者</string>\n    <string name=\"about_chat_title\">討論</string>\n    <string name=\"about_other_title\">其他</string>\n    <string name=\"about_qq_group\">QQ 群組</string>\n    <string name=\"about_qq_channel\">QQ 頻道</string>\n    <string name=\"about_tg_group\">Telegram 聊天室</string>\n    <string name=\"about_tg_channel\">Telegram 頻道</string>\n    <string name=\"about_github\">Github 存放庫</string>\n    <string name=\"about_github_desc\">本專案基於 AGPL-3.0 協議開源</string>\n    <string name=\"about_offical\">官網</string>\n    <string name=\"about_crwd\">Crowdin 翻譯</string>\n    <string name=\"about_crwd_desc\">協助我們將這個應用程式翻譯為您的語言</string>\n    <!--Pop-up window/miuix part-->\n    <string name=\"soft_reboot\">重啟 </string>\n    <string name=\"restart_app_desc\">確定要立即重啟%1$s嗎？</string>\n    <string name=\"tip\">提示</string>\n    <string name=\"hook_failed\">此模組尚未啟動。\\n請檢查是否在寄生管理器中啟用。 如果已經啟用，請重新開機或重新最佳化模組。</string>\n    <string name=\"kill_failed\">結束進程失敗，請檢查是否為 Cemiuiler 授予了 Root/Su 權限？</string>\n    <string name=\"pid_failed\">目標應用程式未運行，無需重啓。</string>\n    <string name=\"reboot_failed\">重啟失敗，請檢查是否為 Cemiuiler 授予了 Root/Su 權限？</string>\n    <string name=\"expand_button_title\">進階</string>\n    <string name=\"not_set\">未設定</string>\n    <string name=\"copy\">複製</string>\n    <string name=\"more\">更多</string>\n    <string name=\"clearable_edittext_clear_description\">清空</string>\n    <string name=\"preference_on\">已開啟</string>\n    <string name=\"preference_off\">已關閉</string>\n    <string name=\"preference_copied\">已將%1$s複製到剪貼簿。</string>\n    <string name=\"preference_default_value_text\">預設</string>\n    <string name=\"preference_dialog_color_picker_default_title\">選擇顏色</string>\n    <string name=\"preference_dialog_color_picker_presets\">預設顏色</string>\n    <string name=\"preference_dialog_color_picker_custom\">自訂顏色</string>\n    <string name=\"preference_dialog_color_picker_transparency\">透明度</string>\n    <string name=\"preference_dialog_color_picker_select\">確認選擇</string>\n    <string name=\"abc_action_bar_home_description\">轉到首頁</string>\n    <string name=\"abc_action_bar_up_description\">轉到上一層級</string>\n    <string name=\"actionbar_button_up_description\">返回</string>\n    <string name=\"appcompat_action_mode_select_all\">全選</string>\n    <string name=\"appcompat_cancel_description\">取消</string>\n    <string name=\"appcompat_confirm_description\">確認</string>\n    <string name=\"appcompat_select_all_description\">全選</string>\n    <string name=\"appcompat_deselect_all_description\">全不選</string>\n    <string name=\"appcompat_delete_description\">刪除</string>\n    <string name=\"appcompat_search_action_mode_cancel\">取消</string>\n    <string name=\"appcompat_search_input_description\">搜索</string>\n    <string name=\"appcompat_actionbar_immersion_button_more_description\">更多</string>\n    <string name=\"appcompat_action_mode_inverse\">反選</string>\n    <string name=\"color_picker_alpha_text_transparent\">不透明度</string>\n    <string name=\"color_picker_tab_grid\">網格取色</string>\n    <string name=\"color_picker_tab_slider\">滑塊取色</string>\n    <string name=\"color_picker_view_page_text_hue\">色調</string>\n    <string name=\"color_picker_view_page_text_lightness\">亮度</string>\n    <string name=\"color_picker_view_page_text_saturation\">飽和度</string>\n    <!--String reuse-->\n    <string name=\"top_margin\">頂部邊距</string>\n    <string name=\"bottom_margin\">底部邊距</string>\n    <string name=\"left_margin\">左側間距</string>\n    <string name=\"right_margin\">右側間距</string>\n    <string name=\"vertical_offset\">上下偏移量</string>\n    <string name=\"horizontal_alignment\">水準對齊</string>\n    <string name=\"feature\">功能</string>\n    <string name=\"recommend\">推薦</string>\n    <string name=\"editor\">編輯</string>\n    <string name=\"record\">錄影</string>\n    <string name=\"shot\">拍照</string>\n    <string name=\"portrait\">人像</string>\n    <string name=\"camera_pro\">專業</string>\n    <string name=\"enable\">啟用</string>\n    <string name=\"custom_enable\">啟用自訂</string>\n    <string name=\"search\">搜索</string>\n    <string name=\"floating_window\">小窗</string>\n    <string name=\"save_to_screen_title\">規範儲存位置</string>\n    <string name=\"system_ui_statusbar_indicator_default_title\">常規</string>\n    <string name=\"system_ui_statusbar_indicator_expand_title\">擴展</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width\">固定寬度</string>\n    <string name=\"system_ui_statusbar_indicator_fixedcontent_width_desc\">防止相鄰元素左右抖動</string>\n    <string name=\"system_ui_statusbar_indicator_bold\">加粗</string>\n    <!--Multi-list Array-->\n    <string name=\"array_close\">關閉</string>\n    <string name=\"array_default\">預設</string>\n    <string name=\"array_align_left\">左側</string>\n    <string name=\"array_align_right\">右側</string>\n    <string name=\"array_align_center\">置中</string>\n    <string name=\"array_netspeedicons_no\">無圖示</string>\n    <string name=\"array_bold\">加粗</string>\n    <string name=\"array_theme\">跟隨主題</string>\n    <string name=\"array_clock_center\">時鐘置中</string>\n    <string name=\"array_clock_right\">時鐘置右</string>\n    <string name=\"array_clock_center_and_icon_left\">時鐘置中且圖示置左</string>\n    <string name=\"array_clock_default\">預設</string>\n    <string name=\"array_clock_geek\">極客</string>\n    <string name=\"array_battery_both\">兩者</string>\n    <string name=\"array_battery_power\">僅功率</string>\n    <string name=\"array_battery_current\">僅電流</string>\n    <string name=\"array_battery_temp\">電池溫度</string>\n    <string name=\"array_cpu_temp\">CPU 溫度</string>\n    <string name=\"array_global_actions_none\">無動作</string>\n    <string name=\"array_global_actions_notif\">打開通知中心</string>\n    <string name=\"array_global_actions_eqs\">展開快速設定頁面</string>\n    <string name=\"array_global_actions_lock\">鎖定螢幕</string>\n    <string name=\"array_global_actions_sleep\">螢幕待機</string>\n    <string name=\"array_global_actions_screenshot\">截圖</string>\n    <string name=\"array_global_actions_menu\">打開選單</string>\n    <string name=\"array_global_actions_recents\">打開最近任務</string>\n    <string name=\"array_global_actions_volume\">打開音量對話框</string>\n    <string name=\"array_global_actions_volume_up\">提高音量</string>\n    <string name=\"array_global_actions_volume_down\">降低音量</string>\n    <string name=\"array_global_actions_launch\">啟動應用程式</string>\n    <string name=\"array_global_actions_launch_choose\">選擇應用程式</string>\n    <string name=\"array_global_actions_shortcut\">啟動捷徑</string>\n    <string name=\"array_global_actions_activity\">啟動活動</string>\n    <string name=\"array_global_actions_toggle\">切換功能</string>\n    <string name=\"array_global_actions_back\">切換上一個應用程式</string>\n    <string name=\"array_global_actions_forceclose\">強制關閉當前應用程式</string>\n    <string name=\"array_global_actions_powermenu\">打開電源擴展選單</string>\n    <string name=\"array_global_actions_powermenu_short\">電源選單</string>\n    <string name=\"array_global_actions_clear_memory\">清理記憶體</string>\n    <string name=\"array_global_actions_invert_colors\">顏色反轉</string>\n    <string name=\"array_global_actions_switchkeyboard\">切換鍵盤</string>\n    <string name=\"array_global_actions_goback\">返回</string>\n    <string name=\"array_global_actions_onehanded_left\">單手模式（左）</string>\n    <string name=\"array_global_actions_onehanded_right\">單手模式（右）</string>\n    <string name=\"array_global_actions_scrolltotop\">回到頂部</string>\n    <string name=\"array_global_actions_expandsidebar\">展開側邊欄</string>\n    <string name=\"array_global_actions_floatingwindow\">迷你小窗</string>\n    <string name=\"array_global_actions_pinningwindow\">窗口貼邊</string>\n    <string name=\"array_align_top\">頂部</string>\n    <string name=\"array_align_bottom\">底部</string>\n    <string name=\"array_discrete\">分離</string>\n    <string name=\"array_gradual\">緩慢</string>\n    <string name=\"array_rainbow\">彩虹</string>\n    <string name=\"various_install_app_info_version_name\">版本名稱</string>\n    <string name=\"various_install_app_info_version_code\">版本號碼</string>\n    <string name=\"various_install_app_info_sdk\">支援 SDK</string>\n    <string name=\"various_install_app_size\">應用程式大小</string>\n    <string name=\"charge_animation_entries_disable\">停用</string>\n    <string name=\"charge_animation_entries_aura\">光暈</string>\n    <string name=\"charge_animation_entries_stream\">流光</string>\n    <string name=\"charge_animation_entries_alpha\">律動</string>\n    <string name=\"status_bar_icon_mode_default\">預設</string>\n    <string name=\"status_bar_icon_mode_on\">總是顯示</string>\n    <string name=\"status_bar_icon_mode_off\">總是隱藏</string>\n    <string name=\"status_bar_icon_mode_off_unconnect\">僅在未連接時隱藏</string>\n    <string name=\"status_bar_icon_mode_on_beforering\">僅在響鈴前顯示</string>\n    <string name=\"seek_points_roll\">僅在滑動螢幕時顯示</string>\n    <string name=\"seek_points_edit\">僅在編輯模式中顯示</string>\n    <string name=\"home_mode_day\">淺色模式</string>\n    <string name=\"home_mode_dark\">深色模式</string>\n    <string name=\"dialog_gravity_medium\">置中</string>\n    <string name=\"dialog_gravity_down\">底部</string>\n    <string name=\"collapse_miui_title_off\">折疊</string>\n    <string name=\"collapse_miui_title_on\">展開</string>\n    <string name=\"collapse_miui_title_off_always\">總是折疊</string>\n    <string name=\"collapse_miui_title_on_always\">總是展開</string>\n    <string name=\"link_open_mode_default\">系統預設</string>\n    <string name=\"link_open_mode_mi\">小米瀏覽器</string>\n    <string name=\"app_sort_running\">預設排序</string>\n    <string name=\"app_sort_name\">應用程式名稱</string>\n    <string name=\"app_sort_frequency\">使用頻率</string>\n    <string name=\"app_sort_storage\">儲存空間佔用</string>\n    <string name=\"app_sort_install\">安裝時間</string>\n    <string name=\"array_bluetooth_tile_style_3rows\">三個大磁貼</string>\n    <string name=\"array_bluetooth_tile_style_2rows2cols\">大尺寸磁貼與兩個小磁貼</string>\n    <string name=\"array_pa_blur_official\">官方預設糢糊效果</string>\n    <string name=\"array_bpa_blur_customize\">自定義背景糢糊</string>\n    <string name=\"control_center_sunshine_mode_default\">關閉</string>\n    <string name=\"control_center_sunshine_mode_one\">系統預設模式</string>\n    <string name=\"control_center_sunshine_mode_two\">強制最大亮度</string>\n    <!--System Framework-->\n    <string name=\"system_framework\">系統框架</string>\n    <string name=\"system_framework_volume_title\">音量</string>\n    <string name=\"system_framework_other_title\">其他</string>\n    <string name=\"system_framework_display_title\">顯示</string>\n    <string name=\"system_framework_phone_title\">網路</string>\n    <string name=\"system_framework_bubble_title\">氣泡通知</string>\n    <string name=\"system_framework_freeform_count\">多小窗</string>\n    <string name=\"system_framework_disable_freeform_blacklist\">停用小窗應用程式黑名單</string>\n    <string name=\"system_framework_disable_freeform_blacklist_desc\">忽略系統黑名單與軟體停用小窗</string>\n    <string name=\"system_framework_freeform_sticky\">記住狀態</string>\n    <string name=\"system_framework_freeform_bubble\">小窗氣泡</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform\">將所有小窗轉為迷你小窗</string>\n    <string name=\"system_framework_freeform_recents_to_small_freeform_desc\">在最近任務中將所有小窗轉為迷你小窗顯示\\n此功能為實驗性功能，具有較高不穩定性</string>\n    <string name=\"system_framework_freeform_jump\">跳轉應用程式使用小視窗開啟</string>\n    <string name=\"system_framework_freeform_title_desc\">在下列場景中，需要跳轉至其他應用程式時將使用小視窗開啟</string>\n    <string name=\"system_framework_freeform_content_extension_desc\">僅支援連結</string>\n    <string name=\"system_framework_default_volume_stream\">預設調整音量</string>\n    <string name=\"system_framework_volume_first_press\">音量即時調整</string>\n    <string name=\"system_framework_volume_separate_control\">音量獨立控制</string>\n    <string name=\"system_framework_volume_disable_safe\">移除高音量安全限制</string>\n    <string name=\"system_framework_volume_separate_slider\">通知音量滑動條</string>\n    <string name=\"system_framework_volume_media_steps\">媒體音量階數</string>\n    <string name=\"system_framework_volume_media_steps_desc\">可能會導致音量條的滾動卡頓或藍牙音量異常</string>\n    <string name=\"system_framework_volume_steps\">音量級數倍增</string>\n    <string name=\"system_ui_display_cutout_title\">顯示瀏海</string>\n    <string name=\"system_ui_display_hide_cutout\">隱藏螢幕瀏海</string>\n    <string name=\"system_ui_display_brightness_title\">亮度</string>\n    <string name=\"system_ui_display_auto_brightness\">自動亮度範圍</string>\n    <string name=\"system_ui_display_auto_brightness_desc\">自訂自動亮度的最小值和最大值</string>\n    <string name=\"system_ui_display_min_brightness\">最小亮度</string>\n    <string name=\"system_ui_display_max_brightness\">最大亮度</string>\n    <string name=\"system_ui_display_toast_times_title\">顯示時長調整</string>\n    <string name=\"system_ui_display_toast_times_desc\">修改 Toast 顯示時長，顯示時長始終大於 1 秒</string>\n    <string name=\"system_framework_phone_network_title\">網路設定</string>\n    <string name=\"phone_double_5g_nr\">雙卡 5G (SA+NSA)</string>\n    <string name=\"phone_double_5g_nr_desc\">雙卡同時使用 5G 網路 (卡 2 僅支援 NSA)</string>\n    <string name=\"phone_double_5g_sa\">雙卡 SA (SA+SA)</string>\n    <string name=\"phone_double_5g_sa_desc\">實驗性功能。使卡 2 支援 SA</string>\n    <string name=\"system_framework_phone_band_title\">頻段設定</string>\n    <string name=\"phone_n1\">解鎖 N1 頻段</string>\n    <string name=\"phone_n1_desc\">支援 N1 頻段 (NR)</string>\n    <string name=\"phone_n28\">解鎖 N28 頻段</string>\n    <string name=\"phone_n28_desc\">支援 N28 頻段 (NR)</string>\n    <string name=\"phone_n5_n8\">解鎖 N5/N8 頻段</string>\n    <string name=\"phone_n5_n8_desc\">在撥號介面輸入 *#*#65686633#*#* 以打開 N5/N8 頻段，若顯示 enable N5 and N8 Mode，則開啟成功</string>\n    <string name=\"system_framework_screen_all_rotations\">螢幕旋轉</string>\n    <string name=\"system_framework_allow_untrusted_touch\">允許不受信任的觸摸操作</string>\n    <string name=\"system_framework_allow_uninstall\">允許卸載部分預裝 APP</string>\n    <string name=\"system_framework_allow_uninstall_desc\">該功能具有一定危險性</string>\n    <string name=\"system_framework_disable_app_link_verify\">停用應用程式連結驗證</string>\n    <string name=\"system_framework_disable_app_link_verify_desc\">打開連結時還原為直接打開支援的應用程式，無需在應用程式設定中勾選支援的連結</string>\n    <string name=\"system_framework_clean_share_menu\">清理分享選單</string>\n    <string name=\"system_framework_clean_share_apps\">已選擇的應用程式</string>\n    <string name=\"system_framework_clean_share_apps_desc\">選取的應用程式將不會出現在分享選單中</string>\n    <string name=\"system_framework_clean_open_menu\">清理打開方式選單</string>\n    <string name=\"system_framework_clean_open_apps\">已選擇的應用程式</string>\n    <string name=\"system_framework_clean_open_apps_desc\">選取的應用程式將不會出現在開啟方式選單中</string>\n    <string name=\"system_other_flag_secure\">允許截圖</string>\n    <string name=\"system_other_flag_secure_desc\">允許對任意應用程式進行截圖和錄製螢幕</string>\n    <string name=\"system_other_delete_on_post_notification\">移除上層顯示通知</string>\n    <string name=\"system_other_delete_on_post_notification_desc\">移除「此應用程式正顯示在螢幕上其他應用程式的上層」通知</string>\n    <string name=\"system_framework_share_menu_test\">分享選單測試</string>\n    <string name=\"system_framework_open_with_menu_test\">打開方式選單測試</string>\n    <string name=\"system_framework_other_use_original_animation\">過渡動畫使用原生樣式</string>\n    <string name=\"system_framework_other_speed_install\">快速安裝</string>\n    <string name=\"system_framework_other_speed_install_desc\">安裝至運行記憶體以提升安裝速度，需要系統底層支援</string>\n    <string name=\"system_framework_other_thermal_brightness\">停用自动降低熒屏亮度</string>\n    <string name=\"system_framework_other_thermal_brightness_more\">僅限非溫控導致的自動降低熒屏亮度</string>\n    <string name=\"system_framework_other_disable_cleaner\">禁止關閉背景應用程式</string>\n    <string name=\"system_framework_other_disable_cleaner_desc\">實驗性功能，可能導致執行時記憶體使用異常</string>\n    <string name=\"system_framework_disable_72h_verify\">停用每 72 小時驗證鎖定螢幕密碼</string>\n    <!--Package Manager Service-->\n    <string name=\"system_framework_corepatch_title\">包管理服務</string>\n    <string name=\"system_framework_core_patch_downgr\">允許降級安裝應用程式</string>\n    <string name=\"system_framework_core_patch_downgr_desc\">允許應用程式在安裝新版本的情況下直接覆蓋安裝舊版本</string>\n    <string name=\"system_framework_core_patch_auth_creak\">停用應用程式包管理器簽名校驗</string>\n    <string name=\"system_framework_core_patch_auth_creak_desc\">關閉安裝應用程式時的簽名驗證，可以安裝被竄改的應用程式</string>\n    <string name=\"system_framework_disable_integrity\">停用系統完整性校驗</string>\n    <string name=\"system_framework_disable_integrity_desc\">禁止自動恢復被更改的內容。當啟用「停用應用程式包管理器簽名校驗」功能時，它將默認啟用。\\n僅支援 Android 13 及以上版本</string>\n    <string name=\"system_framework_core_patch_digest_creak\">停用 APK 簽名校驗</string>\n    <string name=\"system_framework_core_patch_digest_creak_desc\">允許直接覆蓋安裝同包名且不同簽名的應用程式</string>\n    <string name=\"system_framework_core_patch_use_pre_signature\">安裝時始終使用已安裝應用程式的簽名</string>\n    <string name=\"system_framework_core_patch_use_pre_signature_desc\">該功能極度危險，僅在絕對需要時啟用</string>\n    <string name=\"system_framework_core_patch_enhanced_mode\">增強模式</string>\n    <string name=\"system_framework_core_patch_enhanced_mode_desc\">可以解決一些應用程式內部的完整性校驗，一般不需要開啟</string>\n    <!--Browser-->\n    <string name=\"browser\">瀏覽器</string>\n    <string name=\"browser_debug_mode\">開發者選項</string>\n    <string name=\"browser_debug_mode_desc\">不支援 17.5.xxxxx 及以上版本</string>\n    <!--Camera-->\n    <string name=\"camera\">相機</string>\n    <string name=\"camera_features_unlock_aiwatermark\">解鎖 AI 浮水印</string>\n    <string name=\"camera_features_unlock_ambilight\">解鎖長曝光</string>\n    <string name=\"camera_features_unlock_clone\">解鎖魔法分身</string>\n    <string name=\"camera_features_unlock_cosmetic_mirror\">解鎖化妝鏡</string>\n    <string name=\"camera_features_unlock_doc\">解鎖文件</string>\n    <string name=\"camera_features_unlock_idcard\">解鎖身份證拍攝</string>\n    <string name=\"camera_features_unlock_dualcam\">解鎖前後雙景</string>\n    <string name=\"camera_features_unlock_duration\">解鎖延時攝影</string>\n    <string name=\"camera_features_unlock_milive\">解鎖短影片</string>\n    <string name=\"camera_features_unlock_moon\">解鎖超級月亮</string>\n    <string name=\"camera_features_unlock_pano\">解鎖全景</string>\n    <string name=\"camera_features_unlock_pixel\">解鎖超解析度模式</string>\n    <string name=\"camera_features_unlock_portrait\">解鎖人像</string>\n    <string name=\"camera_features_unlock_slow\">解鎖慢動作</string>\n    <string name=\"camera_features_unlock_videosky\">解鎖 Video-sky</string>\n    <string name=\"camera_features_unlock_vlog\">解鎖 VLOG</string>\n    <string name=\"camera_features_unlock_vlog_pro\">解鎖 VLOG Pro</string>\n    <string name=\"camera_features_unlock_film\">解鎖電影鏡頭</string>\n    <string name=\"camera_features_unlock_film_delay\">解鎖長曝光延時</string>\n    <string name=\"camera_features_unlock_film_dollyzoom\">解鎖滑動變焦</string>\n    <string name=\"camera_features_unlock_film_dream\">解鎖平行夢境</string>\n    <string name=\"camera_features_unlock_film_slowshutter\">解鎖慢快門</string>\n    <string name=\"camera_features_unlock_film_timebackflow\">解鎖時光倒流</string>\n    <string name=\"camera_features_unlock_film_timefreeze\">解鎖時間靜止</string>\n    <string name=\"camera_shot_hand_gesture\">解鎖手勢拍照</string>\n    <string name=\"camera_shot_color_enhance\">解鎖鮮豔模式</string>\n    <string name=\"camera_shot_makeup\">解鎖妝容</string>\n    <string name=\"camera_shot_makeup_desc\">僅在使用前置鏡頭時生效</string>\n    <string name=\"camera_record_60fps\">解鎖 60FPS</string>\n    <string name=\"camera_record_60fps_desc\">部分畫質下不可用，部分裝置硬體不支援</string>\n    <string name=\"camera_record_120fps\">解鎖 120FPS</string>\n    <string name=\"camera_record_120fps_desc\">僅 4K 模式支援，部分裝置硬體不支援</string>\n    <string name=\"camera_record_audio_zoom\">解鎖音源變焦</string>\n    <string name=\"camera_record_hdr\">解鎖 HDR</string>\n    <string name=\"camera_record_ai\">解鎖 AI 模式</string>\n    <string name=\"camera_portrait_new_beauty\">解鎖新版美肌</string>\n    <string name=\"camera_portrait_new_beauty_desc\">僅在使用前置鏡頭時生效</string>\n    <string name=\"camera_portrait_cvlens\">解鎖大師鏡頭</string>\n    <string name=\"camera_portrait_cvlens_desc\">部分裝置無法正常工作</string>\n    <string name=\"camera_pro_raw\">解鎖 RAW</string>\n    <string name=\"camera_pro_log\">解鎖 LOG</string>\n    <string name=\"camera_settings_heic\">解鎖 HEIF 格式</string>\n    <string name=\"camera_settings_track_focus\">解鎖萬物追焦</string>\n    <string name=\"camera_settings_predictive\">解鎖運動抓拍</string>\n    <string name=\"camera_settings_nevus\">解鎖除痣</string>\n    <string name=\"camera_settings_men_makeup\">解鎖男性妝容適配</string>\n    <string name=\"camera_settings_lab_options\">啟用實驗室選項</string>\n    <string name=\"camera_settings_track_eyes\">解鎖人眼追焦</string>\n    <!--Clock-->\n    <string name=\"clock\">時鐘</string>\n    <string name=\"clock_enable_hour_glass\">解鎖計時器沙漏動畫</string>\n    <string name=\"clock_enable_hour_glass_desc\">不支援 13.65.0 及以上版本</string>\n    <!--File Manager-->\n    <string name=\"fileexplorer\">檔案管理</string>\n    <string name=\"file_explorer_can_selectable\">資料夾名稱可以選擇操作</string>\n    <string name=\"file_explorer_is_single_line\">資料夾名稱以單行顯示</string>\n    <!--Phone-->\n    <string name=\"incallui\">電話</string>\n    <string name=\"incallui_hide_crbt\">隱藏電話答鈴</string>\n    <string name=\"incallui_answer_in_head_up\">從浮動通知接聽電話時不進入全螢幕</string>\n    <!--Message-->\n    <string name=\"mms\">簡訊</string>\n    <string name=\"mms_disable_ad\">停用推廣</string>\n    <string name=\"mms_disable_ad_desc\">移除螢幕下方快捷按鈕與簡訊內容下方推廣</string>\n    <!--Phone Service-->\n    <string name=\"phone\">電話服務</string>\n    <string name=\"phone_smart_dual_sim\">解鎖智慧雙卡切換</string>\n    <string name=\"phone_vice_slot_volte\">副卡 VoLTE 通話時可聯網</string>\n    <string name=\"phone_vice_slot_volte_desc\">在副卡通話時會將數據切換至副卡</string>\n    <!--Download management program-->\n    <string name=\"downloads\">下載管理程式</string>\n    <string name=\"various_fuck_xlDownload\">阻止建立 .xlDownload 資料夾</string>\n    <string name=\"various_fuck_xlDownload_desc\">防止下載管理程式在內部儲存的根目錄上生成 .xlDownload 資料夾</string>\n    <!--System UI-->\n    <string name=\"system_ui\">系統介面</string>\n    <string name=\"system_ui_lockscreen_title\">鎖定螢幕</string>\n    <string name=\"system_ui_lockscreen_safe_title\">安全</string>\n    <string name=\"system_ui_lockscreen_ui_title\">UI</string>\n    <string name=\"system_ui_lockscreen_information_title\">訊息</string>\n    <string name=\"system_ui_lock_screen_scramble_pin\">亂序 PIN</string>\n    <string name=\"system_ui_lock_screen_scramble_pin_desc\">隨機更改 PIN 鍵盤順序</string>\n    <string name=\"system_ui_lock_screen_password_free\">開機免輸入密碼</string>\n    <string name=\"system_ui_lock_screen_password_free_desc\">需要裝置未啟用加密才會生效</string>\n    <string name=\"system_ui_lock_screen_password_free_tip\">當前裝置已加密，此功能不可用</string>\n    <string name=\"system_ui_lock_screen_default_theme\">僅支援預設主題</string>\n    <string name=\"system_ui_lock_screen_show_charging_cv\">鎖定螢幕底部顯示充電資訊</string>\n    <string name=\"system_ui_lock_screen_show_charging_c_more\">顯示詳細電流</string>\n    <string name=\"system_ui_lock_screen_show_battery_temperature\">顯示電池溫度</string>\n    <string name=\"system_ui_lock_screen_show_spacing\">顯示刷新間隔</string>\n    <string name=\"system_ui_lock_screen_hide_camera\">停用相機</string>\n    <string name=\"system_ui_lock_screen_hide_smart_screen\">停用資訊助理</string>\n    <string name=\"system_ui_lock_screen_current\">當前</string>\n    <string name=\"system_ui_lock_screen_show_second\">時鐘顯示秒數</string>\n    <string name=\"system_ui_lock_screen_blur_button\">相機和智慧助理按鈕背景模糊</string>\n    <string name=\"system_ui_lock_screen_force_system_fonts\">時鐘強制使用系統字體</string>\n    <string name=\"system_ui_lock_screen_double_lock\">雙擊鎖定螢幕</string>\n    <string name=\"system_ui_lock_screen_double_lock_desc\">雙擊空白處鎖定螢幕</string>\n    <string name=\"system_ui_lock_screen_not_disturb_mode_title\">隱藏勿擾模式通知</string>\n    <string name=\"system_ui_lock_screen_unlock_tip_title\">隱藏螢幕底部解鎖提示</string>\n    <string name=\"system_ui_lock_screen_hide_status_bar\">鎖屏時隱藏狀態欄</string>\n    <string name=\"system_ui_navigation_title\">導航欄</string>\n    <string name=\"system_ui_navigation_handle_title\">手勢提示線</string>\n    <string name=\"system_ui_hide_navigation_bar\">隱藏導覽列</string>\n    <string name=\"system_ui_hide_navigation_bar_more\">請重新啟動 「系統桌面」 和 「系統介面」</string>\n    <string name=\"system_ui_navigation_handle_custom\">手勢提示線自訂</string>\n    <string name=\"system_ui_navigation_handle_custom_height\">高度</string>\n    <string name=\"system_ui_navigation_handle_custom_width\">豎向螢幕寬度</string>\n    <string name=\"system_ui_navigation_handle_custom_width_land\">橫向螢幕寬度</string>\n    <string name=\"system_ui_navigation_handle_custom_thickness\">粗細</string>\n    <string name=\"system_ui_navigation_handle_custom_color\">淺色背景下顏色</string>\n    <string name=\"system_ui_navigation_handle_custom_color_dark\">深色背景下顏色</string>\n    <string name=\"system_ui_navigation_custom\">自訂導覽列</string>\n    <string name=\"system_ui_navigation_custom_height\">直立式導覽列高度</string>\n    <string name=\"system_ui_navigation_custom_height_land\">橫式導覽列高度</string>\n    <string name=\"system_ui_navigation_frame_custom_height\">直立式導覽列框架高度</string>\n    <string name=\"system_ui_navigation_frame_custom_height_land\">橫式導覽列框架高度</string>\n    <string name=\"system_ui_statusbar_title\">狀態欄</string>\n    <string name=\"system_ui_statusbar_iconmanage_title\">圖示</string>\n    <string name=\"system_ui_statusbar_network_speed_indicator_title\">網速指示器</string>\n    <string name=\"system_ui_statusbar_clock_title\">時鐘指示器</string>\n    <string name=\"system_ui_statusbar_device_title\">硬體指示器</string>\n    <string name=\"system_ui_statusbar_layout_title\">佈局</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_title\">相容模式</string>\n    <string name=\"system_ui_statusbar_layout_compatibility_mode_desc\">對所有異形螢幕強制開啟完整螢幕版面配置</string>\n    <string name=\"system_ui_statusbar_layout_mode_title\">佈局模式</string>\n    <string name=\"system_ui_status_bar_double_tap_to_sleep\">雙擊狀態欄鎖定螢幕</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_title\">雙排蜂窩移動網路圖示</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_style\">圖示樣式</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_network_icon_size\">圖示縮放</string>\n    <string name=\"system_ui_status_bar_mobile_type_single\">蜂窩移動網路類型圖示單獨顯示</string>\n    <string name=\"system_ui_status_bar_mobile_type_left\">顯示在信號左側</string>\n    <string name=\"system_ui_status_bar_mobile_type_only_show_network\">僅展示網絡卡片</string>\n    <string name=\"system_ui_status_bar_mobile_indicator\">隱藏移動網路活動指示器</string>\n    <string name=\"system_ui_status_bar_mobile_type_custom\">個性化文本內容</string>\n    <string name=\"system_ui_statusbar_mobile_type_font_size\">字體大小</string>\n    <string name=\"system_ui_status_bar_battery_style_change_location_title\">交換電池的圖示和百分比位置</string>\n    <string name=\"system_ui_status_bar_battery_style_font_size\">電量百分比字體大小</string>\n    <string name=\"system_ui_status_bar_battery_style_font_mark_size\">電量百分比符號字體大小</string>\n    <string name=\"system_ui_status_bar_battery_style_vertical_offset\">電量百分比符號上下偏移量</string>\n    <string name=\"system_ui_statusbar_iconmanage_wifi_title\">Wi-Fi</string>\n    <string name=\"system_ui_statusbar_iconmanage_bluetooth_title\">藍牙</string>\n    <string name=\"system_ui_statusbar_iconmanage_mobile_title\">行動網路</string>\n    <string name=\"system_ui_statusbar_iconmanage_location_title\">位置</string>\n    <string name=\"system_ui_statusbar_iconmanage_status_title\">狀態圖示</string>\n    <string name=\"system_ui_statusbar_iconmanage_notify_title\">通知圖示</string>\n    <string name=\"system_ui_statusbar_iconmanage_battery_title\">電池</string>\n    <string name=\"system_ui_statusbar_iconmanage_call_title\">電話</string>\n    <string name=\"system_ui_statusbar_iconmanage_left_title\">圖示左側顯示</string>\n    <string name=\"system_ui_statusbar_iconmanage_right_title\">圖示右側顯示</string>\n    <string name=\"system_ui_status_bar_icon_wifi\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_slave\">從 Wi-Fi</string>\n    <string name=\"system_ui_status_bar_icon_wifi_standard\">Wi-Fi 標準</string>\n    <string name=\"system_ui_status_bar_icon_hotspot\">WIFI 熱點</string>\n    <string name=\"system_ui_status_bar_icon_wifi_network_indicator\">網路活動指示器</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth\">藍牙</string>\n    <string name=\"system_ui_status_bar_icon_bluetooth_battery\">藍牙電池</string>\n    <string name=\"system_ui_status_bar_icon_new_hd\">新 HD 圖示</string>\n    <string name=\"system_ui_status_bar_icon_small_hd\">小 HD 圖示</string>\n    <string name=\"system_ui_status_bar_icon_big_hd\">大 HD 圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_no_card\">無 SIM 卡圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_1\">SIM 卡 1 訊號圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_signal_card_2\">SIM 卡 2 訊號圖示</string>\n    <string name=\"system_ui_status_bar_icon_mobile_network_type\">顯示邏輯</string>\n    <string name=\"system_ui_status_bar_big_mobile_network_type\">大網路類型圖示</string>\n    <string name=\"system_ui_status_bar_icon_location\">位置訊息</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock\">鬧鐘</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n\">僅在鬧鐘響鈴前顯示鬧鐘圖示</string>\n    <string name=\"system_ui_status_bar_icon_alarm_clock_n_format\">%d 分鐘</string>\n    <string name=\"system_ui_status_bar_icon_airplane\">飛行模式</string>\n    <string name=\"system_ui_status_bar_icon_vowifi\">隱藏 VoWiFi 圖示</string>\n    <string name=\"system_ui_status_bar_icon_headset\">耳機</string>\n    <string name=\"system_ui_status_bar_icon_volume\">音量</string>\n    <string name=\"system_ui_status_bar_icon_data_saver\">數據節省模式</string>\n    <string name=\"system_ui_status_bar_icon_zen\">免打擾模式</string>\n    <string name=\"system_ui_status_bar_icon_stealth\">隱藏無痕模式圖示</string>\n    <string name=\"system_ui_status_bar_icon_mute\">隱藏麥克風靜音圖示</string>\n    <string name=\"system_ui_status_bar_icon_speakerphone\">隱藏揚聲器靜音圖示</string>\n    <string name=\"system_ui_status_bar_icon_call_record\">隱藏錄製圖示</string>\n    <string name=\"system_ui_status_bar_notification_dots_maximum\">通知點數最大數量</string>\n    <string name=\"system_ui_status_bar_notification_icon_maximum\">通知圖示最大數量</string>\n    <string name=\"system_ui_status_bar_battery_percent\">隱藏電量百分比</string>\n    <string name=\"system_ui_status_bar_battery_percent_mark\">隱藏電量百分比符號</string>\n    <string name=\"system_ui_status_bar_battery_charging\">隱藏充電指示器</string>\n    <string name=\"system_ui_status_bar_battery_icon\">隱藏電池圖示</string>\n    <string name=\"system_ui_status_bar_battery_style_title\">電池自訂</string>\n    <string name=\"system_ui_status_bar_battery_indicator_title\">電量指示器</string>\n    <string name=\"system_ui_status_bar_wifi_at_left\">Wi-Fi</string>\n    <string name=\"system_ui_status_bar_mobile_network_at_left\">行動網路</string>\n    <string name=\"system_ui_status_bar_swap_wifi_and_mobile_network\">交換 Wi-Fi 與行動網路</string>\n    <string name=\"system_ui_status_bar_network_speed_at_right\">網路速度</string>\n    <string name=\"system_ui_status_bar_volume_at_right\">聲音情境</string>\n    <string name=\"system_ui_status_bar_use_new_hd\">強制使用新 HD 圖示</string>\n    <string name=\"system_ui_status_bar_use_new_hd_summary\">僅支援部分系統版本</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_title\">網速分隔符號</string>\n    <string name=\"system_ui_status_bar_no_netspeed_separator_desc\">於水滴螢幕的裝置上不顯示時間和網速間的分隔號</string>\n    <string name=\"system_ui_status_bar_hide_icon\">截圖時隱藏狀態欄</string>\n    <string name=\"system_ui_status_bar_mobile_type_single_title\">蜂窩移動網路類型圖示</string>\n    <string name=\"system_ui_statusbar_network_speed_update_spacing\">網速更新間隔</string>\n    <string name=\"system_ui_statusbar_network_speed_font_size\">網速字體大小</string>\n    <string name=\"system_ui_statusbar_network_speed_fakedualrow\">值和單位雙排顯示</string>\n    <string name=\"system_ui_statusbar_network_speed_show_up_down\">顯示上下行網速</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed\">上下行網速雙排顯示</string>\n    <string name=\"system_ui_statusbar_network_speed_swap_places\">交換上下行速度顯示位置</string>\n    <string name=\"system_ui_statusbar_network_speed_detailed_desc\">分別顯示傳入和傳出的網路速度</string>\n    <string name=\"system_ui_statusbar_network_speed_hide\">隱藏慢速</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_all\">上下行網速緩慢時隱藏</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_desc\">當網速低時不再顯示指示器</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow\">慢速水準</string>\n    <string name=\"system_ui_statusbar_network_speed_hide_slow_desc\">網速值低於該水準時被認為慢，部分指示器圖示會有所不同</string>\n    <string name=\"system_ui_statusbar_network_speed_sec_unit\">網速隱藏 *b/s 單位</string>\n    <string name=\"system_ui_statusbar_network_speed_icon\">指示器圖示</string>\n    <string name=\"system_ui_statusbar_network_speed_enable_custom\">啟用自訂</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_ms\">%d ms</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_s\">%d s</string>\n    <string name=\"system_ui_statusbar_network_speed_format_d_m\">%d m</string>\n    <string name=\"system_ui_statusbar_network_speed_format_KBs\">%d KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_oneKBs\">1 KB/s</string>\n    <string name=\"system_ui_statusbar_network_speed_Bs\">B/s</string>\n    <string name=\"system_ui_statusbar_network_speed_lux\">%s lux</string>\n    <string name=\"system_ui_statusbar_clock_mode\">自訂時鐘模式</string>\n    <string name=\"system_ui_statusbar_clock_editor\">時鐘格式</string>\n    <string name=\"system_ui_statusbar_clock_year\">顯示年份</string>\n    <string name=\"system_ui_statusbar_clock_month\">顯示月份</string>\n    <string name=\"system_ui_statusbar_clock_date\">顯示日期</string>\n    <string name=\"system_ui_statusbar_clock_week\">顯示星期</string>\n    <string name=\"system_ui_statusbar_clock_hour_cn\">顯示時辰</string>\n    <string name=\"system_ui_statusbar_clock_period\">顯示時段</string>\n    <string name=\"system_ui_statusbar_clock_second\">顯示秒數</string>\n    <string name=\"system_ui_statusbar_clock_hide_space\">隱藏間隔</string>\n    <string name=\"system_ui_statusbar_clock_double\">雙排顯示</string>\n    <string name=\"system_ui_statusbar_clock_double_mode_title\">雙排對齊方式</string>\n    <string name=\"system_ui_statusbar_clock_desc\">時鐘格式範例</string>\n    <string name=\"system_ui_statusbar_clock_size\">時鐘大小</string>\n    <string name=\"system_ui_statusbar_clock_double_size\">雙排時鐘大小</string>\n    <string name=\"system_ui_statusbar_indicator_battery_title\">功耗相關</string>\n    <string name=\"system_ui_statusbar_indicator_temperature_title\">溫度相關</string>\n    <string name=\"system_ui_statusbar_battery_size\">字體大小</string>\n    <string name=\"system_ui_statusbar_battery_show\">顯示內容</string>\n    <string name=\"system_ui_statusbar_temp_decimal_places\">隱藏小數位</string>\n    <string name=\"system_ui_statusbar_battery_disable\">隱藏單位</string>\n    <string name=\"system_ui_statusbar_battery_right_show\">右側顯示</string>\n    <string name=\"system_ui_statusbar_battery_electric_current\">電流總顯示正值</string>\n    <string name=\"system_ui_statusbar_battery_line_show\">單排顯示</string>\n    <string name=\"system_ui_statusbar_battery_opposite\">反序</string>\n    <string name=\"system_ui_statusbar_battery_only_changing_show\">僅在充電時顯示</string>\n    <string name=\"system_ui_statusbar_battery_update_spacing\">狀態更新間隔</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu\">更改 CPU 溫度獲取源</string>\n    <string name=\"system_ui_statusbar_temp_fix_cpu_desc\">輸入 /sys/devices/virtual/thermal/ 資料夾下 thermal_zone* 資料夾後的數位以指定源</string>\n    <string name=\"system_ui_status_bar_battery_indicator_centered\">置中</string>\n    <string name=\"system_ui_status_bar_battery_indicator_rounded\">圓角</string>\n    <string name=\"system_ui_status_bar_battery_indicator_limitvis\">限制可見性</string>\n    <string name=\"system_ui_status_bar_battery_indicator_align\">垂直對齊</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color\">顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_full_power\">滿電量顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_low_power\">低電量顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_saving\">省電模式顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_color_power_charging\">充電顏色</string>\n    <string name=\"system_ui_status_bar_battery_indicator_height\">高度</string>\n    <string name=\"system_ui_status_bar_battery_indicator_padding\">水準邊距</string>\n    <string name=\"system_ui_status_bar_battery_indicator_alpha\">透明度</string>\n    <string name=\"system_ui_status_bar_battery_indicator_glow\">發光</string>\n    <string name=\"system_ui_status_bar_battery_indicator_low_level\">低電量水準</string>\n    <string name=\"system_ui_status_bar_battery_indicator_test\">測試</string>\n    <string name=\"system_ui_controlcenter_title\">通知與控制中心</string>\n    <string name=\"system_ui_controlcenter_card_title\">卡片</string>\n    <string name=\"system_ui_controlcenter_magnet_title\">磁貼</string>\n    <string name=\"system_ui_control_center_notification_blur_title\">通知</string>\n    <string name=\"system_control_center_qs_detail_bg\">卡片背景透明度</string>\n    <string name=\"system_control_center_5g_tile\">5G 網路開關</string>\n    <string name=\"system_control_center_5g_toggle_label\">5G 網路</string>\n    <string name=\"system_control_center_sunshine_mode\">陽光模式</string>\n    <string name=\"system_ui_control_auto_close\">磁貼自動收起</string>\n    <string name=\"system_ui_control_auto_close_more\">開啓後點擊磁貼會自動收起狀態欄</string>\n    <string name=\"system_control_center_qs_tile_label\">移除標題</string>\n    <string name=\"system_control_center_qs_rows\">行數</string>\n    <string name=\"system_control_center_qs_rows_format\">%d 行</string>\n    <string name=\"system_control_center_qs_rows_horizontal\">行（橫向）</string>\n    <string name=\"system_control_center_qs_columns\">列數</string>\n    <string name=\"system_control_center_qs_columns_format\">%d 列</string>\n    <string name=\"system_control_center_qs_columns_horizontal\">列（橫向）</string>\n    <string name=\"system_ui_control_center_hide_mi_play_entry\">妙播入口</string>\n    <string name=\"system_ui_control_center_hide_mi_smart_hub_entry\">小米妙享</string>\n    <string name=\"system_ui_control_center_hide_device_ctrl_entry\">智慧生活</string>\n    <string name=\"system_ui_control_center_control_detail_background_alpha\">面板詳情背景透明度</string>\n    <string name=\"system_ui_control_center_notification_blur_model\">通知設定</string>\n    <string name=\"system_ui_control_center_notification_blur_fix\">通知最佳化</string>\n    <string name=\"system_ui_control_center_notification_blur_fix_desc\">實驗性功能，僅向 Android 13 及以上設備使用，啓用後將對部分區域的通知模糊進行優化\\n可能會存在部分設備系統介面程式崩潰的問題</string>\n    <string name=\"system_ui_control_center_blur_radius\">通知模糊程度</string>\n    <string name=\"system_ui_control_center_blur_radius_desc\">不含下拉通知</string>\n    <string name=\"system_ui_control_center_corner_radius\">通知模糊區域圓角</string>\n    <string name=\"system_ui_control_center_corner_radius_desc\">預設主題無需調節</string>\n    <string name=\"system_ui_control_center_blur_background_alpha\">通知背景透明度</string>\n    <string name=\"system_ui_control_center_default_background_alpha\">下拉通知背景透明度</string>\n    <string name=\"system_ui_control_center_fix_media_control_panel\">修正音樂面板背景圖異常</string>\n    <string name=\"system_ui_control_center_compact_notice\">緊湊通知</string>\n    <string name=\"system_ui_control_center_compact_notice_desc\">減小通知垂直邊框</string>\n    <string name=\"system_ui_control_center_redirect_notice\">重定向通知設定</string>\n    <string name=\"system_ui_control_center_redirect_notice_desc\">打開通知功能表的設定將導航到目標通道設定，而不是應用通知設定</string>\n    <string name=\"system_ui_control_center_show_weather\">顯示天氣</string>\n    <string name=\"system_ui_control_center_show_weather_city\">顯示地區</string>\n    <string name=\"system_ui_control_center_mute_visible_notice\">開啟螢幕時靜音</string>\n    <string name=\"system_ui_control_center_mute_visible_notice_desc\">開啟螢幕時彈出通知不播放提示音</string>\n    <string name=\"system_ui_control_center_rounded_rect\">圓角矩形磁貼</string>\n    <string name=\"system_ui_control_center_switch_cc_and_notification_title\">交換控制中心與通知中心位置</string>\n    <string name=\"system_ui_controlcenter_new_title\">新控制中心</string>\n    <string name=\"system_ui_controlcenter_old_title\">經典控制中心</string>\n    <string name=\"system_ui_controlcenter_unlock_old_title\">解鎖控制中心樣式</string>\n    <string name=\"system_ui_controlcenter_enable_title\">自訂行列數</string>\n    <string name=\"system_control_center_old_qs_rows_desc\">豎向螢幕顯示 5 行時會隱藏標籤，橫向螢幕時則限制為 3 行</string>\n    <string name=\"system_control_center_old_qs_columns_desc\">豎向螢幕時會額外增加一列\\n如果您的 ROM 具有快速設置緊湊佈局選項，不管是橫向螢幕還是豎向螢幕都會增加其他列</string>\n    <string name=\"system_control_center_old_qs_grid_columns_desc\">橫向螢幕時將會額外增加一列</string>\n    <string name=\"system_control_center_old_qs_grid_columns\">折疊面板中的列數</string>\n    <string name=\"system_control_center_old_qs_grid_columns_horizontal\">折疊面板中的列數（橫向）</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_title\">藍牙磁貼樣式</string>\n    <string name=\"system_ui_control_center_cc_bluetooth_tile_style_sum\">調整藍牙磁貼位置至網路磁貼旁</string>\n    <string name=\"system_ui_other_title\">其他</string>\n    <string name=\"system_ui_charge_animation_title\">充電動畫</string>\n    <string name=\"system_ui_charge_animation_style\">充電動畫樣式</string>\n    <string name=\"system_ui_charge_animation_style_desc\">選擇鎖定螢幕充電動畫樣式</string>\n    <string name=\"system_ui_origin_charge_animation\">原生充電動畫</string>\n    <string name=\"system_ui_another_title\">其他</string>\n    <string name=\"system_ui_notification_freeform\">更多應用程式通知攔下拉打開小窗</string>\n    <string name=\"system_ui_notification_freeform_desc\">可能不支援 Mi Push 推送的通知</string>\n    <string name=\"system_ui_monet_title\">主題色</string>\n    <string name=\"system_ui_monet_overlay_custom\">自訂主題顏色</string>\n    <string name=\"system_ui_monet_overlay_custom_desc\">自訂主題顏色，而不是從桌布中提取顏色</string>\n    <string name=\"system_ui_monet_overlay_custom_color\">選擇主題顏色</string>\n    <string name=\"system_ui_volume_timer\">擴展計時器</string>\n    <string name=\"system_ui_qs_label\">快捷開關標籤</string>\n    <string name=\"system_ui_notification_title\">通知</string>\n    <string name=\"system_ui_other_notification_fix\">停用通知白名單</string>\n    <string name=\"system_ui_plugin_enable_volume_blur\">音量條模糊</string>\n    <string name=\"system_ui_plugin_enable_volume_blur_desc\">僅供 Android 12 及以上 MTK 裝置使用，可能存在 GPU 負載較高的情形</string>\n    <!--Settings-->\n    <string name=\"system_settings\">設定</string>\n    <string name=\"system_settings_international_build\">國際版本設定頁面</string>\n    <string name=\"system_settings_safe_wifi\">查看已保存的 WIFI 密碼</string>\n    <string name=\"system_settings_safe_wifi_desc\">解鎖管理已保存網路\\n路徑：設定-WLAN-進階設定-管理保存的網路</string>\n    <string name=\"system_settings_wifipassword_btn_title\">查看</string>\n    <string name=\"system_settings_wifi_password_label\">密碼</string>\n    <string name=\"system_settings_wifi_password_dlgtitle\">WiFi 詳情</string>\n    <string name=\"system_settings_novelty_haptic_title\">解鎖新版觸感調節頁面</string>\n    <string name=\"system_settings_novelty_haptic_desc\">僅供有「聲音與觸感-觸感」頁面的裝置使用</string>\n    <string name=\"system_settings_enable_pad_area\">解鎖平板（Pad）分區</string>\n    <string name=\"system_settings_enable_fold_area\">解鎖折疊屏（Fold）分區</string>\n    <string name=\"system_settings_enable_area_desc\">不受支援的設備在解鎖后將會導致崩潰</string>\n    <string name=\"system_settings_connection_sharing_title\">連接與分享</string>\n    <string name=\"system_settings_new_nfc_page\">新版 NFC 頁面</string>\n    <string name=\"system_settings_new_nfc_page_desc\">開啟後，不支援的裝置預設付款應用程式無法選中小米錢包</string>\n    <string name=\"system_settings_accessibility_title\">快速啟動手勢</string>\n    <string name=\"system_settings_area_screenshot\">解鎖區域截圖</string>\n    <string name=\"system_settings_lab_title\">特色功能</string>\n    <string name=\"system_settings_voip_assistant_controller\">網路通話助手</string>\n    <string name=\"system_settings_ai_image_title\">AI 大師畫質引擎</string>\n    <string name=\"system_settings_ai_image_unlock_sr\">解鎖超解析度增強</string>\n    <string name=\"system_settings_ai_image_unlock_ai\">解鎖 AI 智慧場景最佳化與影片畫質增強</string>\n    <string name=\"system_settings_ai_image_unlock_memc\">解鎖動態畫面補償</string>\n    <string name=\"system_settings_permission_title\">權限</string>\n    <string name=\"system_settings_permission_show_app_up\">上層權限免翻應用程式列表</string>\n    <string name=\"system_settings_permission_show_app_up_desc\">還原舊版行為，直接跳轉對應應用程式「顯示在其他應用程式上層」的權限開關</string>\n    <string name=\"system_settings_permission_unknown_origin_app\">安裝未知應用程式許可權免翻應用程式列表</string>\n    <string name=\"system_settings_permission_unknown_origin_app_desc\">使用國際版行為，直接跳轉對應應用程式的「安裝未知應用程式」許可權開關</string>\n    <string name=\"system_settings_develop_title\">開發者選項</string>\n    <string name=\"system_settings_apps_freezer\">强制顯示暫停執行已緩存的應用</string>\n    <string name=\"system_settings_apps_freezer_more\">開啓后可在\\\"開發者選項\\\"中找到此功能，為强制顯示，不保證可用</string>\n    <string name=\"system_settings_develop_speed_mode\">極致模式</string>\n    <string name=\"system_settings_develop_speed_mode_desc\">在不支援的機型上開啟後不會顯示入口</string>\n    <string name=\"system_settings_window_animation_scale\">視窗動畫縮放</string>\n    <string name=\"system_settings_transition_animation_scale\">轉場動畫比例縮放</string>\n    <string name=\"system_settings_animator_duration_scale\">動畫持續時間縮放</string>\n    <!--Themes-->\n    <string name=\"theme_manager\">主題桌布</string>\n    <string name=\"theme_manager_version_code_modify\">停用 MIUI 版本檢測</string>\n    <string name=\"theme_manager_diable_ads\">停用廣告</string>\n    <string name=\"theme_manager_diable_ads_desc\">將「猜你喜歡」的廣告替換為空白卡片，其餘位置的廣告將完全移除</string>\n    <string name=\"theme_manager_crack\">主題破解</string>\n    <string name=\"theme_manager_enable_pad_theme\">啟用 Pad 主題</string>\n    <string name=\"theme_manager_enable_fold_theme\">啟用 Fold 主題</string>\n    <!--Updater-->\n    <string name=\"updater\">系統更新</string>\n    <string name=\"updater_fuck_vab\">移除 OTA 驗證</string>\n    <string name=\"updater_fuck_vab_desc\">僅支援 VAB 裝置，其他非 VAB 裝置請不要開啟！\\n功能特點：無需內測權限即可刷入完整內測卡刷包\\n注意事項：\\n- 跨不同版本類型刷入後建議清除數據\\n- 不支援任何非官方 ROM 使用\\n- 此功能有一定危險性，請在了解 Fastboot 操作後再評估是否開啟</string>\n    <string name=\"updater_miui_version\">偽裝 MIUI 版本</string>\n    <string name=\"updater_miui_version_desc\">僅對系統更新修改，可在一定程度上遮罩系統更新</string>\n    <string name=\"updater_device\">偽裝機型</string>\n    <string name=\"updater_device_desc\">輸入目標機型代號以指定機型，可用於獲取其他機型的 ROM 包，此功能極度危險</string>\n    <!--Permissions-->\n    <string name=\"lbe\">權限管理服務</string>\n    <string name=\"clipboard\">剪貼簿</string>\n    <string name=\"lbe_disable_clipboard_tip\">隱藏 Toast 提示</string>\n    <string name=\"lbe_clipboard_tip_toast\">使用 Toast 提示讀取剪貼簿</string>\n    <string name=\"lbe_clipboard_tip_toast_desc\">隱藏對話框並允許應用程式預設讀取剪貼簿</string>\n    <string name=\"lbe_clipboard_tip\">讀取了剪貼簿</string>\n    <!--Cast-->\n    <string name=\"milink\">投影</string>\n    <string name=\"milink_unlock_mishare\">解鎖小米妙享</string>\n    <!--Always-on display-->\n    <string name=\"aod\">萬象待機</string>\n    <string name=\"aod_unlock_always_on_display\">解鎖待機顯示時長限制</string>\n    <!--Taplus-->\n    <string name=\"content_extension\">傳送門</string>\n    <string name=\"content_extension_browser\">使用協力廠商瀏覽器</string>\n    <string name=\"content_extension_browser_desc\">使傳送門不強制使用 MIUI 瀏覽器進行搜尋，需自行選擇預設瀏覽器</string>\n    <string name=\"content_extension_unlock_taplus_title\">解鎖傳送門</string>\n    <string name=\"content_extension_unlock_taplus_horizontal_title\">允許在橫向螢幕上使用傳送門</string>\n    <string name=\"content_extension_double_press\">開放雙指長按</string>\n    <string name=\"content_extension_super_image\">開放超解析度圖片</string>\n    <string name=\"content_extension_super_image_summary\">需要系統底層支援</string>\n    <string name=\"content_extension_link_open_mode\">連結開啟方式</string>\n    <string name=\"content_extension_link_open_mode_desc\">選擇一個瀏覽器以打開連結</string>\n    <!--Mi Canvas-->\n    <string name=\"creation\">小米創作</string>\n    <string name=\"creation_unlock\">移除限制手機使用規則</string>\n    <!--Gallery-->\n    <string name=\"gallery\">相簿</string>\n    <string name=\"gallery_enable_hdr_enhanced\">解鎖超動態顯示</string>\n    <string name=\"gallery_enable_pdf\">解鎖生成 PDF</string>\n    <string name=\"gallery_enable_ocr\">解鎖提取文字</string>\n    <string name=\"gallery_enable_ocr_form\">解鎖提取表格</string>\n    <string name=\"gallery_enable_id_photo\">解鎖證件照</string>\n    <string name=\"gallery_enable_photo_movie\">解鎖照片電影</string>\n    <string name=\"gallery_enable_video_post\">解鎖影片特效</string>\n    <string name=\"gallery_enable_video_editor\">解鎖影片剪輯</string>\n    <string name=\"gallery_enable_text_yanhua\">解鎖文字煙火</string>\n    <string name=\"gallery_enable_remover_2\">解鎖魔法消除</string>\n    <string name=\"gallery_enable_magic_matting\">解鎖魔法摳圖</string>\n    <string name=\"gallery_enable_magic_sky\">解鎖魔法換天</string>\n    <!--MIUI security components-->\n    <string name=\"guard_provider\">MIUI 安全性群組件</string>\n    <string name=\"guard_provider_disable_upload_applist\">阻止自動上傳已安裝的應用程式列表</string>\n    <!--System launcher-->\n    <string name=\"home\">系統桌面</string>\n    <string name=\"home_gesture\">手勢與導覽列</string>\n    <string name=\"home_navigation_title\">導航</string>\n    <string name=\"home_navigation_back_area_height\">返回手勢區域高度</string>\n    <string name=\"home_navigation_back_area_width\">返回手勢區域寬度</string>\n    <string name=\"home_gesture_title2\">手勢</string>\n    <string name=\"home_gesture_mainscreen_title\">主畫面</string>\n    <string name=\"home_gesture_gesture_title\">全螢幕手勢</string>\n    <string name=\"home_gesture_double_tap\">雙擊</string>\n    <string name=\"home_gesture_double_tap_desc\">在任意主螢幕空白處雙擊</string>\n    <string name=\"home_gesture_shake\">搖晃</string>\n    <string name=\"home_gesture_shake_desc\">在任意主螢幕搖晃裝置</string>\n    <string name=\"home_gesture_left_swipe\">左滑</string>\n    <string name=\"home_gesture_left_swipe_desc\">在主螢幕 Dock 欄向左滑動</string>\n    <string name=\"home_gesture_right_swipe\">右滑</string>\n    <string name=\"home_gesture_right_swipe_desc\">在主螢幕 Dock 欄向右滑動</string>\n    <string name=\"home_gesture_up_swipe\">上滑</string>\n    <string name=\"home_gesture_up_swipe_desc\">在任意主螢幕單指上滑</string>\n    <string name=\"home_gesture_down_swipe\">下滑</string>\n    <string name=\"home_gesture_down_swipe_desc\">在任意主螢幕單指下滑</string>\n    <string name=\"home_gesture_up_swipe2\">雙指上滑</string>\n    <string name=\"home_gesture_up_swipe2_desc\">在任意主螢幕雙指上滑</string>\n    <string name=\"home_gesture_down_swipe2\">雙指下滑</string>\n    <string name=\"home_gesture_down_swipe2_desc\">在任意主螢幕雙指下滑</string>\n    <string name=\"home_gesture_pinch\">雙指捏合</string>\n    <string name=\"home_gesture_spread\">雙指擴展</string>\n    <string name=\"home_gesture_swipe_and_stop\">滑動並停止</string>\n    <string name=\"home_gesture_swipe_and_stop_desc\">在任意非主螢幕由螢幕兩側向內滑動並停止</string>\n    <string name=\"home_gesture_multi_choose_app\">選擇應用程式</string>\n    <string name=\"home_gesture_multi_choose_app_none\">未選擇</string>\n    <string name=\"home_layout\">佈局</string>\n    <string name=\"home_layout_home_title\">主螢幕</string>\n    <string name=\"home_layout_hotseats_title\">Dock</string>\n    <string name=\"home_layout_searchbar_title\">搜尋框</string>\n    <string name=\"home_layout_seek_points\">頁面指示器</string>\n    <string name=\"home_layout_show_clock\">顯示時間</string>\n    <string name=\"home_layout_show_clock_desc\">時鐘小工具所在頁面始終顯示時間</string>\n    <string name=\"home_layout_unlock_grids\">解鎖佈局</string>\n    <string name=\"home_layout_unlock_grids_desc\">解鎖主螢幕圖示佈局大小限制</string>\n    <string name=\"home_layout_unlock_grids_no_words\">解鎖佈局（無字模式）</string>\n    <string name=\"home_layout_unlock_grids_no_words_desc\">解鎖主螢幕圖示佈局大小限制</string>\n    <string name=\"home_layout_workspace_padding_bottom_desc\">主螢幕距離螢幕底部邊距</string>\n    <string name=\"home_layout_workspace_padding_top_desc\">主螢幕距離螢幕頂部邊緣</string>\n    <string name=\"home_layout_hotseats_height\">高度</string>\n    <string name=\"home_layout_hotseats_margin_top_desc\">Dock 距離頁面指示器邊距</string>\n    <string name=\"home_layout_hotseats_margin_bottom_desc\">Dock 距離螢幕底部邊距</string>\n    <string name=\"home_layout_searchbar_margin_bottom_desc\">搜尋欄距離螢幕底部邊距</string>\n    <string name=\"home_folder\">資料夾</string>\n    <string name=\"home_small_folder_title\">小資料夾</string>\n    <string name=\"home_big_folder_title\">大資料夾</string>\n    <string name=\"home_small_folder_icon_bg\">圖示背景</string>\n    <string name=\"home_small_folder_icon_bg_custom\">背景自訂</string>\n    <string name=\"home_small_folder_icon_bg_size\">背景大小</string>\n    <string name=\"home_big_folder_icon_bg_2x1\">橫三宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_2x1_custom\">自訂</string>\n    <string name=\"home_big_folder_icon_bg_width_2x1\">背景寬度</string>\n    <string name=\"home_big_folder_icon_bg_height_2x1\">背景高度</string>\n    <string name=\"home_big_folder_icon_bg_1x2\">豎三宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_1x2_custom\">自訂</string>\n    <string name=\"home_big_folder_icon_bg_width_1x2\">背景寬度</string>\n    <string name=\"home_big_folder_icon_bg_height_1x2\">背景高度</string>\n    <string name=\"home_big_folder_icon_bg\">九宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_custom\">自訂</string>\n    <string name=\"home_big_folder_icon_bg_width\">背景寬度</string>\n    <string name=\"home_big_folder_icon_bg_height\">背景高度</string>\n    <string name=\"home_big_folder_item_max_count\">真·九宮格</string>\n    <string name=\"home_big_folder_icon_bg_2x1_n\">八宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_1x2_n\">四宮格背景自訂</string>\n    <string name=\"home_big_folder_icon_bg_n\">八宮格 和 十六宮格 背景自訂</string>\n    <string name=\"home_auto_close_folder_title\">自動關閉</string>\n    <string name=\"home_auto_close_folder_summary\">應用程式啟動後關閉資料夾</string>\n    <string name=\"home_wallpaper\">背景</string>\n    <string name=\"home_wallpaper_blur\">背景模糊</string>\n    <string name=\"home_enable_blur\">啟用模糊</string>\n    <string name=\"home_blur_radius_title\">模糊半徑</string>\n    <string name=\"home_folder_shade_title\">顏色覆蓋</string>\n    <string name=\"home_folder_shade_summary\">增強或減弱背景顏色</string>\n    <string name=\"home_folder_shade_solid\">整個背景</string>\n    <string name=\"home_folder_shade_gradient\">僅中間</string>\n    <string name=\"home_folder_shade_level_title\">色彩強度</string>\n    <string name=\"home_folder_cols_title\">資料夾欄位數量</string>\n    <string name=\"home_folder_cols_format\">%d 列</string>\n    <string name=\"home_folder_vertical_padding_title\">資料夾水準間距</string>\n    <string name=\"home_folder_width_title\">利用整個資料夾視圖的寬度</string>\n    <string name=\"home_folder_space_title\">減少邊距</string>\n    <string name=\"home_folder_blur_title\">背景模糊</string>\n    <string name=\"home_folder_anim_title\">回彈動畫</string>\n    <string name=\"home_folder_anim_1\">打開時回彈幅度</string>\n    <string name=\"home_folder_anim_2\">打開時慢放速度</string>\n    <string name=\"home_folder_anim_3\">關閉時回彈幅度</string>\n    <string name=\"home_folder_anim_4\">關閉時慢放速度</string>\n    <string name=\"home_drawer\">抽屜</string>\n    <string name=\"home_drawer_all\">移除「全部」分組</string>\n    <string name=\"home_drawer_all_desc\">移除抽屜欄內應用程式分組的「全部」分頁</string>\n    <string name=\"home_drawer_editor\">移除「編輯」按鈕</string>\n    <string name=\"home_drawer_editor_desc\">移除抽屜欄內應用程式分頁的「編輯」按鈕</string>\n    <string name=\"home_drawer_blur\">抽屜模糊</string>\n    <string name=\"home_drawer_blur_desc\">請將應用程式抽屜的背景透明度設定為 100% 以使用此功能</string>\n    <string name=\"home_drawer_pinyin\">按拼音順序排列</string>\n    <string name=\"home_drawer_pinyin_more\">非簡體中文語言時抽屜內應用程式仍按照拼音排列</string>\n    <string name=\"home_title\">圖示與標題</string>\n    <string name=\"home_title_icon_title\">圖示</string>\n    <string name=\"home_title_bigicon_title\">大圖示</string>\n    <string name=\"home_title_title_title\">標題</string>\n    <string name=\"home_title_title_marquee\">文字滾動</string>\n    <string name=\"home_title_title_marquee_desc\">過長的應用程式名稱將以滾動進行顯示，不再使用換行</string>\n    <string name=\"home_title_title_new_install\">新安裝的應用程式不展示指示器</string>\n    <string name=\"home_title_drawer_font_hidden\">隱藏全部應用程式標題</string>\n    <string name=\"home_title_drawer_font_hidden_more\">抽屜內應用程式標題也會被隱藏，如需保留抽屜文字標題，請使用「文本大小」進行調整</string>\n    <string name=\"home_title_title_new_install_more\">安裝新應用程式時，不在應用程式標題旁邊展示指示器</string>\n    <string name=\"home_title_font_size\">字體大小</string>\n    <string name=\"home_title_title_color\">文本顏色</string>\n    <string name=\"home_title_animation_speed\">動畫速度</string>\n    <string name=\"home_title_big_icon_corner\">中等圖示圓角跟隨</string>\n    <string name=\"home_title_download_animation\">下載動畫</string>\n    <string name=\"home_title_fix_animation\">最佳化打斷動畫</string>\n    <string name=\"home_title_icon_scale\">圖示縮放</string>\n    <string name=\"home_title_disable_hide_file\">停用隱藏「檔案」圖示</string>\n    <string name=\"home_title_disable_hide_theme\">不要隱藏「主題管理」圖示</string>\n    <string name=\"home_title_custom_anim_param\">動畫曲率自訂</string>\n    <string name=\"home_title_custom_anim_param_damping_title\">阻尼</string>\n    <string name=\"home_title_custom_anim_param_stiffness_title\">剛度</string>\n    <string name=\"home_recent\">最近任務</string>\n    <string name=\"home_recent_animation_speed\">動畫速度</string>\n    <string name=\"home_recent_disable_wallpaper_dimming\">取消桌布壓暗</string>\n    <string name=\"home_recent_hide_status_bar_in_task_view\">隱藏狀態欄</string>\n    <string name=\"home_recent_hide_freeform\">隱藏小窗按鈕</string>\n    <string name=\"home_recent_hide_clean_up\">隱藏清理按鈕</string>\n    <string name=\"home_recent_remove_icon\">隱藏圖示</string>\n    <string name=\"home_recent_modify_animation\">修改劃卡動畫</string>\n    <string name=\"home_recent_text\">無後台時顯示的文本</string>\n    <string name=\"home_recent_app_name_distance_task_view_card\">應用程式名稱距卡片</string>\n    <string name=\"home_recent_task_view_card_rounded_corners\">卡片圓角大小</string>\n    <string name=\"home_recent_horizontal_task_view_card_size1\">縱向螢幕卡片大小</string>\n    <string name=\"home_recent_horizontal_task_view_card_size2\">橫向螢幕卡片大小</string>\n    <string name=\"home_recent_vertical_task_view_card_size\">瀑布卡片大小</string>\n    <string name=\"home_recent_text_size\">卡片文字大小</string>\n    <string name=\"home_recent_text_color\">卡片文字顏色</string>\n    <string name=\"home_recent_freeform_background_color\">小窗應用程式卡片背景顏色</string>\n    <string name=\"home_recent_show_real_memory\">顯示真實運行記憶體</string>\n    <string name=\"home_recent_show_memory_info_sum\">平板裝置專用</string>\n    <string name=\"home_recent_show_memory_info\">顯示記憶體資訊</string>\n    <string name=\"home_recent_always_show_clean_up\">禁止卡片不存在時隱藏清理圖示</string>\n    <string name=\"home_widget\">小工具</string>\n    <string name=\"home_widget_all_widget_animation\">小工具動畫</string>\n    <string name=\"home_widget_show_miui_widget\">顯示 MIUI 小工具</string>\n    <string name=\"home_widget_show_miui_widget_desc\">在 Android 小工具頁面顯示 MIUI 小工具</string>\n    <string name=\"home_widget_corner_radius\">小工具圓角</string>\n    <string name=\"home_widget_allow_moved_to_minus_one_screen\">允許將 Android 小工具移動至智慧助理</string>\n    <string name=\"home_widget_hide_title\">隱藏小工具標題</string>\n    <string name=\"home_widget_resizable\">解除小工具大小的限制</string>\n    <string name=\"home_dock\">Dock</string>\n    <string name=\"home_dock_bg_enable\">添加底欄背景</string>\n    <string name=\"home_dock_bg_height\">高度</string>\n    <string name=\"home_dock_bg_height_desc\">Dock 欄高度</string>\n    <string name=\"home_dock_bg_margin_horizontal\">垂直邊距</string>\n    <string name=\"home_dock_bg_margin_horizontal_desc\">Dock 欄距螢幕兩側邊距</string>\n    <string name=\"home_dock_bg_margin_top_desc\">Dock 欄距頁面指示器邊距</string>\n    <string name=\"home_dock_bg_margin_bottom_desc\">Dock 欄距螢幕底部邊距</string>\n    <string name=\"home_dock_icon_margin_bottom\">圖示底部邊距</string>\n    <string name=\"home_dock_icon_margin_bottom_desc\">Dock 欄圖示距螢幕底部邊距</string>\n    <string name=\"home_dock_bg_custom\">背景模糊</string>\n    <string name=\"home_dock_icon_bottom_margin\">圖示距離底部邊距</string>\n    <string name=\"home_dock_margin_bottom\">頁面指示器距螢幕底部邊距</string>\n    <string name=\"home_dock_unlock_hotseat\">解鎖底欄圖示數量限制</string>\n    <string name=\"home_dock_fold\">Fold 樣式底欄</string>\n    <string name=\"home_dock_hide_seekpoint\">移除頁面指示器</string>\n    <string name=\"home_dock_icon_title\">顯示應用程式標題</string>\n    <string name=\"home_dock_disable_recents_icon\">在 Dock 欄中隱藏最近應用圖示</string>\n    <string name=\"home_other\">其他</string>\n    <string name=\"home_other_shortcut_title\">快捷選單</string>\n    <string name=\"home_other_home_mode\">桌面模式</string>\n    <string name=\"home_other_infinite_scroll\">無限滾動</string>\n    <string name=\"home_other_infinite_scroll_desc\">從末頁跳轉至首頁，反之亦然</string>\n    <string name=\"home_other_freeform_shortcut_menu\">小窗模式</string>\n    <string name=\"home_other_freeform_shortcut_menu_desc\">在快捷選單中增加小窗應用程式</string>\n    <string name=\"home_other_tasks_shortcut_menu\">多開模式</string>\n    <string name=\"home_other_tasks_shortcut_menu_desc\">在快捷選單中新增多開選單</string>\n    <string name=\"home_other_user_present_animation\">最佳化解鎖動畫</string>\n    <string name=\"home_other_always_blur_launcher_wallpaper\">始終模糊桌布</string>\n    <string name=\"home_other_perfect_icon\">完美圖示優先度</string>\n    <string name=\"home_other_icon_mono_chrome\">圖示背景色</string>\n    <string name=\"home_other_icon_monet_color\">使用 Monet 取色</string>\n    <string name=\"home_other_use_edit_color\">使用自訂顏色</string>\n    <string name=\"home_other_your_color\">編輯顏色</string>\n    <string name=\"home_other_portrait_reverse\">反向縱向螢幕</string>\n    <string name=\"home_other_shortcut_background_blur\">快捷選單背景模糊</string>\n    <string name=\"home_other_blur_radius\">模糊半徑</string>\n    <string name=\"home_large_icon_corner_radius\">大圖示圓角</string>\n    <string name=\"home_other_app_icon_hide\">桌面捷徑管理</string>\n    <string name=\"home_other_toast_slide_again\">不再提示 「請再次觸摸」</string>\n    <string name=\"home_other_shortcut_remove_restrictions\">解鎖 shortcut 數量限制</string>\n    <string name=\"home_other_disable_hide_google\">禁止隱藏 Google 圖示</string>\n    <string name=\"home_other_fix_android_r_s\">修復相容性問題導致系統桌布黑畫面</string>\n    <string name=\"home_other_shortcut_background_blur_custom\">Shortcut 選單背景透明度</string>\n    <string name=\"home_other_high_models\">強制識別為高端機型</string>\n    <string name=\"home_recent_blur_level\">模糊等級</string>\n    <string name=\"home_recent_complete_blur_plus\">完整模糊補充（實驗性）</string>\n    <string name=\"home_recent_complete_blur\">完整模糊</string>\n    <string name=\"home_recent_test_blur\">測試模糊</string>\n    <string name=\"home_recent_simple_blur\">簡單模糊</string>\n    <string name=\"home_recent_none_blur\">無模糊</string>\n    <string name=\"home_recent_none_blur_simple_anim\">無模糊（精簡動畫）</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_title\">解鎖更多的桌面設定選項</string>\n    <string name=\"home_other_mi_pad_enable_more_setting_desc\">解鎖後的功能不一定可用，部分功能需要系統底層支援</string>\n    <!--Gallery Editor-->\n    <string name=\"mediaeditor\">相簿編輯</string>\n    <string name=\"mediaeditor_unlock_minimum_crop_limit\">解鎖最小裁剪圖片限制</string>\n    <string name=\"mediaeditor_filter_manager\">解鎖大師濾鏡</string>\n    <!--Mi Share-->\n    <string name=\"mishare\">小米互傳</string>\n    <string name=\"mishare_disable_mishare_auto_off\">停用自動關閉小米互傳</string>\n    <string name=\"mishare_unlock_turbo_mode\">解鎖極速傳輸模式</string>\n    <!--Wallpaper-->\n    <string name=\"miwallpaper\">桌布</string>\n    <string name=\"miwallpaper_unlock_super_wallpaper\">解鎖超級桌布</string>\n    <!--Package installer-->\n    <string name=\"package_installer\">應用程式檔案管理元件</string>\n    <string name=\"miui_package_installer_modify\">淨化頁面</string>\n    <string name=\"miui_package_installer_safe_mode\">純淨模式</string>\n    <string name=\"miui_package_installer_safe_mode_desc\">強制開啟並鎖定官方安全防護</string>\n    <string name=\"miui_package_installer_disable_ad\">停用推廣</string>\n    <string name=\"miui_package_installer_install_risk\">停用風險檢測</string>\n    <string name=\"miui_package_installer_safe_model_tip\">停用安全守護提示</string>\n    <string name=\"miui_package_installer_count_checking\">停用頻繁安裝應用程式檢查</string>\n    <string name=\"miui_package_installer_update_system_app\">解除系統應用程式安裝限制</string>\n    <string name=\"miui_package_installer_update_system_app_desc\">允許任何非系統管道安裝系統應用程式</string>\n    <string name=\"miui_package_installer_install_source\">自訂安裝來源</string>\n    <string name=\"miui_package_installer_apk_info\">顯示更多安裝包資訊</string>\n    <string name=\"miui_package_installer_apk_info_desc\">顯示安裝中應用程式的更多相關資訊</string>\n    <!--networkboost-->\n    <string name=\"various_disable_link_turbo_toast\">隱藏 正在使用行動網路加速 Toast</string>\n    <string name=\"various_disable_link_turbo_toast_more\">請在快速重啟作用域內重啟 NetworkBoost</string>\n    <!--nfc-->\n    <string name=\"nfc\">NFC 服務</string>\n    <string name=\"nfc_disable_sound\">停用聲音</string>\n    <string name=\"nfc_allow_information_screen\">允许關閉熒屏时识别</string>\n    <!--App vault-->\n    <string name=\"personal_assistant\">智慧助理</string>\n    <string name=\"personal_assistant_widget_crack\">小工具破解</string>\n    <string name=\"personal_assistant_fold_widget_enable\">Pad/Fold 小工具</string>\n    <string name=\"personal_assistant_fold_widget_enable_desc\">啟用 Pad/Fold 樣式的小工具</string>\n    <string name=\"personal_assistant_overlap_mode\">智慧助理 Fold 樣式</string>\n    <string name=\"personal_assistant_blur_model\">智慧助理背景設定</string>\n    <string name=\"personal_assistant_blur_value\">背景樣式</string>\n    <string name=\"personal_assistant_blurradius\">智慧助理背景模糊程度</string>\n    <string name=\"personal_assistant_color\">智慧助理背景疊加層顏色</string>\n    <!--Music-->\n    <string name=\"music\">音樂</string>\n    <string name=\"music_disable_ad\">移除廣告</string>\n    <!--Battery and performance-->\n    <string name=\"powerkeeper\">電量和性能</string>\n    <string name=\"powerkeeper_custom_refresh_rate\">自訂高螢幕更新率的應用程式</string>\n    <string name=\"powerkeeper_lock_max_fps\">鎖定當前螢幕更新率上限</string>\n    <string name=\"powerkeeper_do_not_kill_apps\">嘗試不要殺死後台應用程式</string>\n    <string name=\"powerkeeper_do_not_kill_apps_desc\">可能使耗電量增加</string>\n    <string name=\"powerkeeper_prevent_recovery_of_battery_optimization_whitelist\">停用恢復電池效能最佳化白名單</string>\n    <!--creen Recorder-->\n    <string name=\"screenrecorder\">螢幕錄製</string>\n    <string name=\"screen_recorder_force_support_playback_capture\">強制啟用原生螢幕錄製支援</string>\n    <string name=\"screen_recorder_force_support_playback_capture_desc\">需要螢幕錄製版本支援</string>\n    <string name=\"screen_recorder_config\">增加更多影格率與碼率選項</string>\n    <string name=\"screen_recorder_config_desc\">請根據硬體情況酌情選擇</string>\n    <string name=\"screen_recorder_more_volume\">解鎖更多聲音來源選項</string>\n    <string name=\"screen_recorder_more_volume_desc\">僅支援部分版本</string>\n    <string name=\"screen_recorder_save_to_movies_desc\">規範錄製影片儲存位置為 Movies/ScreenRecorder</string>\n    <!--Screenshot-->\n    <string name=\"screenshot\">截圖</string>\n    <string name=\"screenshot_unlock_minimum_crop_limit\">解鎖最小裁剪圖片限制</string>\n    <string name=\"screenshot_unlock_privacy_marking_title\">解锁自动为隐私内容添加馬賽克效果</string>\n    <string name=\"screenshot_unlock_privacy_marking_desc\">需要預先安裝更高版本的「Mi AI Engine」應用程式才能正常使用</string>\n    <string name=\"screenshot_save_to_pictures_desc\">規範截圖儲存位置為 /Pictures/Screenshots</string>\n    <string name=\"screenshot_device_customize_title\">自定義帶殼截圖型號</string>\n    <string name=\"screenshot_device_customize_desc\">請輸入機型代號</string>\n    <!--Security/Tablet security center-->\n    <string name=\"security_center\">手機管家</string>\n    <string name=\"security_center_pad\">平板管家</string>\n    <string name=\"security_center_app_title\">應用程式管理</string>\n    <string name=\"security_center_battery_title\">省電與電池</string>\n    <string name=\"security_center_privacy_title\">隱私保護</string>\n    <string name=\"security_center_beauty_title\">前置照相助手</string>\n    <string name=\"security_center_bubble_and_freeform_title\">小窗和氣泡通知</string>\n    <string name=\"security_center_newbox_title\">全域側邊欄</string>\n    <string name=\"security_center_dolby_open\">關閉杜比彈出視窗</string>\n    <string name=\"security_center_show_battery_temperature\">顯示電池溫度</string>\n    <string name=\"security_center_ai_clipboard\">剪貼簿隱私保護</string>\n    <string name=\"security_center_blur_location\">模糊定位</string>\n    <string name=\"security_center_gms_open\">GMS 服務</string>\n    <string name=\"security_center_flash_light\">手電筒亮度控制</string>\n    <string name=\"security_center_flash_light_more\">啓用手電筒時通過拖動亮度條來控制手電筒亮度</string>\n    <string name=\"security_center_get_number\">管理應用程式取得手機號碼並一鍵登入</string>\n    <string name=\"security_center_applock_pin_scramble\">應用程式鎖亂序 PIN</string>\n    <string name=\"security_center_applock_pin_scramble_desc\">隨機更改應用程式鎖 PIN 鍵盤順序</string>\n    <string name=\"security_center_beauty_light_auto\">解鎖智慧調節補光燈亮度</string>\n    <string name=\"security_center_beauty_face\">解鎖視訊通話美肌</string>\n    <string name=\"security_center_beauty_privacy\">解鎖隱私拍攝</string>\n    <string name=\"security_center_beauty_pc\">解鎖人像居中</string>\n    <string name=\"security_center_disable_root_check\">停用 Root 檢測</string>\n    <string name=\"security_center_remove_macro_black_list\">去除自動連招黑名單</string>\n    <string name=\"security_center_disable_send_malicious_app_notification\">禁止發送「發現惡意應用程式」通知</string>\n    <string name=\"security_center_newbox_custom_enable\">啟用自訂</string>\n    <string name=\"security_center_newbox_bg_custom\">背景模糊</string>\n    <string name=\"security_center_newbox_bg_padding_vertical\">水準邊距</string>\n    <string name=\"security_center_newbox_bg_padding_horizontal\">垂直邊距</string>\n    <string name=\"security\">手機管家</string>\n    <string name=\"security_app_title\">顯示更多應用程式資訊</string>\n    <string name=\"security_app_summary\">增加新欄位到應用程式資訊頁面:\\n- 版本號碼\\n- Apk 完整目錄\\n- 數據目錄\\n- 用戶標識符\\n- 最低 SDK 版本\\n- 目標 SDK 版本\\n- 連結到應用程式商店頁面\\n- 啟動應用程式</string>\n    <string name=\"security_app_sort_title\">應用程式管理列表排序</string>\n    <string name=\"security_app_sort_summary\">修改應用程式管理列表預設排序</string>\n    <string name=\"security_restrict_app_title\">全限制</string>\n    <string name=\"security_restrict_app_summary\">允許設定省電程式並且為系統應用程式接入 Wi-Fi</string>\n    <string name=\"security_disable_app_title\">應用程式狀態控制</string>\n    <string name=\"security_disable_app_summary\">允許從應用程式資訊頁面停用任何應用程式</string>\n    <string name=\"security_disable_app_url_title\">應用程式打開連結管理</string>\n    <string name=\"security_disable_app_url_summary\">將應用程式詳情中 “消除預設操作” 更改為 “預設打開” 設置</string>\n    <string name=\"app_link_open_always\">允許應用程式打開支援的連結</string>\n    <string name=\"app_link_open_never\">不允許應用程式打開連結</string>\n    <string name=\"open_by_default\">預設打開</string>\n    <string name=\"security_score\">停用體驗最佳化</string>\n    <string name=\"security_score_summary\">鎖定 100 分與停用最佳化</string>\n    <string name=\"security_center_skip_waiting_time\">跳過倒數計時限制</string>\n    <string name=\"security_center_skip_waiting_time_desc\">跳過大部分官方危險選項的等待確認倒數時間</string>\n    <string name=\"security_center_newbox_blur\">全域側邊欄模糊</string>\n    <string name=\"security_center_remove_conversation_bubble_settings_restriction\">移除氣泡通知應用程式限制</string>\n    <string name=\"security_center_remove_low_battery_reminder_title\">隱藏低電量警告</string>\n    <string name=\"security_center_remove_low_battery_reminder_summary\">當電量低於 20% 時，不再彈出打開省電模式的警告對話框</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup\">移除打開應用程式跳出視窗</string>\n    <string name=\"security_center_remove_open_app_confirmation_popup_summary\">移除 XXX 想要打開 XXX 的跳出視窗</string>\n    <string name=\"security_center_no_permission\">未授予所需權限</string>\n    <string name=\"security_center_unlock_side_hide_freeform\">解鎖貼邊小窗</string>\n    <string name=\"security_center_unlock_side_hide_freeform_desc\">為底層支援但受限制的裝置解鎖貼邊小窗，這將同時影響手機切後台時小窗的行為</string>\n    <string name=\"security_center_unlock_smart_charge_title\">解鎖「智能斷充保護」和「低電疾充」功能</string>\n    <string name=\"security_center_super_wireless_charge\">解鎖極速無線充電模式</string>\n    <string name=\"security_center_blur_model\">全域側邊欄背景設定</string>\n    <string name=\"security_center_blurradius\">全域側邊欄背景模糊程度</string>\n    <string name=\"security_center_color\">全域側邊欄背景疊加層顏色</string>\n    <string name=\"security_center_other_title\">其他</string>\n    <string name=\"security_center_sidebar_line_color\">全域側邊欄提示線自訂</string>\n    <string name=\"security_center_sidebar_line_color_default\">預設全域側邊欄提示線顏色</string>\n    <string name=\"security_center_sidebar_line_color_dark\">深色背景下全域側邊欄提示線顏色</string>\n    <string name=\"security_center_sidebar_line_color_light\">淺色背景下全域側邊欄提示線顏色</string>\n    <string name=\"security_center_disable_ban\">移除檢舉鍵</string>\n    <string name=\"security_center_unlock_screen_time\">顯示詳細耗電數據</string>\n    <string name=\"security_center_unlock_screen_time_desc\">在耗電排行中螢幕幕耗電訊息並恢復顯示所有其他應用程式的耗電量和時間</string>\n    <string name=\"security_center_unlock_gun_service\">解鎖準星輔助</string>\n    <string name=\"security_center_disable_remove_screen_hold_on\">停用移除待機聽劇與關閉螢幕掛機</string>\n    <string name=\"security_center_unlock_memc\">解鎖動態畫面補償</string>\n    <string name=\"security_center_unlock_enhance_contours\">解鎖影像輪廓增強</string>\n    <string name=\"security_center_unlock_s_resolution\">解鎖極清播放</string>\n    <string name=\"security_center_hide_sidebar\">隱藏側邊欄</string>\n    <string name=\"security_center_leave_open\">保留側滑展開</string>\n    <string name=\"security_center_disable_sidebar_show_suggest\">禁止展示推薦應用程式</string>\n    <!--Smart cards-->\n    <string name=\"tsmclient\">小米智慧卡</string>\n    <string name=\"tsmclient_auto_nfc\">自動管理 NFC</string>\n    <string name=\"tsmclient_auto_nfc_desc\">進入刷卡頁面時自動開啟 NFC，退出時將自動關閉</string>\n    <string name=\"tsmclient_nfc_turning_on\">正自動開啟 NFC 中 …</string>\n    <string name=\"tsmclient_nfc_turn_on_manually\">手動開啟 NFC</string>\n    <string name=\"tsmclient_nfc_turn_on_failed\">自動開啟 NFC 失敗</string>\n    <!--Weather-->\n    <string name=\"weather\">天氣</string>\n    <string name=\"weather_device_level_title\">動畫等級</string>\n    <string name=\"weather_device_level_title_low\">低</string>\n    <string name=\"weather_device_level_title_middle\">中</string>\n    <string name=\"weather_device_level_title_high\">高</string>\n    <!--AI Translate-->\n    <string name=\"aiasst\">小愛翻譯</string>\n    <string name=\"aiasst_ai_captions\">強制啟用即時字幕</string>\n    <string name=\"aiasst_ai_captions_desc\">只能識別翻譯中文、英文</string>\n    <!--Barrage-->\n    <string name=\"barrage\">彈幕通知</string>\n    <string name=\"barrage_any_barrage\">允許所有應用程式使用彈幕通知</string>\n    <string name=\"barrage_custom_barrage_length\">自訂彈幕通知長度</string>\n    <!--Joyose-->\n    <string name=\"joyose\">Joyose</string>\n    <string name=\"joyose_cloud_control_title\">雲控</string>\n    <string name=\"joyose_disable_cloud_control\">停用雲端控制</string>\n    <string name=\"joyose_game_title\">遊戲空間</string>\n    <string name=\"joyose_enable_gpu_tuner\">性能調度</string>\n    <string name=\"joyose_enable_gpu_tuner_desc\">開啟後「遊戲空間」的底部中間增加遊戲 GPU 相關設定</string>\n    <!--GetApps-->\n    <string name=\"market\">應用程式商店</string>\n    <string name=\"market_device_modify\">機型偽裝</string>\n    <string name=\"market_device_modify_desc\">偽裝裝置機型為 Xiaomi 13 Ultra</string>\n    <string name=\"market_disable_new_icon\">禁止使用協力廠商圖示</string>\n    <string name=\"market_disable_new_icon_desc\">使桌面更加整潔</string>\n    <!--MIUI+-->\n    <string name=\"mirror\">MIUI+</string>\n    <string name=\"mirror_unlock_miui_plus\">解鎖 MIUI+</string>\n    <!--Mi Settings-->\n    <string name=\"mi_settings\">小米設定</string>\n    <string name=\"mi_input_settings\">輸入設定</string>\n    <string name=\"mi_settings_show_fps\">顯示更多幀數設定選項</string>\n    <string name=\"mi_settings_show_fps_desc\">該模塊預設解除所有幀率 (影格速率) 限制，不保證可用</string>\n    <!--MTB-->\n    <string name=\"mtb\">魯班 (MTB)</string>\n    <string name=\"mtb_auth\">繞過魯班 (MTB) 鑒權</string>\n    <string name=\"mtb_auth_desc\">這是一個高危險性的功能，由此引發的後果全部由使用者本人承擔，請及時備份基帶。</string>\n    <!--Scanner-->\n    <string name=\"scanner\">小愛視覺</string>\n    <string name=\"scanner_card\">解鎖掃名片</string>\n    <string name=\"scanner_translation\">解鎖翻譯</string>\n    <string name=\"scanner_ocr\">解鎖識文字</string>\n    <string name=\"scanner_document\">解鎖轉文件</string>\n    <string name=\"scanner_excel\">解鎖提取表格</string>\n    <string name=\"scanner_ppt\">解鎖提取 PPT</string>\n    <string name=\"scanner_doc_ppt\">解鎖掃文件</string>\n    <!--Other-->\n    <string name=\"various\">其他</string>\n    <string name=\"notes\">筆記</string>\n    <string name=\"share_center\">小米妙享中心</string>\n    <string name=\"new_task\">多開</string>\n    <string name=\"custom_hook\">自訂</string>\n    <string name=\"app_version_not_supported\">不受支援的版本</string>\n    <string name=\"various_location_simulation_title\">位置模擬</string>\n    <string name=\"various_dialog_title\">跳出視窗</string>\n    <string name=\"various_mipad_title\">平板相關</string>\n    <string name=\"various_open_aosp_something_title\">隱藏屬性</string>\n    <string name=\"various_open_aosp_something_desc\">啟用 AOSP 中的「隱藏」接口</string>\n    <string name=\"settings_notfication_importance\">顯示通知重要程度</string>\n    <string name=\"various_no_overscroll\">停用越界回彈</string>\n    <string name=\"various_disable_bluetooth_restrict\">停用藍牙臨時關閉</string>\n    <string name=\"various_disable_access_device_logs\">關閉訪問裝置日誌確認</string>\n    <string name=\"various_unlock_ime\">解鎖輸入法全螢幕鍵盤最佳化</string>\n    <string name=\"various_unlock_ime_desc\">啟用後請在 Xposed 管理器中勾選對應輸入法作用範圍</string>\n    <string name=\"various_collapse_miui_title\">MIUI 標題</string>\n    <string name=\"various_collapse_miui_title_desc\">調整 MIUI 應用程式中的頂欄標題</string>\n    <string name=\"various_disable_folder_cantuse\">移除部分資料夾不可選擇限制</string>\n    <string name=\"various_super_clipboard_title\">超級剪貼簿</string>\n    <string name=\"various_unlock_super_clipboard\">解鎖超級剪貼簿</string>\n    <string name=\"various_super_clipboard_summary\">僅支援具有 is_support_miui_super_clipboard 的元數據的應用程式</string>\n    <string name=\"various_super_clipboard_picture_desc\">允許將圖片複製到剪貼簿</string>\n    <string name=\"various_super_clipboard_files_desc\">允許複製檔案至剪貼簿</string>\n    <string name=\"various_open_aosp_battery_title\">電池效能最佳化</string>\n    <string name=\"various_open_aosp_notification_title\">通知設定</string>\n    <string name=\"various_open_aosp_app_manage_title\">應用程式管理</string>\n    <string name=\"various_open_aosp_language_title\">語言設定</string>\n    <string name=\"various_open_aosp_extremely_dark_title\">極暗模式</string>\n    <string name=\"various_mipad_input_title\">輸入</string>\n    <string name=\"various_mipad_input_close_magic_title\">關閉 Magic Pointer</string>\n    <string name=\"various_mipad_input_close_magic_desc\">移除 MIUI For Pad 破爛的圓形滑鼠指針，並恢復為安卓原生的滑鼠指針</string>\n    <string name=\"various_mipad_input_restore_esc_title\">恢復 ESC 鍵功能</string>\n    <string name=\"various_mipad_input_restore_esc_desc\">恢復被 MIUI 強硬射為 “返回” 功能的 ESC 鍵</string>\n    <string name=\"various_mipad_input_disable_bluetooth_title\">去除觸控筆藍牙限制</string>\n    <string name=\"various_mipad_input_disable_bluetooth_desc\">無需連結小米靈感觸控筆的藍牙即可使用相容的觸控筆</string>\n    <string name=\"various_mipad_input_bluetooth_version_title\">驅動版本</string>\n    <string name=\"various_mipad_input_bluetooth_version_desc\">移除觸控筆藍牙限制所使用的驅動版本</string>\n    <string name=\"various_mipad_input_ingore_gesture_title\">忽略觸控筆按鍵手勢</string>\n    <string name=\"various_mipad_input_ingore_gesture_desc\">忽略觸控筆長按按鍵時的手勢</string>\n    <string name=\"various_mipad_input_need_finger_num_title\">交換手勢所需的手指數量</string>\n    <string name=\"various_mipad_input_need_finger_num_desc\">將三指截圖、三指長按區域截圖、三指橫向分螢幕手勢更改為四指觸發，切換應用程式手勢更改為三指觸發</string>\n    <string name=\"custom_background_blur_enabled\">背景模糊</string>\n    <string name=\"custom_background_blur_radius\">模糊半徑</string>\n    <string name=\"custom_background_color\">背景顏色</string>\n    <string name=\"custom_background_color_alpha\">背景顏色透明度</string>\n    <string name=\"custom_background_corner_radius\">背景圓角</string>\n    <string name=\"custom_blur_enabled\">背景模糊</string>\n    <string name=\"various_blur_radius\">模糊半徑</string>\n    <string name=\"various_background_corner_radius\">背景圓角</string>\n    <string name=\"various_background_alpha\">背景遮罩透明度</string>\n    <string name=\"various_background_color\">背景顏色</string>\n    <string name=\"various_dialog_window_blur_title\">模糊</string>\n    <string name=\"various_dialog_gravity\">跳出視窗位置</string>\n    <string name=\"various_dialog_margin_horizontal\">跳出視窗垂直邊距</string>\n    <string name=\"various_dialog_margin_horizontal_desc\">跳出視窗距螢幕兩側的距離</string>\n    <string name=\"various_dialog_margin_bottom\">跳出視窗底部邊距</string>\n    <string name=\"various_dialog_margin_bottom_desc\">跳出視窗距螢幕底部的距離</string>\n    <string name=\"various_dialog_window_blur\">窗口模糊</string>\n    <string name=\"various_dialog_window_blur_radius\">窗口模糊半徑</string>\n    <string name=\"location_data_title\">資料庫</string>\n    <string name=\"various_location_simulation_1_title\">任務 1</string>\n    <string name=\"various_location_simulation_2_title\">任務 2</string>\n    <string name=\"various_location_simulation_3_title\">任務 3</string>\n    <string name=\"various_location_simulation_all_title\">通用</string>\n    <string name=\"location_simulation_package_name\">包名</string>\n    <string name=\"location_simulation_location\">位置</string>\n    <string name=\"location_simulation_location_custom\">選擇位置</string>\n    <string name=\"location_simulation_network\">網路</string>\n    <string name=\"location_simulation_operator_fix\">運營商偽裝修復</string>\n    <string name=\"location_simulation_mac\">Mac 位址</string>\n    <string name=\"location_simulation_wifi\">Wi-Fi</string>\n    <string name=\"location_simulation_router_mac\">路由器 Mac 位址</string>\n    <string name=\"location_simulation_work_title\">標題</string>\n    <string name=\"location_simulation_work_offset\">偏移</string>\n    <string name=\"location_simulation_work_base_station\">基地台</string>\n    <string name=\"location_simulation_work_longitude_latitude\">經緯度</string>\n    <string name=\"location_simulation_work_remarks\">備註</string>\n    <string name=\"app_details_playstore\">使用應用程式商店打開</string>\n    <string name=\"app_details_launch\">啟動</string>\n    <string name=\"app_details_nolaunch\">應用程式沒有預設可啟動的活動</string>\n    <string name=\"app_details_apk_file\">APK 目錄</string>\n    <string name=\"app_details_apk_version_code\">版本號碼</string>\n    <string name=\"app_details_data_path\">數據目錄</string>\n    <string name=\"app_details_app_uid\">用戶標識符</string>\n    <string name=\"app_details_sdk\">目標 SDK 版本</string>\n    <string name=\"app_details_min_sdk\">最低 SDK 版本</string>\n    <string name=\"disable_app_settings\">這是一個壞主意！</string>\n    <string name=\"disable_app_title\">確定要停用該應用程式嗎？</string>\n    <string name=\"disable_app_text\">如果這是一個必要的系統應用程式，將其停用可能會導致裝置損毀</string>\n    <string name=\"disable_app_fail\">更改應用程式狀態失敗</string>\n    <string name=\"unlimited\">無限制</string>\n    <string name=\"calls\">通話</string>\n    <string name=\"system_volume\">系統</string>\n    <string name=\"notification_volume\">通知</string>\n    <string name=\"freeform_notification\">通知懸浮視窗</string>\n    <string name=\"share_app\">分享至第三方應用程式</string>\n    <string name=\"show_newmods_title\">標記新模組</string>\n    <string name=\"default_volume_stream_ring\">鈴聲</string>\n    <string name=\"default_volume_stream_media\">媒體</string>\n    <string name=\"default_volume_stream_tip\">通知</string>\n    <string name=\"open_with_test_picture\">圖片</string>\n    <string name=\"open_with_test_audio\">聲音</string>\n    <string name=\"open_with_test_media\">影片</string>\n    <string name=\"open_with_test_doc\">文件</string>\n    <string name=\"open_with_test_zip\">歸檔</string>\n    <string name=\"open_with_test_all\">全部</string>\n    <string name=\"location_custom\">自訂</string>\n    <string name=\"operator_fix_none\">不修復</string>\n    <string name=\"operator_fix_1\">方法一</string>\n    <string name=\"operator_fix_2\">方法二（推薦）</string>\n    <string name=\"custom_hook_new\">增加 Hook</string>\n    <string name=\"custom_hook_mode\">選擇模式</string>\n    <string name=\"cemiuiler_notice\">下拉狀態欄，同時顯示快捷開關和系統通知</string>\n    <string name=\"cemiuiler_restart_quick\">快速重啟作用域</string>\n    <string name=\"location_add\">增加</string>\n    <string name=\"location_delete\">刪除</string>\n    <!--Tip-->\n    <string name=\"tip_0\">小提示：這是一個提示 (tip) ！</string>\n    <string name=\"tip_1\">小提示：你可以在「關於-贊助」中贊助以支援我們。</string>\n    <string name=\"tip_2\">小提示：想要聯繫開發者？這裡可以找到我 Telegram@Sevtinge_PM_bot 或 Bilibili@绀漓丨Sevtinge。</string>\n    <string name=\"tip_3\">小提示：想要加入官方群組嗎？可以通過 Telegram@cemiuiler 或在 QQ 中搜索 247909573。</string>\n    <string name=\"tip_4\">小提示：Cemiuiler = Ceiler + MIUI ⇒ Ceiler = Ceil + er。</string>\n    <string name=\"tip_5\">小提示：猜猜這種小提示還會出現多少次？</string>\n    <string name=\"tip_6\">小提示：讓 MIUI 再次偉大！</string>\n    <string name=\"tip_7\">小提示：歡迎關注 Github@sevtinge 或 Bilibili@绀漓丨Sevtinge。</string>\n    <string name=\"tip_8\">小提示：理想中的烏托邦在現實中並不存在。</string>\n    <string name=\"tip_9\">小提示：三江市常發生倒塌。</string>\n    <string name=\"tip_10\">小提示：世間盡是錦繡，遺憾絢麗無緣 Sevtinge。</string>\n    <string name=\"tip_11\">小提示：我保留了一部分 bug 的味道，才知道你食的是 Cemiuiler。</string>\n    <string name=\"tip_12\">小提示：你知道嗎？提示都是廢話。(歪頭燦笑)</string>\n    <string name=\"tip_13\">小提示：誰懂啊？Cemiuiler 的生日 5 月 1 號，Sevtinge 的生日卻在 2 月 2 號。</string>\n    <string name=\"tip_14\">小提示：Sevtinge 曾就讀於山河大學三江市校區的資訊工程與技術學院。</string>\n    <string name=\"tip_15\">小提示：聽說…… Sevtinge 有兩種不同的形態。</string>\n    <string name=\"tip_16\">小提示：Sevtinge 是隻小狐娘！(小心福瑞控)</string>\n    <string name=\"tip_17\">小提示：鈴柒柒有兩種愛好，是個貓娘控也是個蘿莉控 (x</string>\n    <string name=\"tip_18\">小提示：Cemiuiler 是最會噴電的的系統內建 (喂！)</string>\n    <string name=\"tip_19\">小提示：變灰功能沒有特別註釋，代表功能異常，目前不計劃開放。</string>\n    <string name=\"tip_20\">小提示：沒事兒，別找 Canary 追新，有問題也別急著更新。(扶額</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/xml/aiasst.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/aiasst_ai_captions\"\n            android:summary=\"@string/aiasst_ai_captions_desc\"\n            android:key=\"prefs_key_aiasst_ai_captions\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/aod.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/aod_unlock_always_on_display\"\n            android:key=\"prefs_key_aod_unlock_always_on_display\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/backup_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample backup rules file; uncomment and customize as necessary.\n   See https://developer.android.com/guide/topics/data/autobackup\n   for details.\n   Note: This file is ignored for devices older that API 31\n   See https://developer.android.com/about/versions/12/backup-restore\n-->\n<full-backup-content>\n    <!--\n   <include domain=\"sharedpref\" path=\".\"/>\n   <exclude domain=\"sharedpref\" path=\"device.xml\"/>\n-->\n</full-backup-content>"
  },
  {
    "path": "app/src/main/res/xml/barrage.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/barrage_any_barrage\"\n            android:key=\"prefs_key_barrage_any_barrage\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_barrage_custom_barrage_length\"\n            android:title=\"@string/barrage_custom_barrage_length\"\n            android:defaultValue=\"36\"\n            app:format=\"%s\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"108\"\n            app:minValue=\"12\" />\n\n    </PreferenceCategory>\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/browser.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/browser_debug_mode\"\n            android:summary=\"@string/browser_debug_mode_desc\"\n            android:key=\"prefs_key_browser_debug_mode\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/camera.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/shot\">\n\n        <SwitchPreference\n            android:title=\"@string/camera_shot_hand_gesture\"\n            android:key=\"prefs_key_camera_shot_hand_gesture\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_shot_color_enhance\"\n            android:key=\"prefs_key_camera_shot_color_enhance\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_shot_makeup\"\n            android:summary=\"@string/camera_shot_makeup_desc\"\n            android:key=\"prefs_key_camera_shot_makeup\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/record\">\n\n        <SwitchPreference\n            android:title=\"@string/camera_record_60fps\"\n            android:summary=\"@string/camera_record_60fps_desc\"\n            android:key=\"prefs_key_camera_record_60fps\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_record_120fps\"\n            android:summary=\"@string/camera_record_120fps_desc\"\n            android:key=\"prefs_key_camera_record_120fps\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_record_hdr\"\n            android:key=\"prefs_key_camera_record_hdr\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_record_ai\"\n            android:key=\"prefs_key_camera_record_ai\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_record_audio_zoom\"\n            android:key=\"prefs_key_camera_record_audio_zoom\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/portrait\">\n\n        <SwitchPreference\n            android:title=\"@string/camera_portrait_cvlens\"\n            android:summary=\"@string/camera_portrait_cvlens_desc\"\n            android:key=\"prefs_key_camera_portrait_cvlens\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_portrait_new_beauty\"\n            android:summary=\"@string/camera_portrait_new_beauty_desc\"\n            android:key=\"prefs_key_camera_portrait_new_beauty\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/camera_pro\">\n\n        <SwitchPreference\n            android:title=\"@string/camera_pro_raw\"\n            android:key=\"prefs_key_camera_pro_raw\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_pro_log\"\n            android:key=\"prefs_key_camera_pro_log\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/feature\">\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_aiwatermark\"\n            android:key=\"prefs_key_camera_features_unlock_aiwatermark\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_ambilight\"\n            android:key=\"prefs_key_camera_features_unlock_ambilight\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_clone\"\n            android:key=\"prefs_key_camera_features_unlock_clone\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_cosmetic_mirror\"\n            android:key=\"prefs_key_camera_features_unlock_cosmetic_mirror\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_doc\"\n            android:key=\"prefs_key_camera_features_unlock_doc\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_idcard\"\n            android:key=\"prefs_key_camera_features_unlock_idcard\"\n            android:dependency=\"prefs_key_camera_features_unlock_doc\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_dualcam\"\n            android:key=\"prefs_key_camera_features_unlock_dualcam\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_duration\"\n            android:key=\"prefs_key_camera_features_unlock_duration\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_milive\"\n            android:key=\"prefs_key_camera_features_unlock_milive\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_moon\"\n            android:key=\"prefs_key_camera_features_unlock_moon\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_pano\"\n            android:key=\"prefs_key_camera_features_unlock_pano\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_pixel\"\n            android:key=\"prefs_key_camera_features_unlock_pixel\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_portrait\"\n            android:key=\"prefs_key_camera_features_unlock_portrait\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_slow\"\n            android:key=\"prefs_key_camera_features_unlock_slow\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_videosky\"\n            android:key=\"prefs_key_camera_features_unlock_videosky\"\n            android:defaultValue=\"false\"\n            app:isPreferenceVisible=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_vlog\"\n            android:key=\"prefs_key_camera_features_unlock_vlog\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_vlog_pro\"\n            android:key=\"prefs_key_camera_features_unlock_vlog_pro\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_film\"\n            android:key=\"prefs_key_camera_features_unlock_film\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_film_delay\"\n            android:key=\"prefs_key_camera_features_unlock_film_delay\"\n            android:dependency=\"prefs_key_camera_features_unlock_film\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_film_dollyzoom\"\n            android:key=\"prefs_key_camera_features_unlock_film_dollyzoom\"\n            android:dependency=\"prefs_key_camera_features_unlock_film\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_film_dream\"\n            android:key=\"prefs_key_camera_features_unlock_film_dream\"\n            android:dependency=\"prefs_key_camera_features_unlock_film\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_film_slowshutter\"\n            android:key=\"prefs_key_camera_features_unlock_film_slowshutter\"\n            android:dependency=\"prefs_key_camera_features_unlock_film\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_film_timebackflow\"\n            android:key=\"prefs_key_camera_features_unlock_film_timebackflow\"\n            android:dependency=\"prefs_key_camera_features_unlock_film\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_features_unlock_film_timefreeze\"\n            android:key=\"prefs_key_camera_features_unlock_film_timefreeze\"\n            android:dependency=\"prefs_key_camera_features_unlock_film\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/settings\">\n\n        <SwitchPreference\n            android:title=\"@string/camera_settings_track_focus\"\n            android:key=\"prefs_key_camera_settings_track_focus\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_settings_heic\"\n            android:key=\"prefs_key_camera_settings_heic\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_settings_predictive\"\n            android:key=\"prefs_key_camera_settings_predictive\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_settings_nevus\"\n            android:key=\"prefs_key_camera_settings_nevus\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_settings_men_makeup\"\n            android:key=\"prefs_key_camera_settings_men_makeup\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_settings_lab_options\"\n            android:key=\"prefs_key_camera_settings_lab_options\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/camera_settings_track_eyes\"\n            android:key=\"prefs_key_camera_settings_track_eyes\"\n            android:dependency=\"prefs_key_camera_settings_lab_options\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/clock.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_clock_enable_hour_glass\"\n            android:summary=\"@string/clock_enable_hour_glass_desc\"\n            android:title=\"@string/clock_enable_hour_glass\" />\n\n    </PreferenceCategory>\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/content_extension.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:title=\"@string/content_extension_unlock_taplus_title\"\n            android:key=\"prefs_key_content_extension_unlock_taplus\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/content_extension_browser\"\n            android:summary=\"@string/content_extension_browser_desc\"\n            android:key=\"prefs_key_content_extension_browser\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/content_extension_unlock_taplus_horizontal_title\"\n            android:key=\"prefs_key_content_extension_unlock_taplus_horizontal\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/content_extension_double_press\"\n            android:key=\"prefs_key_content_extension_double_press\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/content_extension_super_image\"\n            android:summary=\"@string/content_extension_super_image_summary\"\n            android:key=\"prefs_key_content_extension_super_image\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory>\n        <DropDownPreference\n            android:title=\"@string/content_extension_link_open_mode\"\n            android:summary=\"@string/content_extension_link_open_mode_desc\"\n            android:key=\"prefs_key_content_extension_link_open_mode\"\n            android:defaultValue=\"0\"\n            app:entries=\"@array/link_open_mode\"\n            app:entryValues=\"@array/link_open_mode_value\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/creation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:title=\"@string/creation_unlock\"\n            android:key=\"prefs_key_creation_unlock_enable\"\n            android:defaultValue=\"false\" />\n    \n    </PreferenceCategory>\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/custom_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:key=\"prefs_key_custom_background_enabled\"\n            android:persistent=\"false\"\n            android:title=\"@string/custom_enable\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:dependency=\"prefs_key_custom_background_enabled\">\n        <ColorPickerPreference\n            android:defaultValue=\"-1\"\n            android:key=\"prefs_key_custom_background_color\"\n            android:persistent=\"false\"\n            android:title=\"@string/custom_background_color\" />\n\n        <SeekBarPreference\n            android:defaultValue=\"20\"\n            android:format=\"%d dp\"\n            android:key=\"prefs_key_custom_background_corner_radius\"\n            android:max=\"60\"\n            android:persistent=\"false\"\n            android:title=\"@string/custom_background_corner_radius\"\n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_custom_background_blur_enabled\"\n            android:persistent=\"false\"\n            android:title=\"@string/custom_background_blur_enabled\" />\n\n        <SeekBarPreference\n            android:defaultValue=\"60\"\n            android:dependency=\"prefs_key_custom_background_blur_enabled\"\n            android:format=\"%d dp\"\n            android:key=\"prefs_key_custom_background_blur_radius\"\n            android:max=\"100\"\n            android:persistent=\"false\"\n            android:title=\"@string/custom_background_blur_radius\"\n            app:showSeekBarValue=\"true\" />\n\n    </PreferenceCategory>\n\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/data_extraction_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample data extraction rules file; uncomment and customize as necessary.\n   See https://developer.android.com/about/versions/12/backup-restore#xml-changes\n   for details.\n-->\n<data-extraction-rules>\n    <cloud-backup>\n        <!-- TODO: Use <include> and <exclude> to control what is backed up.\n        <include .../>\n        <exclude .../>\n        -->\n    </cloud-backup>\n    <!--\n    <device-transfer>\n        <include .../>\n        <exclude .../>\n    </device-transfer>\n    -->\n</data-extraction-rules>"
  },
  {
    "path": "app/src/main/res/xml/downloads.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <SwitchPreference\n        android:title=\"@string/various_fuck_xlDownload\"\n        android:summary=\"@string/various_fuck_xlDownload_desc\"\n        android:key=\"prefs_key_various_fuck_xlDownload\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/fileexplorer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_file_explorer_can_selectable\"\n            android:title=\"@string/file_explorer_can_selectable\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_file_explorer_is_single_line\"\n            android:title=\"@string/file_explorer_is_single_line\" />\n\n    </PreferenceCategory>\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/framework.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n\n        <Preference\n            android:title=\"@string/floating_window\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.framework.FreeFormSettings\"/>\n\n        <Preference\n            android:title=\"@string/system_framework_volume_title\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.framework.VolumeSettings\"/>\n\n        <Preference\n            android:title=\"@string/system_framework_display_title\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.framework.DisplaySettings\" />\n\n        <Preference\n            android:title=\"@string/system_framework_phone_title\"\n            android:key=\"prefs_key_system_framework_network\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.framework.NetworkSettings\"/>\n\n        <Preference\n            android:title=\"@string/system_framework_other_title\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.framework.OtherSettings\"/>\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_framework_corepatch_title\">\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_core_patch_downgr\"\n            android:summary=\"@string/system_framework_core_patch_downgr_desc\"\n            android:key=\"prefs_key_system_framework_core_patch_downgr\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_core_patch_auth_creak\"\n            android:summary=\"@string/system_framework_core_patch_auth_creak_desc\"\n            android:key=\"prefs_key_system_framework_core_patch_auth_creak\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_disable_integrity\"\n            android:summary=\"@string/system_framework_disable_integrity_desc\"\n            android:key=\"prefs_key_system_framework_core_patch_disable_integrity\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_core_patch_digest_creak\"\n            android:summary=\"@string/system_framework_core_patch_digest_creak_desc\"\n            android:key=\"prefs_key_system_framework_core_patch_digest_creak\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_core_patch_use_pre_signature\"\n            android:summary=\"@string/system_framework_core_patch_use_pre_signature_desc\"\n            android:key=\"prefs_key_system_framework_core_patch_use_pre_signature\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_core_patch_enhanced_mode\"\n            android:summary=\"@string/system_framework_core_patch_enhanced_mode_desc\"\n            android:key=\"prefs_key_system_framework_core_patch_enhanced_mode\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/framework_display.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/system_ui_display_cutout_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:title=\"@string/system_ui_display_hide_cutout\"\n            android:key=\"prefs_key_system_ui_display_hide_cutout_enable\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_display_brightness_title\">\n        <SwitchPreference\n            android:enabled=\"false\"\n            android:title=\"@string/system_ui_display_auto_brightness\"\n            android:summary=\"@string/system_ui_display_auto_brightness_desc\"\n            android:key=\"prefs_key_system_control_center_auto_brightness\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_ui_display_min_brightness\"\n            android:key=\"prefs_key_system_control_center_auto_brightness_min\"\n            android:dependency=\"prefs_key_system_control_center_auto_brightness\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"pref_key_system_ui_auto_brightness_min\"\n            android:dependency=\"prefs_key_system_control_center_auto_brightness_min\"\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:defaultValue=\"25\"\n            app:minValue=\"0\"\n            app:maxValue=\"98\"\n            app:stepValue=\"1\"\n            app:format=\"%d%%\"\n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_ui_display_max_brightness\"\n            android:key=\"prefs_key_system_control_center_auto_brightness_max\"\n            android:dependency=\"prefs_key_system_control_center_auto_brightness\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"pref_key_system_ui_auto_brightness_max\"\n            android:dependency=\"prefs_key_system_control_center_auto_brightness_max\"\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:defaultValue=\"75\"\n            app:minValue=\"0\"\n            app:maxValue=\"100\"\n            app:stepValue=\"1\"\n            app:format=\"%d%%\"\n            app:showSeekBarValue=\"true\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_display_toast_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_display_toast_times_enable\"\n            android:title=\"@string/system_ui_display_toast_times_title\"\n            android:summary=\"@string/system_ui_display_toast_times_desc\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"pref_key_system_ui_display_toast_times\"\n            android:dependency=\"prefs_key_system_ui_display_toast_times_enable\"\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            app:defaultValueText=\"@string/array_default\"\n            android:defaultValue=\"0\"\n            app:minValue=\"0\"\n            app:maxValue=\"19\"\n            app:stepValue=\"1\"\n            app:negativeShift=\"4\"\n            app:format=\"%d s\" />\n\n    </PreferenceCategory>\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/framework_freeform.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory android:title=\"@string/floating_window\">\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_freeform_count\"\n            android:key=\"prefs_key_system_framework_freeform_count\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_disable_freeform_blacklist\"\n            android:summary=\"@string/system_framework_disable_freeform_blacklist_desc\"\n            android:key=\"prefs_key_system_framework_disable_freeform_blacklist\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_freeform_sticky\"\n            android:key=\"prefs_key_system_framework_freeform_sticky\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_freeform_recents_to_small_freeform\"\n            android:summary=\"@string/system_framework_freeform_recents_to_small_freeform_desc\"\n            android:key=\"prefs_key_system_framework_freeform_recents_to_small_freeform\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory\n        android:title=\"@string/system_framework_bubble_title\"\n        android:key=\"prefs_key_system_framework_freeform_bubble_title\">\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_freeform_bubble\"\n            android:key=\"prefs_key_system_framework_freeform_bubble\"\n            android:defaultValue=\"false\" />\n\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_other_title\">\n\n        <SwitchPreference\n            android:title=\"@string/system_framework_freeform_jump\"\n            android:summary=\"@string/system_framework_freeform_title_desc\"\n            android:key=\"prefs_key_system_framework_freeform_jump\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/notification_volume\"\n            android:key=\"prefs_key_system_framework_freeform_open_notification\"\n            android:dependency=\"prefs_key_system_framework_freeform_jump\" />\n\n        <SwitchPreference\n            android:title=\"@string/freeform_notification\"\n            android:key=\"prefs_key_system_framework_freeform_open_notification_fw\"\n            android:dependency=\"prefs_key_system_framework_freeform_jump\" />\n\n        <SwitchPreference\n            android:title=\"@string/content_extension\"\n            android:summary=\"@string/system_framework_freeform_content_extension_desc\"\n            android:key=\"prefs_key_system_framework_freeform_content_extension\"\n            android:dependency=\"prefs_key_system_framework_freeform_jump\" />\n\n        <SwitchPreference\n            android:title=\"@string/share_app\"\n            android:key=\"prefs_key_system_framework_freeform_app_share\"\n            android:dependency=\"prefs_key_system_framework_freeform_jump\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/framework_other.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_screen_all_rotations\"\n            android:title=\"@string/system_framework_screen_all_rotations\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_allow_uninstall\"\n            android:summary=\"@string/system_framework_allow_uninstall_desc\"\n            android:title=\"@string/system_framework_allow_uninstall\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_disable_72h_verify\"\n            android:title=\"@string/system_framework_disable_72h_verify\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_other_speed_install\"\n            android:summary=\"@string/system_framework_other_speed_install_desc\"\n            android:title=\"@string/system_framework_other_speed_install\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_other_thermal_brightness\"\n            android:summary=\"@string/system_framework_other_thermal_brightness_more\"\n            android:title=\"@string/system_framework_other_thermal_brightness\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_other_disable_cleaner\"\n            android:summary=\"@string/system_framework_other_disable_cleaner_desc\"\n            android:title=\"@string/system_framework_other_disable_cleaner\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_disable_app_link_verify\"\n            android:summary=\"@string/system_framework_disable_app_link_verify_desc\"\n            android:title=\"@string/system_framework_disable_app_link_verify\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_other_use_original_animation\"\n            android:title=\"@string/system_framework_other_use_original_animation\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_clean_share_menu\"\n            android:title=\"@string/system_framework_clean_share_menu\" />\n\n        <Preference\n            android:dependency=\"prefs_key_system_framework_clean_share_menu\"\n            android:key=\"prefs_key_system_framework_clean_share_apps\"\n            android:summary=\"@string/system_framework_clean_share_apps_desc\"\n            android:title=\"@string/system_framework_clean_share_apps\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_clean_open_menu\"\n            android:title=\"@string/system_framework_clean_open_menu\" />\n\n        <Preference\n            android:dependency=\"prefs_key_system_framework_clean_open_menu\"\n            android:key=\"prefs_key_system_framework_clean_open_apps\"\n            android:summary=\"@string/system_framework_clean_open_apps_desc\"\n            android:title=\"@string/system_framework_clean_open_apps\" />\n\n    </PreferenceCategory>\n\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_other_flag_secure\"\n            android:summary=\"@string/system_other_flag_secure_desc\"\n            android:title=\"@string/system_other_flag_secure\" />\n\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_framework_allow_untrusted_touch\"\n            android:title=\"@string/system_framework_allow_untrusted_touch\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_other_delete_on_post_notification\"\n            android:summary=\"@string/system_other_delete_on_post_notification_desc\"\n            android:title=\"@string/system_other_delete_on_post_notification\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/framework_phone.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory android:title=\"@string/system_framework_phone_network_title\">\n\n        <SwitchPreference\n            android:title=\"@string/phone_double_5g_nr\"\n            android:summary=\"@string/phone_double_5g_nr_desc\"\n            android:key=\"prefs_key_phone_double_5g_nr\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/phone_double_5g_sa\"\n            android:summary=\"@string/phone_double_5g_sa_desc\"\n            android:key=\"prefs_key_phone_double_5g_sa\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_framework_phone_band_title\">\n\n        <SwitchPreference\n            android:title=\"@string/phone_n1\"\n            android:summary=\"@string/phone_n1_desc\"\n            android:key=\"prefs_key_phone_n1\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/phone_n5_n8\"\n            android:summary=\"@string/phone_n5_n8_desc\"\n            android:key=\"prefs_key_phone_n5_n8\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/phone_n28\"\n            android:summary=\"@string/phone_n28_desc\"\n            android:key=\"prefs_key_phone_n28\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/framework_volume.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <DropDownPreference\n        android:title=\"@string/system_framework_default_volume_stream\"\n        android:key=\"prefs_key_system_framework_default_volume_stream\"\n        app:entries=\"@array/default_volume_stream\"\n        app:entryValues=\"@array/default_volume_streame_value\"\n        android:defaultValue=\"0\" />\n\n    <SwitchPreference\n        android:title=\"@string/system_framework_volume_first_press\"\n        android:key=\"prefs_key_system_framework_volume_first_press\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:title=\"@string/system_framework_volume_separate_control\"\n        android:key=\"prefs_key_system_framework_volume_separate_control\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:title=\"@string/system_framework_volume_separate_slider\"\n        android:key=\"prefs_key_system_framework_volume_separate_slider\"\n        android:defaultValue=\"false\"\n        android:dependency=\"prefs_key_system_framework_volume_separate_control\" />\n\n    <SwitchPreference\n        android:title=\"@string/system_framework_volume_disable_safe\"\n        android:key=\"prefs_key_system_framework_volume_disable_safe\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_system_framework_volume_media_steps_enable\"\n        android:title=\"@string/system_framework_volume_media_steps\"\n        android:summary=\"@string/system_framework_volume_media_steps_desc\" />\n\n    <SeekBarPreferenceEx\n        android:layout=\"@layout/preference_seekbar_no_padding\"\n        android:key=\"prefs_key_system_framework_volume_media_steps\"\n        android:dependency=\"prefs_key_system_framework_volume_media_steps_enable\"\n        android:defaultValue=\"15\"\n        app:defaultValueText=\"@string/array_default\"\n        app:maxValue=\"29\"\n        app:minValue=\"15\"\n        app:stepValue=\"1\"\n        app:format=\"%s\"\n        app:showSeekBarValue=\"true\" />\n\n    <SeekBarPreferenceEx\n        android:key=\"prefs_key_system_framework_volume_steps\"\n        android:title=\"@string/system_framework_volume_steps\"\n        android:defaultValue=\"0\"\n        app:defaultValueText=\"@string/array_default\"\n        app:minValue=\"0\"\n        app:maxValue=\"500\"\n        app:stepValue=\"25\"\n        app:format=\"X %s\"\n        app:displayDividerValue=\"100\"\n        app:showSeekBarValue=\"true\"\n        app:isPreferenceVisible=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/gallery.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory android:title=\"@string/settings\">\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_hdr_enhanced\"\n            android:key=\"prefs_key_gallery_enable_hdr_enhanced\"\n            android:defaultValue=\"false\" />\n    </PreferenceCategory>\n    <PreferenceCategory android:title=\"@string/feature\">\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_pdf\"\n            android:key=\"prefs_key_gallery_enable_pdf\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_ocr\"\n            android:key=\"prefs_key_gallery_enable_ocr\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_ocr_form\"\n            android:key=\"prefs_key_gallery_enable_ocr_form\"\n            android:defaultValue=\"false\" />\n    </PreferenceCategory>\n    <PreferenceCategory android:title=\"@string/recommend\">\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_id_photo\"\n            android:key=\"prefs_key_gallery_enable_id_photo\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_photo_movie\"\n            android:key=\"prefs_key_gallery_enable_photo_movie\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_video_post\"\n            android:key=\"prefs_key_gallery_enable_video_post\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_video_editor\"\n            android:key=\"prefs_key_gallery_enable_video_editor\"\n            android:defaultValue=\"false\" />\n    </PreferenceCategory>\n    <PreferenceCategory android:title=\"@string/editor\">\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_text_yanhua\"\n            android:key=\"prefs_key_gallery_enable_text_yanhua\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_remover_2\"\n            android:key=\"prefs_key_gallery_enable_remover_2\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_magic_matting\"\n            android:key=\"prefs_key_gallery_enable_magic_matting\"\n            android:defaultValue=\"false\" />\n        <SwitchPreference\n            android:title=\"@string/gallery_enable_magic_sky\"\n            android:key=\"prefs_key_gallery_enable_magic_sky\"\n            android:defaultValue=\"false\" />\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/guard_provider.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <SwitchPreference\n        android:title=\"@string/guard_provider_disable_upload_applist\"\n        android:key=\"prefs_key_disable_upload_applist\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <Preference\n            android:key=\"prefs_key_home_gesture\"\n            android:title=\"@string/home_gesture\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeGestureSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_layout\"\n            android:title=\"@string/home_layout\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeLayoutSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_folder\"\n            android:title=\"@string/home_folder\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeFolderSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_drawer\"\n            android:title=\"@string/home_drawer\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeDrawerSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_title\"\n            android:title=\"@string/home_title\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeTitleSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_recent\"\n            android:title=\"@string/home_recent\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeRecentSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_widget\"\n            android:title=\"@string/home_widget\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeWidgetSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_dock\"\n            android:title=\"@string/home_dock\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeDockSettings\" />\n\n        <Preference\n            android:key=\"prefs_key_home_other\"\n            android:title=\"@string/home_other\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeOtherSettings\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory>\n        <DropDownPreference\n            android:defaultValue=\"6\"\n            android:key=\"prefs_key_home_recent_blur_level\"\n            android:title=\"@string/home_recent_blur_level\"\n            app:entries=\"@array/home_recent_blur\"\n            app:entryValues=\"@array/home_recent_blur_value\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_dock.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_home_dock_unlock_hotseat\"\n        android:title=\"@string/home_dock_unlock_hotseat\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_home_dock_icon_title\"\n        android:title=\"@string/home_dock_icon_title\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_home_dock_fold\"\n        android:title=\"@string/home_dock_fold\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_home_dock_disable_recents_icon\"\n        android:title=\"@string/home_dock_disable_recents_icon\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_home_dock_hide_seekpoint\"\n        android:title=\"@string/home_dock_hide_seekpoint\"\n        app:isPreferenceVisible=\"false\" />\n\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_dock_bg_custom_enable\"\n            android:title=\"@string/home_dock_bg_enable\" />\n\n        <Preference\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.CustomBackgroundSettings\"\n            android:key=\"prefs_key_home_dock_bg_custom\"\n            android:title=\"@string/home_dock_bg_custom\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_dock_bg_height\"\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\"\n            android:title=\"@string/home_dock_bg_height\"\n            android:summary=\"@string/home_dock_bg_height_desc\"\n            android:defaultValue=\"150\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"300\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_dock_bg_margin_horizontal\"\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\"\n            android:title=\"@string/home_dock_bg_margin_horizontal\"\n            android:summary=\"@string/home_dock_bg_margin_horizontal_desc\"\n            android:defaultValue=\"25\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"160\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_dock_bg_margin_top\"\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\"\n            android:title=\"@string/top_margin\"\n            android:summary=\"@string/home_dock_bg_margin_top_desc\"\n            android:defaultValue=\"25\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_dock_bg_margin_bottom\"\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\"\n            android:title=\"@string/bottom_margin\"\n            android:summary=\"@string/home_dock_bg_margin_bottom_desc\"\n            android:defaultValue=\"15\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <!--<SeekBarPreferenceEx\n            android:key=\"prefs_key_home_dock_icon_margin_bottom\"\n            android:title=\"@string/home_dock_icon_margin_bottom\"\n            android:summary=\"@string/home_dock_icon_margin_bottom_desc\"\n            android:defaultValue=\"90\"\n            app:maxValue=\"200\"\n            android:format=\"%d dp\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_dock_icon_bottom_margin\"\n            android:title=\"@string/home_dock_icon_bottom_margin\"\n            android:defaultValue=\"35\"\n            app:maxValue=\"100\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_dock_margin_bottom\"\n            android:title=\"@string/home_dock_margin_bottom\"\n            android:defaultValue=\"60\"\n            app:maxValue=\"100\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_dock_bg_custom_enable\" />-->\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_drawer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_drawer_all\"\n            android:summary=\"@string/home_drawer_all_desc\"\n            android:title=\"@string/home_drawer_all\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_drawer_editor\"\n            android:summary=\"@string/home_drawer_editor_desc\"\n            android:title=\"@string/home_drawer_editor\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_drawer_blur\"\n            android:summary=\"@string/home_drawer_blur_desc\"\n            android:title=\"@string/home_drawer_blur\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_drawer_pinyin\"\n            android:summary=\"@string/home_drawer_pinyin_more\"\n            android:title=\"@string/home_drawer_pinyin\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_folder.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/home_small_folder_title\">\n        <SwitchPreference\n            android:key=\"prefs_key_home_small_folder_icon_bg\"\n            android:title=\"@string/home_small_folder_icon_bg\"\n            android:defaultValue=\"false\" />\n\n        <Preference\n            android:key=\"prefs_key_home_small_folder_icon_bg_custom\"\n            android:title=\"@string/home_small_folder_icon_bg_custom\"\n            android:dependency=\"prefs_key_home_small_folder_icon_bg\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.CustomBackgroundSettings\"/>\n\n        <SeekBarPreferenceEx \n            android:key=\"prefs_key_home_small_folder_icon_bg_size\"\n            android:dependency=\"prefs_key_home_small_folder_icon_bg\"\n            android:title=\"@string/home_small_folder_icon_bg_size\"\n            android:defaultValue=\"56\"   \n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"100\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_big_folder_title\">\n        <SwitchPreference\n            android:title=\"@string/home_big_folder_icon_bg_2x1\"\n            android:key=\"prefs_key_home_big_folder_icon_bg_2x1\"\n            android:defaultValue=\"false\" />\n\n        <Preference\n            android:key=\"prefs_key_home_big_folder_icon_bg_2x1_custom\"\n            android:title=\"@string/home_big_folder_icon_bg_2x1_custom\"\n            android:dependency=\"prefs_key_home_big_folder_icon_bg_2x1\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.CustomBackgroundSettings\"/>\n                  \n        <SeekBarPreferenceEx \n            android:key=\"prefs_key_home_big_folder_icon_bg_width_2x1\"\n            android:dependency=\"prefs_key_home_big_folder_icon_bg_2x1\"\n            android:title=\"@string/home_big_folder_icon_bg_width_2x1\"           \n            android:defaultValue=\"145\"   \n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"200\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n        \n        <SeekBarPreferenceEx \n            android:key=\"prefs_key_home_big_folder_icon_bg_height_2x1\"\n            android:dependency=\"prefs_key_home_big_folder_icon_bg_2x1\"\n            android:title=\"@string/home_big_folder_icon_bg_height_2x1\"\n            android:defaultValue=\"62\"   \n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"200\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:title=\"@string/home_big_folder_icon_bg_1x2\"\n            android:key=\"prefs_key_home_big_folder_icon_bg_1x2\"\n            android:defaultValue=\"false\" />\n\n        <Preference\n            android:key=\"prefs_key_home_big_folder_icon_bg_1x2_custom\"\n            android:title=\"@string/home_big_folder_icon_bg_1x2_custom\"\n            android:dependency=\"prefs_key_home_big_folder_icon_bg_1x2\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.CustomBackgroundSettings\"/>\n            \n        <SeekBarPreferenceEx \n            android:key=\"prefs_key_home_big_folder_icon_bg_width_1x2\"\n            android:dependency=\"prefs_key_home_big_folder_icon_bg_1x2\"\n            android:title=\"@string/home_big_folder_icon_bg_width_1x2\"\n            android:defaultValue=\"62\"   \n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"200\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n            \n        <SeekBarPreferenceEx \n            android:key=\"prefs_key_home_big_folder_icon_bg_height_1x2\"\n            android:dependency=\"prefs_key_home_big_folder_icon_bg_1x2\"\n            android:title=\"@string/home_big_folder_icon_bg_height_1x2\"           \n            android:defaultValue=\"145\"   \n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"200\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:title=\"@string/home_big_folder_icon_bg\"\n            android:key=\"prefs_key_home_big_folder_icon_bg\"\n            android:defaultValue=\"false\" />\n\n        <Preference\n            android:key=\"prefs_key_home_big_folder_icon_bg_custom\"\n            android:title=\"@string/home_big_folder_icon_bg_custom\"\n            android:dependency=\"prefs_key_home_big_folder_icon_bg\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.CustomBackgroundSettings\"/>\n\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_home_big_folder_icon_bg\"\n            android:key=\"prefs_key_home_big_folder_icon_bg_width\"\n            android:title=\"@string/home_big_folder_icon_bg_width\"            \n            android:defaultValue=\"145\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"200\"\n            app:stepValue=\"1\"     \n            app:format=\"%d dp\" \n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_home_big_folder_icon_bg\"\n            android:key=\"prefs_key_home_big_folder_icon_bg_height\"\n            android:title=\"@string/home_big_folder_icon_bg_height\"           \n            android:defaultValue=\"145\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"200\"\n            app:format=\"%d dp\"\n            app:stepValue=\"1\" \n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:title=\"@string/home_big_folder_item_max_count\"\n            android:key=\"prefs_key_home_big_folder_item_max_count\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory>\n        <DropDownPreference\n            android:key=\"prefs_key_home_folder_shade\"\n            android:title=\"@string/home_folder_shade_title\"\n            android:summary=\"@string/home_folder_shade_summary\"\n            app:entries=\"@array/folder_shade\"\n            app:entryValues=\"@array/folder_shade_value\"\n            android:defaultValue=\"0\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_folder_shade_level\"\n            android:title=\"@string/home_folder_shade_level_title\"\n            android:defaultValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"100\"\n            app:minValue=\"0\"\n            app:format=\"%d %%\"\n            app:stepValue=\"1\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_folder_animation\"\n            android:title=\"@string/home_folder_anim_title\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx          \n            android:key=\"prefs_key_home_folder_anim_1\"\n            android:title=\"@string/home_folder_anim_1\"        \n            android:dependency=\"prefs_key_home_folder_animation\"\n            android:defaultValue=\"110\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:minValue=\"50\"\n            app:stepValue=\"1\"\n            app:format=\"%d / 100 f\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx            \n            android:key=\"prefs_key_home_folder_anim_2\"\n            android:title=\"@string/home_folder_anim_2\"          \n            android:dependency=\"prefs_key_home_folder_animation\"\n            android:defaultValue=\"30\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"60\"\n            app:minValue=\"10\"\n            app:stepValue=\"1\"\n            app:format=\"%d / 30 f\" \n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_folder_anim_3\"\n            android:title=\"@string/home_folder_anim_3\"         \n            android:dependency=\"prefs_key_home_folder_animation\"              \n            android:defaultValue=\"101\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:minValue=\"50\"\n            app:stepValue=\"1\"\n            app:format=\"%d / 100 f\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx            \n            android:key=\"prefs_key_home_folder_anim_4\"\n            android:title=\"@string/home_folder_anim_4\"\n            android:dependency=\"prefs_key_home_folder_animation\"        \n            android:defaultValue=\"24\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"60\"\n            app:minValue=\"10\"\n            app:format=\"%d / 30 f\"\n            app:stepValue=\"1\" \n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_folder_auto_close\"\n            android:title=\"@string/home_auto_close_folder_title\"\n            android:summary=\"@string/home_auto_close_folder_summary\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_folder_space\"\n            android:title=\"@string/home_folder_space_title\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_folder_blur\"\n            android:title=\"@string/home_folder_blur_title\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx \n            android:key=\"prefs_key_home_folder_columns\"\n            android:title=\"@string/home_folder_cols_title\"\n            android:defaultValue=\"3\"   \n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"6\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:format=\"@string/home_folder_cols_format\"\n            app:showSeekBarValue=\"true\" />\n            \n        <SeekBarPreferenceEx \n            android:key=\"prefs_key_home_folder_vertical_padding\"\n            android:title=\"@string/home_folder_vertical_padding_title\"\n            android:defaultValue=\"0\"   \n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"100\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_folder_width\"\n            android:title=\"@string/home_folder_width_title\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_gesture.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/home_navigation_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_navigation_quick_back\"\n            android:summary=\"@string/home_navigation_quick_back_more\"\n            android:title=\"@string/home_navigation_quick_back\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"60\"\n            android:key=\"prefs_key_home_navigation_back_area_height\"\n            android:title=\"@string/home_navigation_back_area_height\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d %%\"\n            app:maxValue=\"100\"\n            app:minValue=\"10\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"5\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:key=\"prefs_key_home_navigation_back_area_width\"\n            android:title=\"@string/home_navigation_back_area_width\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d %%\"\n            app:maxValue=\"400\"\n            app:minValue=\"100\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"5\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_gesture_title2\">\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_double_tap\"\n            android:summary=\"@string/home_gesture_double_tap_desc\"\n            android:title=\"@string/home_gesture_double_tap\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_shake\"\n            android:summary=\"@string/home_gesture_shake_desc\"\n            android:title=\"@string/home_gesture_shake\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_left_swipe\"\n            android:summary=\"@string/home_gesture_left_swipe_desc\"\n            android:title=\"@string/home_gesture_left_swipe\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_right_swipe\"\n            android:summary=\"@string/home_gesture_right_swipe_desc\"\n            android:title=\"@string/home_gesture_right_swipe\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_up_swipe\"\n            android:summary=\"@string/home_gesture_up_swipe_desc\"\n            android:title=\"@string/home_gesture_up_swipe\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_down_swipe\"\n            android:summary=\"@string/home_gesture_down_swipe_desc\"\n            android:title=\"@string/home_gesture_down_swipe\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_up_swipe2\"\n            android:summary=\"@string/home_gesture_up_swipe2_desc\"\n            android:title=\"@string/home_gesture_up_swipe2\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"\n            android:key=\"prefs_key_home_gesture_down_swipe2\"\n            android:summary=\"@string/home_gesture_down_swipe2_desc\"\n            android:title=\"@string/home_gesture_down_swipe2\" />\n\n        <!--Preference\n            android:key=\"prefs_key_home_gesture_swipe_and_stop\"\n            android:title=\"@string/home_gesture_swipe_and_stop\"\n            android:summary=\"@string/home_gesture_swipe_and_stop_desc\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.MultiActionSettings\"/-->\n\n        <!--<Preference\n            android:key=\"prefs_key_home_gesture_pinch\"\n            android:title=\"@string/home_gesture_pinch\" />\n\n        <Preference\n            android:key=\"prefs_key_home_gesture_spread\"\n            android:title=\"@string/home_gesture_spread\" />-->\n\n    </PreferenceCategory>\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory>\n        <SwitchPreference\n            android:key=\"prefs_key_home_other_show_clock\"\n            android:title=\"@string/home_layout_show_clock\"\n            android:summary=\"@string/home_layout_show_clock_desc\"\n            android:defaultValue=\"false\" />\n\n        <DropDownPreference\n            android:key=\"prefs_key_home_other_seek_points\"\n            android:title=\"@string/home_layout_seek_points\"\n            app:entries=\"@array/seek_points\"\n            app:entryValues=\"@array/seek_points_value\"\n            android:defaultValue=\"0\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_layout_home_title\">\n        <SwitchPreference\n            android:title=\"@string/home_layout_unlock_grids\"\n            android:summary=\"@string/home_layout_unlock_grids_desc\"\n            android:key=\"prefs_key_home_layout_unlock_grids\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/home_layout_unlock_grids_no_words\"\n            android:summary=\"@string/home_layout_unlock_grids_no_words_desc\"\n            android:key=\"prefs_key_home_layout_unlock_grids_no_word\"\n            android:defaultValue=\"false\"\n            app:isPreferenceVisible=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/top_margin\"\n            android:summary=\"@string/home_layout_workspace_padding_top_desc\"\n            android:key=\"prefs_key_home_layout_workspace_padding_top_enable\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:key=\"prefs_key_home_layout_workspace_padding_top\"\n            android:defaultValue=\"30\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:format=\"%d dp\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_layout_workspace_padding_top_enable\" />\n\n        <SwitchPreference\n            android:title=\"@string/bottom_margin\"\n            android:summary=\"@string/home_layout_workspace_padding_bottom_desc\"\n            android:key=\"prefs_key_home_layout_workspace_padding_bottom_enable\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:key=\"prefs_key_home_layout_workspace_padding_bottom\"\n            android:defaultValue=\"120\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"240\"\n            app:format=\"%d dp\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_layout_workspace_padding_bottom_enable\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_layout_hotseats_title\">\n        <SwitchPreference\n            android:title=\"@string/home_layout_hotseats_height\"\n            android:key=\"prefs_key_home_layout_hotseats_height_enable\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:key=\"prefs_key_home_layout_hotseats_height\"\n            android:defaultValue=\"80\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\"\n            android:dependency=\"prefs_key_home_layout_hotseats_height_enable\" />\n\n        <SwitchPreference\n            android:title=\"@string/top_margin\"\n            android:summary=\"@string/home_layout_hotseats_margin_top_desc\"\n            android:key=\"prefs_key_home_layout_hotseats_margin_top_enable\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:key=\"prefs_key_home_layout_hotseats_margin_top\"\n            android:defaultValue=\"20\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:format=\"%d dp\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_layout_hotseats_margin_top_enable\" />\n\n        <SwitchPreference\n            android:title=\"@string/bottom_margin\"\n            android:summary=\"@string/home_layout_hotseats_margin_bottom_desc\"\n            android:key=\"prefs_key_home_layout_hotseats_margin_bottom_enable\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:key=\"prefs_key_home_layout_hotseats_margin_bottom\"\n            android:defaultValue=\"70\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:format=\"%d dp\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_layout_hotseats_margin_bottom_enable\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_layout_searchbar_title\">\n        <SwitchPreference\n            android:title=\"@string/bottom_margin\"\n            android:summary=\"@string/home_layout_searchbar_margin_bottom_desc\"\n            android:key=\"prefs_key_home_layout_searchbar_margin_bottom_enable\"\n            android:defaultValue=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:key=\"prefs_key_home_layout_searchbar_margin_bottom\"\n            android:defaultValue=\"30\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:format=\"%d dp\"\n            app:stepValue=\"1\"\n            android:dependency=\"prefs_key_home_layout_searchbar_margin_bottom_enable\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_multi_action.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory />\n\n    <moralnorm.preference.RadioButtonPreferenceCategory>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:persistent=\"false\"\n            android:key=\"prefs_key_no_action\"\n            android:title=\"@string/array_global_actions_none\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_open_notification_center\"\n            android:title=\"@string/array_global_actions_notif\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_screen_lock\"\n            android:title=\"@string/array_global_actions_lock\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_screen_sleep\"\n            android:title=\"@string/array_global_actions_sleep\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_screen_capture\"\n            android:title=\"@string/array_global_actions_screenshot\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_clear_memory\"\n            android:title=\"@string/array_global_actions_clear_memory\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_invert_colors\"\n            android:title=\"@string/array_global_actions_invert_colors\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_screen_recents\"\n            android:title=\"@string/array_global_actions_recents\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_volume_dialog\"\n            android:title=\"@string/array_global_actions_volume\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioButtonPreference\n            android:key=\"prefs_key_open_powermenu\"\n            android:title=\"@string/array_global_actions_powermenu\"\n            android:layout=\"@layout/preference_radiobutton_two_state\" />\n\n        <moralnorm.preference.RadioSetPreferenceCategory>\n\n            <moralnorm.preference.RadioButtonPreference\n                android:key=\"prefs_key_open_app\"\n                android:title=\"@string/array_global_actions_launch\" />\n\n            <Preference\n                android:key=\"prefs_key_open_app_selector\"\n                android:title=\"@string/array_global_actions_launch_choose\"\n                android:dependency=\"prefs_key_open_app\" />\n\n        </moralnorm.preference.RadioSetPreferenceCategory>\n\n        <!--<moralnorm.preference.RadioSetPreferenceCategory>\n\n            <moralnorm.preference.RadioButtonPreference\n                android:key=\"open_activity\"\n                android:title=\"@string/array_global_actions_activity\" />\n\n            <Preference\n                android:title=\"@string/app_name\"\n                android:dependency=\"open_activity\"/>\n\n        </moralnorm.preference.RadioSetPreferenceCategory>\n\n        <moralnorm.preference.RadioSetPreferenceCategory>\n\n            <moralnorm.preference.RadioButtonPreference\n                android:key=\"open_shortcut\"\n                android:title=\"@string/array_global_actions_shortcut\" />\n\n            <Preference\n                android:title=\"@string/app_name\"\n                android:dependency=\"open_shortcut\"/>\n\n        </moralnorm.preference.RadioSetPreferenceCategory>\n\n\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_eqs\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_menu\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_recents\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_volume\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_volume_up\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_volume_down\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_toggle\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_back\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>\n\n        <moralnorm.preference.RadioButtonPreference\n            android:title=\"@string/array_global_actions_back\"\n            android:layout=\"@layout/preference_radiobutton_two_state\"/>-->\n\n\n    </moralnorm.preference.RadioButtonPreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_other.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/home_other_shortcut_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_freeform_shortcut_menu\"\n            android:summary=\"@string/home_other_freeform_shortcut_menu_desc\"\n            android:title=\"@string/home_other_freeform_shortcut_menu\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_tasks_shortcut_menu\"\n            android:summary=\"@string/home_other_tasks_shortcut_menu_desc\"\n            android:title=\"@string/home_other_tasks_shortcut_menu\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_shortcut_background_blur\"\n            android:title=\"@string/home_other_shortcut_background_blur\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"200\"\n            android:dependency=\"prefs_key_home_other_shortcut_background_blur\"\n            android:key=\"prefs_key_home_other_shortcut_background_blur_custom\"\n            android:title=\"@string/home_other_shortcut_background_blur_custom\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s\"\n            app:maxValue=\"255\"\n            app:minValue=\"80\"\n            app:stepValue=\"1\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_shortcut_remove_restrictions\"\n            android:title=\"@string/home_other_shortcut_remove_restrictions\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:key=\"prefs_key_home_other_blur_radius\"\n            android:title=\"@string/home_other_blur_radius\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s / 100 f\"\n            app:maxValue=\"500\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\" />\n\n        <!--<SwitchPreference\n            android:key=\"prefs_key_home_other_fold_dock\"\n            android:title=\"Fold Dock\"\n            android:defaultValue=\"false\"/>-->\n\n    </PreferenceCategory>\n\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_mi_pad_enable_more_setting\"\n            android:summary=\"@string/home_other_mi_pad_enable_more_setting_desc\"\n            android:title=\"@string/home_other_mi_pad_enable_more_setting_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_toast_slide_again\"\n            android:title=\"@string/home_other_toast_slide_again\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_personal_assistant_overlap_mode\"\n            android:title=\"@string/personal_assistant_overlap_mode\" />\n\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_user_present_animation\"\n            android:title=\"@string/home_other_user_present_animation\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_infinite_scroll\"\n            android:summary=\"@string/home_other_infinite_scroll_desc\"\n            android:title=\"@string/home_other_infinite_scroll\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_always_blur_launcher_wallpaper\"\n            android:title=\"@string/home_other_always_blur_launcher_wallpaper\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_portrait_reverse\"\n            android:title=\"@string/home_other_portrait_reverse\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_disable_hide_google\"\n            android:title=\"@string/home_other_disable_hide_google\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_home_other_home_mode\"\n            android:title=\"@string/home_other_home_mode\"\n            app:entries=\"@array/home_mode\"\n            app:entryValues=\"@array/home_mode_value\" />\n\n        <Preference android:title=\"@string/home_other_app_icon_hide\">\n            <intent\n                android:targetClass=\"com.miui.home.settings.AllHideAppActivity\"\n                android:targetPackage=\"com.miui.home\" />\n        </Preference>\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_fix_android_r_s\"\n            android:title=\"@string/home_other_fix_android_r_s\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_high_models\"\n            android:title=\"@string/home_other_high_models\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_recent.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_disable_wallpaper_dimming\"\n            android:title=\"@string/home_recent_disable_wallpaper_dimming\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_show_memory_info\"\n            android:title=\"@string/home_recent_show_memory_info\"\n            android:summary=\"@string/home_recent_show_memory_info_sum\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_show_real_memory\"\n            android:title=\"@string/home_recent_show_real_memory\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_modify_animation\"\n            android:title=\"@string/home_recent_modify_animation\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_hide_status_bar_in_task_view\"\n            android:title=\"@string/home_recent_hide_status_bar_in_task_view\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_hide_freeform\"\n            android:title=\"@string/home_recent_hide_freeform\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_hide_clean_up\"\n            android:disableDependentsState=\"true\"\n            android:title=\"@string/home_recent_hide_clean_up\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_always_show_clean_up\"\n            android:dependency=\"prefs_key_home_recent_hide_clean_up\"\n            android:title=\"@string/home_recent_always_show_clean_up\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_home_recent_remove_icon\"\n            android:title=\"@string/home_recent_remove_icon\"\n            android:defaultValue=\"false\" />\n\n        <EditTextPreference\n            android:key=\"prefs_key_home_recent_text\"\n            android:title=\"@string/home_recent_text\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_task_view_corners\"\n            android:title=\"@string/home_recent_task_view_card_rounded_corners\"\n            android:defaultValue=\"20\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"60\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_task_view_header_height\"\n            android:title=\"@string/home_recent_app_name_distance_task_view_card\"\n            android:defaultValue=\"40\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_recent_animation_speed\"\n            android:title=\"@string/home_recent_animation_speed\"\n            android:defaultValue=\"100\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"500\"\n            app:minValue=\"10\"\n            app:stepValue=\"1\"\n            app:format=\"%d / 100 f\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_task_view_horizontal1\"\n            android:title=\"@string/home_recent_horizontal_task_view_card_size1\"\n            android:defaultValue=\"100\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:minValue=\"50\"\n            app:stepValue=\"1\"\n            app:format=\"%d / 100 f\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_task_view_horizontal2\"\n            android:title=\"@string/home_recent_horizontal_task_view_card_size2\"\n            android:defaultValue=\"100\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:minValue=\"50\"\n            app:format=\"%d / 100 f\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:key=\"prefs_key_home_recent_vertical_task_view_card_size\"\n            android:title=\"@string/home_recent_vertical_task_view_card_size\"\n            app:format=\"%d / 100 f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"150\"\n            app:minValue=\"50\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_recent_text_size\"\n            android:title=\"@string/home_recent_text_size\"\n            android:defaultValue=\"14\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"30\"\n            app:minValue=\"0\"\n            app:format=\"%d f\"\n            app:stepValue=\"1\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:title=\"@string/home_recent_text_color\"\n            android:key=\"prefs_key_home_recent_text_color\"\n            android:defaultValue=\"-1\"\n            app:showAlphaSlider=\"true\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:title=\"@string/home_recent_freeform_background_color\"\n            android:key=\"prefs_key_home_recent_freeform_background_color\"\n            android:defaultValue=\"-1\"\n            app:showAlphaSlider=\"true\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/home_title_icon_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_title_big_icon_corner\"\n            android:title=\"@string/home_title_big_icon_corner\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_perfect_icon\"\n            android:title=\"@string/home_other_perfect_icon\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_title_disable_hide_file\"\n            android:title=\"@string/home_title_disable_hide_file\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_title_disable_hide_theme\"\n            android:title=\"@string/home_title_disable_hide_theme\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_title_download_animation\"\n            android:title=\"@string/home_title_download_animation\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_other_icon_mono_chrome\"\n            android:title=\"@string/home_other_icon_mono_chrome\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_home_other_icon_mono_chrome\"\n            android:key=\"prefs_key_home_other_icon_monet_color\"\n            android:title=\"@string/home_other_icon_monet_color\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_home_other_icon_mono_chrome\"\n            android:key=\"prefs_key_home_other_use_edit_color\"\n            android:title=\"@string/home_other_use_edit_color\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-1\"\n            android:dependency=\"prefs_key_home_other_use_edit_color\"\n            android:key=\"prefs_key_home_other_your_color_qwq\"\n            android:title=\"@string/home_other_your_color\"\n            app:showAlphaSlider=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:key=\"prefs_key_home_title_animation_speed\"\n            android:title=\"@string/home_title_animation_speed\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s / 100 f\"\n            app:maxValue=\"500\"\n            app:minValue=\"10\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"45\"\n            android:key=\"pref_key_home_title_icon_scale\"\n            android:title=\"@string/home_title_icon_scale\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"100\"\n            app:format=\"X %s\"\n            app:isPreferenceVisible=\"false\"\n            app:maxValue=\"200\"\n            app:minValue=\"45\"\n            app:stepValue=\"5\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_title_fix_animation\"\n            android:title=\"@string/home_title_fix_animation\" />\n\n        <Preference\n            android:key=\"prefs_key_home_title_custom_anim_param\"\n            android:title=\"@string/home_title_custom_anim_param\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.HomeTitleAnimSettings\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_bigicon_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_large_icon_enable\"\n            android:title=\"@string/home_large_icon_corner_radius\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"32\"\n            android:dependency=\"prefs_key_home_large_icon_enable\"\n            android:key=\"prefs_key_home_large_icon_corner_radius\"\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d dp\"\n            app:maxValue=\"90\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_title_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_home_title_title_new_install\"\n            android:summary=\"@string/home_title_title_new_install_more\"\n            android:title=\"@string/home_title_title_new_install\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:disableDependentsState=\"true\"\n            android:key=\"prefs_key_home_drawer_font_hidden\"\n            android:summary=\"@string/home_title_drawer_font_hidden_more\"\n            android:title=\"@string/home_title_drawer_font_hidden\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_home_drawer_font_hidden\"\n            android:key=\"prefs_key_home_title_title_marquee\"\n            android:summary=\"@string/home_title_title_marquee_desc\"\n            android:title=\"@string/home_title_title_marquee\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-1\"\n            android:dependency=\"prefs_key_home_drawer_font_hidden\"\n            android:key=\"prefs_key_home_title_title_color\"\n            android:title=\"@string/home_title_title_color\"\n            app:showAlphaSlider=\"false\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"12\"\n            android:dependency=\"prefs_key_home_drawer_font_hidden\"\n            android:key=\"prefs_key_home_title_font_size\"\n            android:title=\"@string/home_title_font_size\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d sp\"\n            app:maxValue=\"20\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_home_title_custom_anim_param_main\"\n        android:title=\"@string/enable\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_1_title\"\n        android:title=\"@string/home_title_custom_anim_param_1_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim1Settings\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_2_title\"\n        android:title=\"@string/home_title_custom_anim_param_2_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim2Settings\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_3_title\"\n        android:title=\"@string/home_title_custom_anim_param_3_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim3Settings\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_4_title\"\n        android:title=\"@string/home_title_custom_anim_param_4_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim4Settings\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_5_title\"\n        android:title=\"@string/home_title_custom_anim_param_5_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim5Settings\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_6_title\"\n        android:title=\"@string/home_title_custom_anim_param_6_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim6Settings\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_7_title\"\n        android:title=\"@string/home_title_custom_anim_param_7_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim7Settings\" />\n\n    <Preference\n        android:key=\"prefs_key_home_title_custom_anim_param_8_title\"\n        android:title=\"@string/home_title_custom_anim_param_8_title\"\n        android:dependency=\"prefs_key_home_title_custom_anim_param_main\"\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.home.anim.HomeTitleAnim8Settings\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_1\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_1\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_1\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_1\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_1\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_1\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_1\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_1\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RADIUS_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RADIUS_1\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RADIUS_1\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_ALPHA_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_ALPHA_1\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_ALPHA_1\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_2\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"960\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_2\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"300\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_2\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_2\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"300\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_2\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"960\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_2\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"410\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_2\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"960\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_2\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"340\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RADIUS_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RADIUS_2\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RADIUS_2\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_ALPHA_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_ALPHA_2\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_ALPHA_2\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"135\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_3.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_3\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"900\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_3\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"270\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_3\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"900\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_3\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"270\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_3\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_3\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"360\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_3\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_3\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"360\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_4.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_4\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"950\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_4\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"315\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_4\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"950\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_4\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"315\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_4\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"950\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_4\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"315\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_4\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"950\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_4\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"270\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RADIUS_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RADIUS_4\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RADIUS_4\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"270\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_ALPHA_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_ALPHA_4\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_ALPHA_4\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"270\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_5.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_5\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_5\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"450\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_5\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_5\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"450\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_5\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"900\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_5\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"450\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_5\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_5\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"370\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RADIUS_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RADIUS_5\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RADIUS_5\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"150\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_ALPHA_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_ALPHA_5\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_ALPHA_5\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"420\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_6.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_6\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"950\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_6\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"378\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_6\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"950\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_6\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"378\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_6\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"900\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_6\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"405\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_6\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"950\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_6\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"333\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RADIUS_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RADIUS_6\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RADIUS_6\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"180\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_ALPHA_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_ALPHA_6\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_ALPHA_6\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"378\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_7.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_7\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_7\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"315\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_7\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_7\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"315\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_7\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_7\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"315\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_7\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_7\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"315\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_title_anim_8.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERX_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERX_8\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERX_8\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"180\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_CENTERY_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_CENTERY_8\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_CENTERY_8\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"180\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_WIDTH_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_WIDTH_8\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_WIDTH_8\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"180\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_title_custom_anim_param_RECT_RATIO_title\">\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_damping_RECT_RATIO_8\"\n            android:title=\"@string/home_title_custom_anim_param_damping_title\"\n            android:defaultValue=\"990\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_home_title_custom_anim_param_stiffness_RECT_RATIO_8\"\n            android:title=\"@string/home_title_custom_anim_param_stiffness_title\"\n            android:defaultValue=\"180\"\n            app:format=\"%s f\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"999\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"1000\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/home_widget.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <SwitchPreference\n        android:key=\"prefs_key_home_widget_all_widget_animation\"\n        android:title=\"@string/home_widget_all_widget_animation\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:key=\"prefs_key_home_widget_show_miui_widget\"\n        android:title=\"@string/home_widget_show_miui_widget\"\n        android:summary=\"@string/home_widget_show_miui_widget_desc\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:key=\"prefs_key_home_widget_hide_title\"\n        android:title=\"@string/home_widget_hide_title\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:key=\"prefs_key_home_widget_resizable\"\n        android:title=\"@string/home_widget_resizable\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:key=\"prefs_key_home_widget_allow_moved_to_minus_one_screen\"\n        android:title=\"@string/home_widget_allow_moved_to_minus_one_screen\"\n        android:defaultValue=\"false\" />\n\n    <SeekBarPreferenceEx\n        android:key=\"prefs_key_home_widget_corner_radius\"\n        android:title=\"@string/home_widget_corner_radius\"\n        android:defaultValue=\"0\"\n        app:maxValue=\"30\"        \n        app:defaultValueText=\"@string/array_default\"\n        app:format=\"%d dp\"\n        app:stepValue=\"1\" />\n        \n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/incallui.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/incallui_hide_crbt\"\n            android:key=\"prefs_key_incallui_hide_crbt\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/incallui_answer_in_head_up\"\n            android:key=\"prefs_key_incallui_answer_in_head_up\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/joyose.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory android:title=\"@string/joyose_cloud_control_title\">\n        <SwitchPreference\n            android:title=\"@string/joyose_disable_cloud_control\"\n            android:key=\"prefs_key_various_disable_cloud_control\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/joyose_game_title\">\n        <SwitchPreference\n            android:title=\"@string/joyose_enable_gpu_tuner\"\n            android:summary=\"@string/joyose_enable_gpu_tuner_desc\"\n            android:key=\"prefs_key_joyose_enable_gpu_tuner\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/lbe_security.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_lbe_clipboard_tip_toast\"\n            android:title=\"@string/lbe_clipboard_tip_toast\"\n            android:summary=\"@string/lbe_clipboard_tip_toast_desc\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_lbe_clipboard_tip_toast\"\n            android:key=\"prefs_key_lbe_disable_clipboard_tip\"\n            android:title=\"@string/lbe_disable_clipboard_tip\" />\n\n    </PreferenceCategory>\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/market.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n\n        <DropDownPreference\n            android:key=\"prefs_key_market_device_modify_new\"\n            android:title=\"@string/market_device_modify\"\n            android:defaultValue=\"0\"\n            app:entries=\"@array/market_device_modify_list\"\n            app:entryValues=\"@array/market_device_modify_value\" />\n\n        <SwitchPreference\n            android:title=\"@string/market_disable_new_icon\"\n            android:summary=\"@string/market_disable_new_icon_desc\"\n            android:key=\"prefs_key_market_disable_new_icon\"\n            android:defaultValue=\"false\"\n            app:isPreferenceVisible=\"false\" />\n\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/mediaeditor.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/mediaeditor_unlock_minimum_crop_limit\"\n            android:key=\"prefs_key_mediaeditor_unlock_minimum_crop_limit\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/mediaeditor_filter_manager\"\n            android:key=\"prefs_key_mediaeditor_filter_manager\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/mi_settings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <SwitchPreference\n        android:title=\"@string/mi_settings_show_fps\"\n        android:summary=\"@string/mi_settings_show_fps_desc\"\n        android:key=\"prefs_key_mi_settings_show_fps\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/milink.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <SwitchPreference\n        android:title=\"@string/milink_unlock_mishare\"\n        android:key=\"prefs_key_milink_unlock_mishare\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/mirror.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/mirror_unlock_miui_plus\"\n            android:key=\"prefs_key_mirror_unlock_miui_plus\"\n            android:defaultValue=\"false\" />\n\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/mishare.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <SwitchPreference\n        android:title=\"@string/mishare_disable_mishare_auto_off\"\n        android:key=\"prefs_key_disable_mishare_auto_off\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:title=\"@string/mishare_unlock_turbo_mode\"\n        android:key=\"prefs_key_unlock_turbo_mode\"\n        android:defaultValue=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/miwallpaper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_miwallpaper_unlock_super_wallpaper\"\n            android:title=\"@string/miwallpaper_unlock_super_wallpaper\"\n            android:summary=\"@string/disable_detailed_log_desc\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/mms.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <SwitchPreference\n        android:title=\"@string/mms_disable_ad\"\n        android:summary=\"@string/mms_disable_ad_desc\"\n        android:key=\"prefs_key_mms_disable_ad\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/mtb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <SwitchPreference\n        android:title=\"@string/mtb_auth\"\n        android:summary=\"@string/mtb_auth_desc\"\n        android:key=\"prefs_key_mtb_auth\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/music.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/music_disable_ad\"\n            android:key=\"prefs_key_music_disable_ad\"\n            android:defaultValue=\"false\" />\n\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/networkboost.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_disable_link_turbo_toast\"\n            android:title=\"@string/various_disable_link_turbo_toast\" />\n\n    </PreferenceCategory>\n\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/nfc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/nfc_disable_sound\"\n            android:key=\"prefs_key_nfc_disable_sound\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/nfc_allow_information_screen\"\n            android:key=\"prefs_key_nfc_allow_information_screen\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/package_installer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_modify\"\n            android:title=\"@string/miui_package_installer_modify\"\n            android:defaultValue=\"false\"\n            app:isPreferenceVisible=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_safe_mode\"\n            android:title=\"@string/miui_package_installer_safe_mode\"\n            android:summary=\"@string/miui_package_installer_safe_mode_desc\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_disable_ad\"\n            android:title=\"@string/miui_package_installer_disable_ad\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_install_risk\"\n            android:title=\"@string/miui_package_installer_install_risk\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_safe_model_tip\"\n            android:title=\"@string/miui_package_installer_safe_model_tip\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_count_checking\"\n            android:title=\"@string/miui_package_installer_count_checking\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_apk_info\"\n            android:title=\"@string/miui_package_installer_apk_info\"\n            android:summary=\"@string/miui_package_installer_apk_info_desc\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_miui_package_installer_update_system_app\"\n            android:title=\"@string/miui_package_installer_update_system_app\"\n            android:summary=\"@string/miui_package_installer_update_system_app_desc\"\n            android:defaultValue=\"false\" />\n\n        <EditTextPreference\n            android:title=\"@string/miui_package_installer_install_source\"\n            android:key=\"prefs_key_miui_package_installer_install_source\"\n            android:defaultValue=\"com.android.fileexplorer\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/personal_assistant.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:key=\"prefs_key_personal_assistant_widget_crack\"\n            android:title=\"@string/personal_assistant_widget_crack\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_personal_assistant_fold_widget_enable\"\n            android:title=\"@string/personal_assistant_fold_widget_enable\"\n            android:summary=\"@string/personal_assistant_fold_widget_enable_desc\" />\n\n        <SwitchPreference\n            android:title=\"@string/personal_assistant_blur_model\"\n            android:key=\"prefs_key_pa_enable\"\n            android:defaultValue=\"false\" />\n\n        <DropDownPreference\n            android:key=\"prefs_key_personal_assistant_value\"\n            android:title=\"@string/personal_assistant_blur_value\"\n            android:defaultValue=\"1\"\n            android:dependency=\"prefs_key_pa_enable\"\n            app:entries=\"@array/personal_assistant_blur\"\n            app:entryValues=\"@array/personal_assistant_blur_value\" />\n\n        <SeekBarPreferenceEx\n            android:title=\"@string/personal_assistant_blurradius\"\n            android:key=\"prefs_key_personal_assistant_blurradius\"\n            android:defaultValue=\"80\"\n            app:minValue=\"30\"\n            app:maxValue=\"99\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d %%\"\n            app:stepValue=\"1\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:title=\"@string/personal_assistant_color\"\n            android:key=\"prefs_key_personal_assistant_color\"\n            android:defaultValue=\"-1\"\n            app:showAlphaSlider=\"true\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/phone.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <SwitchPreference\n        android:title=\"@string/phone_smart_dual_sim\"\n        android:key=\"prefs_key_phone_smart_dual_sim\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:title=\"@string/phone_vice_slot_volte\"\n        android:summary=\"@string/phone_vice_slot_volte_desc\"\n        android:key=\"prefs_key_phone_vice_slot_volte\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/powerkeeper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:title=\"@string/powerkeeper_custom_refresh_rate\"\n            android:key=\"prefs_key_various_custom_refresh_rate\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/powerkeeper_lock_max_fps\"\n            android:key=\"prefs_key_powerkeeper_lock_max_fps\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/powerkeeper_do_not_kill_apps\"\n            android:summary=\"@string/powerkeeper_do_not_kill_apps_desc\"\n            android:key=\"prefs_key_powerkeeper_do_not_kill_apps\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/powerkeeper_prevent_recovery_of_battery_optimization_whitelist\"\n            android:key=\"prefs_key_powerkeeper_prevent_recovery_of_battery_optimization_whitelist\"\n            android:defaultValue=\"false\" />\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/prefs_about.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <SwitchPreference\n        android:key=\"prefs_key_various_enable_super_function\"\n        android:layout=\"@layout/activity_about\"\n        android:summary=\"@string/xposed_description\" />\n\n    <PreferenceCategory android:title=\"@string/about_developer_title\">\n        <Preference\n            android:icon=\"@drawable/ic_sevtinge\"\n            android:layout=\"@layout/preference_round_layout\"\n            android:summary=\"Hook、App Icon\"\n            android:title=\"绀漓 | Sevtinge\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/sevtinge\" />\n        </Preference>\n\n        <Preference\n            android:icon=\"@drawable/ic_moralnorm\"\n            android:layout=\"@layout/preference_round_layout\"\n            android:summary=\"UI Design、Hook\"\n            android:title=\"MoralNorm\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/MoralNorm\" />\n        </Preference>\n\n        <Preference\n            android:icon=\"@drawable/ic_lingqiqi\"\n            android:layout=\"@layout/preference_round_layout\"\n            android:summary=\"Hook\"\n            android:title=\"Ling Qiqi\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/mu7220\" />\n        </Preference>\n\n        <Preference\n            android:icon=\"@drawable/ic_voyager\"\n            android:layout=\"@layout/preference_round_layout\"\n            android:summary=\"Hook\"\n            android:title=\"Voyager\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/hosizoraru\" />\n        </Preference>\n\n        <Preference\n            android:icon=\"@drawable/ic_yifeplayte\"\n            android:layout=\"@layout/preference_round_layout\"\n            android:summary=\"Hook\"\n            android:title=\"Yife Playte\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/YifePlayte\" />\n        </Preference>\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.about.AboutContributerFragment\"\n            android:key=\"prefs_key_about_contributer\"\n            android:title=\"@string/about_contributer\" />\n    </PreferenceCategory>\n    <PreferenceCategory android:title=\"@string/about_translator_title\">\n        <Preference\n            android:title=\"@string/language\"\n            android:summary=\"@string/translator\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"@string/translator_url\" />\n        </Preference>\n    </PreferenceCategory>\n    <PreferenceCategory android:title=\"@string/about_chat_title\">\n        <Preference\n            android:key=\"prefs_key_about_join_qq_group\"\n            android:title=\"@string/about_qq_group\" />\n\n        <Preference android:title=\"@string/about_qq_channel\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://qun.qq.com/qqweb/qunpro/share?_wv=3&amp;_wwv=128&amp;appChannel=share&amp;inviteCode=1XAId3dB6BS&amp;businessType=9&amp;from=246610&amp;biz=ka\" />\n        </Preference>\n\n        <Preference android:title=\"@string/about_tg_group\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://t.me/sevtinge_nest\" />\n        </Preference>\n\n        <Preference android:title=\"@string/about_tg_channel\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://t.me/sevtinge_mod\" />\n        </Preference>\n    </PreferenceCategory>\n    <PreferenceCategory android:title=\"@string/about_other_title\">\n        <Preference\n            android:summary=\"@string/about_github_desc\"\n            android:title=\"@string/about_github\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/sevtinge/Cemiuiler\" />\n        </Preference>\n\n        <Preference\n            android:summary=\"@string/about_crwd_desc\"\n            android:title=\"@string/about_crwd\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://crwd.in/cemiuiler\" />\n        </Preference>\n\n        <Preference android:title=\"@string/about_offical\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://cemiuiler.sevtinge.cc\" />\n        </Preference>\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.about.AboutUseFragment\"\n            android:key=\"prefs_key_about_use\"\n            android:title=\"@string/about_use\" />\n\n        <Preference\n            android:summary=\"@string/about_donation_desc\"\n            android:title=\"@string/about_donation\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://www.sevtinge.cc/t/donation.html\" />\n        </Preference>\n\n        <Preference\n            android:title=\"@string/about_protocol\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://cemiuiler.sevtinge.cc/Protocol\" />\n        </Preference>\n\n        <Preference\n            android:title=\"@string/about_privacy\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://cemiuiler.sevtinge.cc/Privacy\" />\n        </Preference>\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/prefs_about_contributor.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n        <Preference android:summary=\"@string/about_contributer_desc\" />\n        <Preference android:title=\"YuKongA\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/YuKongA\" />\n        </Preference>\n        <Preference android:title=\"黑弩\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/heinu123\" />\n        </Preference>\n        <Preference android:title=\"Qe_xr\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"http://www.coolapk.com/u/2919503\" />\n        </Preference>\n        <Preference android:title=\"欧瓯烨\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"http://www.coolapk.com/u/12223114\" />\n        </Preference>\n        <Preference android:title=\"wushidi\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/wushidia\" />\n        </Preference>\n        <Preference android:title=\"GSWXXN\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/GSWXXN\" />\n        </Preference>\n        <Preference android:title=\"Wansn\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Wansn-w\" />\n        </Preference>\n        <Preference android:title=\"Next Alone\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/NextAlone\" />\n        </Preference>\n        <Preference android:title=\"nakixii\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/nakixii\" />\n        </Preference>\n        <Preference android:title=\"v5u87\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"http://www.coolapk.com/u/5816741\" />\n        </Preference>\n        <Preference android:title=\"hamjin\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/hamjin\" />\n        </Preference>\n        <Preference android:title=\"Naomi\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Henvy-Mango\" />\n        </Preference>\n        <Preference android:title=\"Weverses\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Weverses\" />\n        </Preference>\n        <Preference android:title=\"柚稚的孩纸\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/zjw2017\" />\n        </Preference>\n        <Preference android:title=\"相见即是缘\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Meetingfate\" />\n        </Preference>\n        <Preference android:title=\"焕晨HChen\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/HChenX\" />\n        </Preference>\n        <Preference android:title=\"雨中走过\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/pomelohan\" />\n        </Preference>\n        <Preference android:title=\"淡い夏\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/lightsummer233\" />\n        </Preference>\n        <Preference android:title=\"雪中明月\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/lswlc33\" />\n        </Preference>\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/prefs_about_use.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n        <Preference android:summary=\"@string/about_use_desc\" />\n        <Preference\n            android:title=\"Accompanist\"\n            android:summary=\"Android Open Source Project, Google Inc. | Apache-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://google.github.io/accompanist\" />\n        </Preference>\n        <Preference\n            android:title=\"Android\"\n            android:summary=\"Android Open Source Project, Google Inc. | Apache-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://source.android.google.cn/license\" />\n        </Preference>\n        <Preference\n            android:title=\"AndroidHiddenApiBypass\"\n            android:summary=\"LSPosed | Apache-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/LSPosed/AndroidHiddenApiBypass\" />\n        </Preference>\n        <Preference\n            android:title=\"AndroidX\"\n            android:summary=\"Android Open Source Project, Google Inc., androidx | Apache-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/androidx/androidx\" />\n        </Preference>\n        <Preference\n            android:title=\"AntiAntiDefraud\"\n            android:summary=\"MinaMichita | No License\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/MinaMichita/AntiAntiDefraud\" />\n        </Preference>\n        <Preference\n            android:title=\"Auto NFC\"\n            android:summary=\"GSWXXN | AGPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/GSWXXN/AutoNFC\" />\n        </Preference>\n        <Preference\n            android:title=\"BypassSignCheck\"\n            android:summary=\"Weverses | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Weverses/BypassSignCheck\" />\n        </Preference>\n        <Preference\n            android:title=\"CorePatch\"\n            android:summary=\"LSPosed | GPL-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/LSPosed/CorePatch\" />\n        </Preference>\n        <Preference\n            android:title=\"CustoMIUIzer\"\n            android:summary=\"MonwF | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/MonwF/customiuizer\" />\n        </Preference>\n        <Preference\n            android:title=\"CustoMIUIzerMod\"\n            android:summary=\"liyafe1997 | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/liyafe1997/CustoMIUIzerMod\" />\n        </Preference>\n        <Preference\n            android:title=\"DexKit\"\n            android:summary=\"LuckyPray | LGPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/LuckyPray/DexKit\" />\n        </Preference>\n        <Preference\n            android:title=\"Disable app link verify\"\n            android:summary=\"tehcneko | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Xposed-Modules-Repo/io.github.tehcneko.applinkverify\" />\n        </Preference>\n        <Preference\n            android:title=\"DisableFlagSecure\"\n            android:summary=\"LSPosed | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/LSPosed/DisableFlagSecure\" />\n        </Preference>\n        <Preference\n            android:title=\"DisableLogRequest\"\n            android:summary=\"QueallyTech | AGPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/QueallyTech/DisableLogRequest\" />\n        </Preference>\n        <Preference\n            android:title=\"EzXHelper\"\n            android:summary=\"KyuubiRan | Apache-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/KyuubiRan/EzXHelper\" />\n        </Preference>\n        <Preference\n            android:title=\"FixMiuiMediaControlPanel\"\n            android:summary=\"qqlittleice | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/qqlittleice/FixMiuiMediaControlPanel\" />\n        </Preference>\n        <Preference\n            android:title=\"FuckNFC\"\n            android:summary=\"xiaowine | No License\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/xiaowine/FuckNFC\" />\n        </Preference>\n        <Preference\n            android:title=\"Gson\"\n            android:summary=\"Android Open Source Project, Google Inc. | Apache-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/google/gson\" />\n        </Preference>\n        <Preference\n            android:title=\"HideMiuiClipboardDialog\"\n            android:summary=\"zerorooot | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/zerorooot/HideMiuiClipboardDialog\" />\n        </Preference>\n        <Preference\n            android:title=\"Kotlin\"\n            android:summary=\"JetBrains | No License\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/JetBrains/kotlin\" />\n        </Preference>\n        <Preference\n            android:title=\"MaxFreeForm\"\n            android:summary=\"YifePlayte | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/YifePlayte/MaxFreeForm\" />\n        </Preference>\n        <Preference\n            android:title=\"Miui Feature\"\n            android:summary=\"MoralNorm | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/moralnorm/miui_feature\" />\n        </Preference>\n        <Preference\n            android:title=\"MiuiHomeR\"\n            android:summary=\"qqlittleice | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/qqlittleice/MiuiHome_R\" />\n        </Preference>\n        <Preference\n            android:title=\"MIUI IME Unlock\"\n            android:summary=\"RC1844 | MIT\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/RC1844/MIUI_IME_Unlock\" />\n        </Preference>\n        <Preference\n            android:title=\"MIUIQOL\"\n            android:summary=\"chsbuffer | No License\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/chsbuffer/MIUIQOL\" />\n        </Preference>\n        <Preference\n            android:title=\"Miui XXL\"\n            android:summary=\"Wine-Network | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Wine-Network/Miui_XXL\" />\n        </Preference>\n        <Preference\n            android:title=\"Miui XXL\"\n            android:summary=\"YuKongA | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/YuKongA/Miui_XXL\" />\n        </Preference>\n        <Preference\n            android:title=\"MIUI 通知修复\"\n            android:summary=\"tehcneko | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Xposed-Modules-Repo/io.github.tehcneko.miuinotificationfix\" />\n        </Preference>\n        <Preference\n            android:title=\"ModemPro\"\n            android:summary=\"Weverse | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Weverses/ModemPro\" />\n        </Preference>\n        <Preference\n            android:title=\"NoStorageRestrict\"\n            android:summary=\"DanGLES3 | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Xposed-Modules-Repo/com.github.dan.nostoragerestrict\" />\n        </Preference>\n        <Preference\n            android:title=\"Portal Hook\"\n            android:summary=\"Haocen2004 | MIT\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Haocen2004/PortalHook\" />\n        </Preference>\n        <Preference\n            android:title=\"RemoveMiuiSystemSelfProtection\"\n            android:summary=\"gfbjngjibn | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/gfbjngjibn/RemoveMiuiSystemSelfProtection\" />\n        </Preference>\n        <Preference\n            android:title=\"SettingsDontThroughTheList\"\n            android:summary=\"weixiansen574 | No License\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/weixiansen574/settingsdontthroughthelist\" />\n        </Preference>\n        <Preference\n            android:title=\"StarVoyager\"\n            android:summary=\"hosizoraru | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/hosizoraru/StarVoyager\" />\n        </Preference>\n        <Preference\n            android:title=\"WINI\"\n            android:summary=\"ouhoukyo | MIT\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/ouhoukyo/WINI\" />\n        </Preference>\n        <Preference\n            android:title=\"WOMMO\"\n            android:summary=\"YifePlayte | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/YifePlayte/WOMMO\" />\n        </Preference>\n        <Preference\n            android:title=\"Woobox For MIUI\"\n            android:summary=\"hosizoraru | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/hosizoraru/WooBoxForMIUI\" />\n        </Preference>\n        <Preference\n            android:title=\"Woobox For MIUI\"\n            android:summary=\"Simplicity-Team | GPL-3.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Simplicity-Team/WooBoxForMIUI\" />\n        </Preference>\n        <Preference\n            android:title=\"Xposed\"\n            android:summary=\"rovo89, Tungstwenty | Apache-2.0\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/rovo89/XposedBridge\" />\n        </Preference>\n        <Preference\n            android:title=\"XposedBridge\"\n            android:summary=\"rovo89 | No License\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/rovo89/XposedBridge\" />\n        </Preference>\n        <Preference\n            android:title=\".xlDownload\"\n            android:summary=\"Kr328 | No License\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://github.com/Kr328/.xlDownload\" />\n        </Preference>\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/prefs_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.SystemFrameworkFragment\"\n            android:icon=\"@drawable/ic_system_framework\"\n            android:key=\"prefs_key_system_framework\"\n            android:summary=\"android\"\n            android:title=\"@string/system_framework\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.BrowserFragment\"\n            android:icon=\"@drawable/ic_browser\"\n            android:key=\"prefs_key_browser\"\n            android:summary=\"com.android.browser\"\n            android:title=\"@string/browser\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.CameraFragment\"\n            android:icon=\"@drawable/ic_camera\"\n            android:key=\"prefs_key_camera\"\n            android:summary=\"com.android.camera\"\n            android:title=\"@string/camera\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.ClockFragment\"\n            android:icon=\"@drawable/ic_clock\"\n            android:key=\"prefs_key_clock\"\n            android:summary=\"com.android.deskclock\"\n            android:title=\"@string/clock\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.FileExplorerFragment\"\n            android:icon=\"@drawable/ic_fileexplorer\"\n            android:key=\"prefs_key_file_explorer\"\n            android:summary=\"com.android.fileexplorer\"\n            android:title=\"@string/fileexplorer\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.InCallUiFragment\"\n            android:icon=\"@drawable/ic_call\"\n            android:key=\"prefs_key_incallui\"\n            android:summary=\"com.android.incallui\"\n            android:title=\"@string/incallui\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MmsFragment\"\n            android:icon=\"@drawable/ic_mms\"\n            android:key=\"prefs_key_mms\"\n            android:summary=\"com.android.mms\"\n            android:title=\"@string/mms\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.NfcFragment\"\n            android:icon=\"@drawable/ic_default_icon\"\n            android:key=\"prefs_key_nfc\"\n            android:summary=\"com.android.nfc\"\n            android:title=\"@string/nfc\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.PhoneFragment\"\n            android:icon=\"@drawable/ic_phone\"\n            android:key=\"prefs_key_phone\"\n            android:summary=\"com.android.phone\"\n            android:title=\"@string/phone\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.DownloadsFragment\"\n            android:icon=\"@drawable/ic_downloads\"\n            android:key=\"prefs_key_downloads\"\n            android:summary=\"com.android.providers.downloads\"\n            android:title=\"@string/downloads\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.SystemUIFragment\"\n            android:icon=\"@drawable/ic_system_ui\"\n            android:key=\"prefs_key_system_ui\"\n            android:summary=\"com.android.systemui\"\n            android:title=\"@string/system_ui\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.SystemSettingsFragment\"\n            android:icon=\"@drawable/ic_system_settings\"\n            android:key=\"prefs_key_system_settings\"\n            android:summary=\"com.android.settings\"\n            android:title=\"@string/system_settings\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.ThemeManagerFragment\"\n            android:icon=\"@drawable/ic_theme_manager\"\n            android:key=\"prefs_key_various_theme\"\n            android:summary=\"com.android.thememanager\"\n            android:title=\"@string/theme_manager\" />\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.UpdaterFragment\"\n            android:icon=\"@drawable/ic_updater\"\n            android:key=\"prefs_key_updater\"\n            android:summary=\"com.android.updater\"\n            android:title=\"@string/updater\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.LbeFragment\"\n            android:icon=\"@drawable/ic_lbe\"\n            android:key=\"prefs_key_lbe\"\n            android:summary=\"com.lbe.security.miui\"\n            android:title=\"@string/lbe\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MiLinkFragment\"\n            android:icon=\"@drawable/ic_milink\"\n            android:key=\"prefs_key_milink\"\n            android:summary=\"com.milink.service\"\n            android:title=\"@string/milink\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.AodFragment\"\n            android:icon=\"@drawable/ic_aod\"\n            android:key=\"prefs_key_aod\"\n            android:summary=\"com.miui.aod\"\n            android:title=\"@string/aod\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.ContentExtensionFragment\"\n            android:icon=\"@drawable/ic_contentextension\"\n            android:key=\"prefs_key_content_extension\"\n            android:summary=\"com.miui.contentextension\"\n            android:title=\"@string/content_extension\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.CreationFragment\"\n            android:icon=\"@drawable/ic_creation\"\n            android:key=\"prefs_key_creation\"\n            android:summary=\"com.miui.creation\"\n            android:title=\"@string/creation\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.GalleryFragment\"\n            android:icon=\"@drawable/ic_gallery\"\n            android:key=\"prefs_key_gallery\"\n            android:summary=\"com.miui.gallery\"\n            android:title=\"@string/gallery\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.GuardProviderFragment\"\n            android:icon=\"@drawable/ic_guard_provider_new\"\n            android:key=\"prefs_key_guardprovider\"\n            android:summary=\"com.miui.guardprovider\"\n            android:title=\"@string/guard_provider\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.HomeFragment\"\n            android:icon=\"@drawable/ic_home\"\n            android:key=\"prefs_key_home\"\n            android:summary=\"com.miui.home\"\n            android:title=\"@string/home\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MediaEditorFragment\"\n            android:icon=\"@drawable/ic_mediaeditor\"\n            android:key=\"prefs_key_mediaeditor\"\n            android:summary=\"com.miui.mediaeditor\"\n            android:title=\"@string/mediaeditor\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MiShareFragment\"\n            android:icon=\"@drawable/ic_mishare\"\n            android:key=\"prefs_key_mishare\"\n            android:summary=\"com.miui.mishare.connectivity\"\n            android:title=\"@string/mishare\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MiWallpaperFragment\"\n            android:icon=\"@drawable/ic_miwallpaper\"\n            android:key=\"prefs_key_miwallpaper\"\n            android:summary=\"com.miui.miwallpaper\"\n            android:title=\"@string/miwallpaper\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MiuiPackageInstallerFragment\"\n            android:icon=\"@drawable/ic_package_installer\"\n            android:key=\"prefs_key_package_installer\"\n            android:summary=\"com.miui.packageinstaller\"\n            android:title=\"@string/package_installer\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.PersonalAssistantFragment\"\n            android:icon=\"@drawable/ic_personal_assistant\"\n            android:key=\"prefs_key_home_personal_assistant\"\n            android:summary=\"com.miui.personalassistant\"\n            android:title=\"@string/personal_assistant\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MusicFragment\"\n            android:icon=\"@drawable/ic_music\"\n            android:key=\"prefs_key_music\"\n            android:summary=\"com.miui.player\"\n            android:title=\"@string/music\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.PowerKeeperFragment\"\n            android:icon=\"@drawable/ic_powerkeeper\"\n            android:key=\"prefs_key_powerkeeper\"\n            android:summary=\"com.miui.powerkeeper\"\n            android:title=\"@string/powerkeeper\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.ScreenRecorderFragment\"\n            android:icon=\"@drawable/ic_screenrecorder\"\n            android:key=\"prefs_key_screen_recorder\"\n            android:summary=\"com.miui.screenrecorder\"\n            android:title=\"@string/screenrecorder\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.ScreenShotFragment\"\n            android:icon=\"@drawable/ic_screenshot\"\n            android:key=\"prefs_key_screenshot\"\n            android:summary=\"com.miui.screenshot\"\n            android:title=\"@string/screenshot\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.SecurityCenterFragment\"\n            android:icon=\"@drawable/ic_security_center\"\n            android:key=\"prefs_key_security_center\"\n            android:summary=\"com.miui.securitycenter\"\n            android:title=\"@string/security_center\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.SecurityCenterFragment\"\n            android:icon=\"@drawable/ic_security_center\"\n            android:key=\"prefs_key_security_center_pad\"\n            android:summary=\"com.miui.securitycenter\"\n            android:title=\"@string/security_center_pad\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.TsmClientFragment\"\n            android:icon=\"@drawable/ic_tsmclient\"\n            android:key=\"prefs_key_tsmclient\"\n            android:summary=\"com.miui.tsmclient\"\n            android:title=\"@string/tsmclient\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.WeatherFragment\"\n            android:icon=\"@drawable/ic_weather\"\n            android:key=\"prefs_key_weather\"\n            android:summary=\"com.miui.weather2\"\n            android:title=\"@string/weather\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.AiAsstFragment\"\n            android:icon=\"@drawable/ic_aiasst\"\n            android:key=\"prefs_key_aiasst\"\n            android:summary=\"com.xiaomi.aiasst.vision\"\n            android:title=\"@string/aiasst\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.BarrageFragment\"\n            android:icon=\"@drawable/ic_default_icon\"\n            android:key=\"prefs_key_barrage\"\n            android:summary=\"com.xiaomi.barrage\"\n            android:title=\"@string/barrage\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.JoyoseFragment\"\n            android:icon=\"@drawable/ic_default_icon\"\n            android:key=\"prefs_key_joyose\"\n            android:summary=\"com.xiaomi.joyose\"\n            android:title=\"@string/joyose\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MarketFragment\"\n            android:icon=\"@drawable/ic_market\"\n            android:key=\"prefs_key_market\"\n            android:summary=\"com.xiaomi.market\"\n            android:title=\"@string/market\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MirrorFragment\"\n            android:icon=\"@drawable/ic_miui_plus\"\n            android:key=\"prefs_key_mirror\"\n            android:summary=\"com.xiaomi.mirror\"\n            android:title=\"@string/mirror\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MiSettingsFragment\"\n            android:icon=\"@drawable/ic_misettings\"\n            android:key=\"prefs_key_mi_settings\"\n            android:summary=\"com.xiaomi.misettings\"\n            android:title=\"@string/mi_settings\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.MtbFragment\"\n            android:icon=\"@drawable/ic_mtb\"\n            android:key=\"prefs_key_mtb\"\n            android:summary=\"com.xiaomi.mtb\"\n            android:title=\"@string/mtb\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.NetworkBoostFragment\"\n            android:icon=\"@drawable/ic_default_icon\"\n            android:key=\"prefs_key_networkboost\"\n            android:summary=\"com.xiaomi.networkboost\"\n            android:title=\"@string/networkboost\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.ScannerFragment\"\n            android:icon=\"@drawable/ic_scanner\"\n            android:key=\"prefs_key_scanner\"\n            android:summary=\"com.xiaomi.scanner\"\n            android:title=\"@string/scanner\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:enabled=\"false\"\n            android:icon=\"@drawable/ic_custom\"\n            android:key=\"prefs_key_custom_hook\"\n            android:title=\"@string/custom_hook\"\n            app:isPreferenceVisible=\"false\" />\n\n        <com.sevtinge.cemiuiler.prefs.PreferenceHeader\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.VariousFragment\"\n            android:icon=\"@drawable/ic_various_new\"\n            android:key=\"prefs_key_various\"\n            android:title=\"@string/various\" />\n\n    </PreferenceCategory>\n\n    <Preference\n        android:enabled=\"false\"\n        android:key=\"prefs_key_tip\"\n        android:layout=\"@layout/preference_text\"\n        android:summary=\"@string/tip_0\" />\n\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/prefs_settings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"true\"\n            android:key=\"prefs_key_settings_hide_app_icon\"\n            android:title=\"@string/settings_hide_app_icon\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_settings_icon\"\n            android:summary=\"@string/settings_icon_desc\"\n            android:title=\"@string/settings_icon\"\n            app:entries=\"@array/settings_icon\"\n            app:entryValues=\"@array/settings_icon_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:dependency=\"prefs_key_settings_icon\"\n            android:enabled=\"false\"\n            android:key=\"prefs_key_settings_icon_mode\"\n            android:title=\"@string/settings_icon_mode\"\n            app:entries=\"@array/settings_icon_mode\"\n            app:entryValues=\"@array/settings_icon_mode_value\"\n            app:isPreferenceVisible=\"false\" />\n\n        <MultiSelectListPreference\n            android:enabled=\"false\"\n            android:key=\"prefs_key_settings_reboot\"\n            android:title=\"@string/settings_reboot\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_settings_disable_detailed_log\"\n            android:summary=\"@string/disable_detailed_log_desc\"\n            android:title=\"@string/disable_detailed_log\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/settings_data_title\">\n        <Preference\n            android:key=\"prefs_key_back\"\n            android:title=\"@string/settings_back\" />\n\n        <Preference\n            android:key=\"prefs_key_rest\"\n            android:title=\"@string/settings_rest\" />\n\n        <Preference\n            android:key=\"prefs_key_reset\"\n            android:title=\"@string/settings_reset\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/settings_bug_title\">\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.settings.SafeModeFragment\"\n            android:key=\"prefs_key_safe_mode\"\n            android:summary=\"@string/settings_safe_mode_desc\"\n            android:title=\"@string/settings_safe_mode\" />\n\n    </PreferenceCategory>\n\n    <!--<PreferenceCategory>\n        <Preference android:title=\"@string/settings_debug_title>\n            <intent\n                android:targetPackage=\"com.sevtinge.cemiuiler\"\n                android:targetClass=\"com.sevtinge.cemiuiler.ui.common.DebugActivity\"/>\n        </Preference>\n    </PreferenceCategory>-->\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/scanner.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/scanner_card\"\n            android:key=\"prefs_key_scanner_card\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/scanner_translation\"\n            android:key=\"prefs_key_scanner_translation\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/scanner_ocr\"\n            android:key=\"prefs_key_scanner_ocr\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/scanner_document\"\n            android:key=\"prefs_key_scanner_document\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/scanner_excel\"\n            android:key=\"prefs_key_scanner_excel\"\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_scanner_document\" />\n\n        <SwitchPreference\n            android:title=\"@string/scanner_ppt\"\n            android:key=\"prefs_key_scanner_ppt\"\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_scanner_document\" />\n\n        <SwitchPreference\n            android:title=\"@string/scanner_doc_ppt\"\n            android:key=\"prefs_key_scanner_doc_ppt\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/screenrecorder.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/screen_recorder_config\"\n            android:summary=\"@string/screen_recorder_config_desc\"\n            android:key=\"prefs_key_screenrecorder_config\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/screen_recorder_more_volume\"\n            android:summary=\"@string/screen_recorder_more_volume_desc\"\n            android:key=\"prefs_key_screenrecorder_more_volume\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/screen_recorder_force_support_playback_capture\"\n            android:summary=\"@string/screen_recorder_force_support_playback_capture_desc\"\n            android:key=\"prefs_key_screenrecorder_force_support_playback_capture\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/save_to_screen_title\"\n            android:summary=\"@string/screen_recorder_save_to_movies_desc\"\n            android:key=\"prefs_key_screenrecorder_save_to_movies\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/screenshot.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/screenshot_unlock_minimum_crop_limit\"\n            android:key=\"prefs_key_screenshot_unlock_minimum_crop_limit\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/screenshot_unlock_privacy_marking_title\"\n            android:summary=\"@string/screenshot_unlock_privacy_marking_desc\"\n            android:key=\"prefs_key_screenshot_unlock_privacy_marking\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/save_to_screen_title\"\n            android:summary=\"@string/screenshot_save_to_pictures_desc\"\n            android:key=\"prefs_key_screenshot_save_to_pictures\"\n            android:defaultValue=\"false\" />\n\n        <EditTextPreference\n            android:title=\"@string/screenshot_device_customize_title\"\n            android:summary=\"@string/screenshot_device_customize_desc\"\n            android:key=\"prefs_key_screenshot_device_customize\" />\n\n    </PreferenceCategory>\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/security_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/security_center_app_title\">\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_security_center_app_default_sort\"\n            android:summary=\"@string/security_app_sort_summary\"\n            android:title=\"@string/security_app_sort_title\"\n            app:entries=\"@array/app_sort\"\n            app:entryValues=\"@array/app_sort_value\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_disable_ban\"\n            android:title=\"@string/security_center_disable_ban\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_app_restrict\"\n            android:summary=\"@string/security_restrict_app_summary\"\n            android:title=\"@string/security_restrict_app_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_app_default_setting\"\n            android:summary=\"@string/security_disable_app_url_summary\"\n            android:title=\"@string/security_disable_app_url_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_app_disable\"\n            android:summary=\"@string/security_disable_app_summary\"\n            android:title=\"@string/security_disable_app_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_app_details\"\n            android:summary=\"@string/security_app_summary\"\n            android:title=\"@string/security_app_title\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/security_center_battery_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_show_battery_temperature\"\n            android:title=\"@string/security_center_show_battery_temperature\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_unlock_screen_time\"\n            android:summary=\"@string/security_center_unlock_screen_time_desc\"\n            android:title=\"@string/security_center_unlock_screen_time\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_unlock_smart_charge\"\n            android:title=\"@string/security_center_unlock_smart_charge_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_super_wireless_charge\"\n            android:title=\"@string/security_center_super_wireless_charge\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/security_center_privacy_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_ai_clipboard\"\n            android:title=\"@string/security_center_ai_clipboard\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_blur_location\"\n            android:title=\"@string/security_center_blur_location\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_get_number\"\n            android:title=\"@string/security_center_get_number\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_applock_pin_scramble\"\n            android:summary=\"@string/security_center_applock_pin_scramble_desc\"\n            android:title=\"@string/security_center_applock_pin_scramble\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/security_center_beauty_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_beauty_light_auto\"\n            android:title=\"@string/security_center_beauty_light_auto\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_beauty_face\"\n            android:title=\"@string/security_center_beauty_face\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_beauty_privacy\"\n            android:title=\"@string/security_center_beauty_privacy\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_beauty_pc\"\n            android:title=\"@string/security_center_beauty_pc\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/security_center_bubble_and_freeform_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_unlock_side_hide_freeform\"\n            android:summary=\"@string/security_center_unlock_side_hide_freeform_desc\"\n            android:title=\"@string/security_center_unlock_side_hide_freeform\"\n            app:isPreferenceVisible=\"false\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_remove_conversation_bubble_settings_restriction\"\n            android:title=\"@string/security_center_remove_conversation_bubble_settings_restriction\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/security_center_newbox_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_hide_sidebar\"\n            android:title=\"@string/security_center_hide_sidebar\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_security_center_hide_sidebar\"\n            android:key=\"prefs_key_security_center_leave_open\"\n            android:title=\"@string/security_center_leave_open\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:enabled=\"false\"\n            android:key=\"prefs_key_security_center_sidebar_line_color\"\n            android:title=\"@string/security_center_sidebar_line_color\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-1294740525\"\n            android:dependency=\"prefs_key_security_center_sidebar_line_color\"\n            android:key=\"prefs_key_security_center_sidebar_line_color_default\"\n            android:title=\"@string/security_center_sidebar_line_color_default\"\n            app:showAlphaSlider=\"true\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-6842473\"\n            android:dependency=\"prefs_key_security_center_sidebar_line_color\"\n            android:key=\"prefs_key_security_center_sidebar_line_color_dark\"\n            android:title=\"@string/security_center_sidebar_line_color_dark\"\n            app:showAlphaSlider=\"true\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-872415232\"\n            android:dependency=\"prefs_key_security_center_sidebar_line_color\"\n            android:key=\"prefs_key_security_center_sidebar_line_color_light\"\n            android:title=\"@string/security_center_sidebar_line_color_light\"\n            app:showAlphaSlider=\"true\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_se_enable\"\n            android:title=\"@string/security_center_blur_model\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"60\"\n            android:dependency=\"prefs_key_se_enable\"\n            android:key=\"prefs_key_security_center_blurradius\"\n            android:title=\"@string/security_center_blurradius\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d %%\"\n            app:maxValue=\"99\"\n            app:minValue=\"30\"\n            app:stepValue=\"1\" />\n\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-1\"\n            android:dependency=\"prefs_key_se_enable\"\n            android:key=\"prefs_key_security_center_color\"\n            android:title=\"@string/security_center_color\"\n            app:showAlphaSlider=\"true\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_dolby_open\"\n            android:title=\"@string/security_center_dolby_open\" />\n\n        <SwitchPreference\n            app:isPreferenceVisible=\"false\"\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_disable_sidebar_show_suggest\"\n            android:title=\"@string/security_center_disable_sidebar_show_suggest\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_remove_macro_black_list\"\n            android:title=\"@string/security_center_remove_macro_black_list\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_unlock_gun_service\"\n            android:title=\"@string/security_center_unlock_gun_service\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_disable_remove_screen_hold_on\"\n            android:title=\"@string/security_center_disable_remove_screen_hold_on\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_unlock_memc\"\n            android:title=\"@string/security_center_unlock_memc\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_unlock_enhance_contours\"\n            android:title=\"@string/security_center_unlock_enhance_contours\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_unlock_s_resolution\"\n            android:title=\"@string/security_center_unlock_s_resolution\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/security_center_other_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_score\"\n            android:summary=\"@string/security_score_summary\"\n            android:title=\"@string/security_score\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_skip_count_down_limit\"\n            android:summary=\"@string/security_center_skip_waiting_time_desc\"\n            android:title=\"@string/security_center_skip_waiting_time\"\n            app:isPreferenceVisible=\"true\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_disable_root_check\"\n            android:title=\"@string/security_center_disable_root_check\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_remove_low_battery_reminder\"\n            android:summary=\"@string/security_center_remove_low_battery_reminder_summary\"\n            android:title=\"@string/security_center_remove_low_battery_reminder_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_remove_open_app_confirmation_popup\"\n            android:summary=\"@string/security_center_remove_open_app_confirmation_popup_summary\"\n            android:title=\"@string/security_center_remove_open_app_confirmation_popup\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_disable_send_malicious_app_notification\"\n            android:title=\"@string/security_center_disable_send_malicious_app_notification\"\n            app:isPreferenceVisible=\"true\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/settings_safe_mode.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <SwitchPreference\n        android:title=\"@string/system_ui\"\n        android:key=\"prefs_key_system_ui_safe_mode_enable\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:title=\"@string/home\"\n        android:key=\"prefs_key_home_safe_mode_enable\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:title=\"@string/security_center\"\n        android:key=\"prefs_key_security_center_safe_mode_enable\"\n        android:defaultValue=\"false\" />\n\n    <SwitchPreference\n        android:title=\"@string/various\"\n        android:key=\"prefs_key_other_safe_mode_enable\"\n        android:defaultValue=\"false\" />\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_settings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_international_build\"\n            android:title=\"@string/system_settings_international_build\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_enable_pad_area\"\n            android:summary=\"@string/system_settings_enable_area_desc\"\n            android:title=\"@string/system_settings_enable_pad_area\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_enable_fold_area\"\n            android:summary=\"@string/system_settings_enable_area_desc\"\n            android:title=\"@string/system_settings_enable_fold_area\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_safe_wifi\"\n            android:summary=\"@string/system_settings_safe_wifi_desc\"\n            android:title=\"@string/system_settings_safe_wifi\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_novelty_haptic\"\n            android:summary=\"@string/system_settings_novelty_haptic_desc\"\n            android:title=\"@string/system_settings_novelty_haptic_title\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory\n        android:key=\"prefs_key_system_settings_connection_sharing\"\n        android:title=\"@string/system_settings_connection_sharing_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_new_nfc_page\"\n            android:summary=\"@string/system_settings_new_nfc_page_desc\"\n            android:title=\"@string/system_settings_new_nfc_page\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory\n        android:key=\"prefs_key_system_settings_accessibility\"\n        android:title=\"@string/system_settings_accessibility_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_area_screenshot\"\n            android:title=\"@string/system_settings_area_screenshot\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_settings_lab_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_voip_assistant_controller\"\n            android:title=\"@string/system_settings_voip_assistant_controller\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_settings_ai_image_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_ai_image_unlock_sr\"\n            android:title=\"@string/system_settings_ai_image_unlock_sr\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_ai_image_unlock_ai\"\n            android:title=\"@string/system_settings_ai_image_unlock_ai\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_ai_image_unlock_memc\"\n            android:title=\"@string/system_settings_ai_image_unlock_memc\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_settings_permission_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_permission_show_app_up\"\n            android:summary=\"@string/system_settings_permission_show_app_up_desc\"\n            android:title=\"@string/system_settings_permission_show_app_up\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_permission_unknown_origin_app\"\n            android:summary=\"@string/system_settings_permission_unknown_origin_app_desc\"\n            android:title=\"@string/system_settings_permission_unknown_origin_app\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_settings_develop_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_apps_freezer\"\n            android:summary=\"@string/system_settings_apps_freezer_more\"\n            android:title=\"@string/system_settings_apps_freezer\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_settings_develop_speed_mode\"\n            android:summary=\"@string/system_settings_develop_speed_mode_desc\"\n            android:title=\"@string/system_settings_develop_speed_mode\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:key=\"prefs_key_system_settings_window_animation_scale\"\n            android:title=\"@string/system_settings_window_animation_scale\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"100\"\n            app:format=\"%s f\"\n            app:maxValue=\"500\"\n            app:minValue=\"0\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:key=\"prefs_key_system_settings_transition_animation_scale\"\n            android:title=\"@string/system_settings_transition_animation_scale\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"100\"\n            app:format=\"%s f\"\n            app:maxValue=\"500\"\n            app:minValue=\"0\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:key=\"prefs_key_system_settings_animator_duration_scale\"\n            android:title=\"@string/system_settings_animator_duration_scale\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"100\"\n            app:format=\"%s f\"\n            app:maxValue=\"500\"\n            app:minValue=\"0\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/system_ui.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.LockScreenSettings\"\n        android:title=\"@string/system_ui_lockscreen_title\" />\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.StatusBarSettings\"\n        android:title=\"@string/system_ui_statusbar_title\" />\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.NavigationSettings\"\n        android:title=\"@string/system_ui_navigation_title\" />\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.ControlCenterSettings\"\n        android:title=\"@string/system_ui_controlcenter_title\" />\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.SystemUIOtherSettings\"\n        android:title=\"@string/system_ui_other_title\" />\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_control_center.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_show_weather\"\n            android:title=\"@string/system_ui_control_center_show_weather\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_control_center_show_weather\"\n            android:key=\"prefs_key_system_ui_control_center_show_weather_city\"\n            android:title=\"@string/system_ui_control_center_show_weather_city\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_control_center_notification_blur_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_mute_visible_notice\"\n            android:summary=\"@string/system_ui_control_center_mute_visible_notice_desc\"\n            android:title=\"@string/system_ui_control_center_mute_visible_notice\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_compact_notice\"\n            android:summary=\"@string/system_ui_control_center_compact_notice_desc\"\n            android:title=\"@string/system_ui_control_center_compact_notice\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_redirect_notice\"\n            android:summary=\"@string/system_ui_control_center_redirect_notice_desc\"\n            android:title=\"@string/system_ui_control_center_redirect_notice\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_n_enable\"\n            android:title=\"@string/system_ui_control_center_notification_blur_model\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_n_enable\"\n            android:key=\"prefs_key_n_enable_fix\"\n            android:summary=\"@string/system_ui_control_center_notification_blur_fix_desc\"\n            android:title=\"@string/system_ui_control_center_notification_blur_fix\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"56\"\n            android:dependency=\"prefs_key_n_enable\"\n            android:key=\"prefs_key_system_ui_control_center_blur_radius\"\n            android:summary=\"@string/system_ui_control_center_blur_radius_desc\"\n            android:title=\"@string/system_ui_control_center_blur_radius\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d %%\"\n            app:maxValue=\"99\"\n            app:minValue=\"20\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"48\"\n            android:dependency=\"prefs_key_n_enable\"\n            android:key=\"prefs_key_system_ui_control_center_corner_radius\"\n            android:summary=\"@string/system_ui_control_center_corner_radius_desc\"\n            android:title=\"@string/system_ui_control_center_corner_radius\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d dp\"\n            app:maxValue=\"100\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"100\"\n            android:dependency=\"prefs_key_n_enable\"\n            android:key=\"prefs_key_system_ui_control_center_blur_background_alpha\"\n            android:title=\"@string/system_ui_control_center_blur_background_alpha\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s\"\n            app:maxValue=\"255\"\n            app:minValue=\"85\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"200\"\n            android:dependency=\"prefs_key_n_enable\"\n            android:key=\"prefs_key_system_ui_control_center_default_background_alpha\"\n            android:title=\"@string/system_ui_control_center_default_background_alpha\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s\"\n            app:maxValue=\"255\"\n            app:minValue=\"85\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_controlcenter_card_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_fix_media_control_panel\"\n            android:title=\"@string/system_ui_control_center_fix_media_control_panel\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_control_center_qs_detail_bg\"\n            android:title=\"@string/system_control_center_qs_detail_bg\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s\"\n            app:maxValue=\"255\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"255\"\n            android:key=\"prefs_key_system_ui_control_center_control_detail_background_alpha\"\n            android:title=\"@string/system_ui_control_center_control_detail_background_alpha\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s\"\n            app:maxValue=\"255\"\n            app:minValue=\"85\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:enabled=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_mi_play_entry\"\n            android:title=\"@string/system_ui_control_center_hide_mi_play_entry\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_control_center_mi_smart_hub_entry\"\n            android:title=\"@string/system_ui_control_center_hide_mi_smart_hub_entry\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_control_center_device_ctrl_entry\"\n            android:title=\"@string/system_ui_control_center_hide_device_ctrl_entry\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_controlcenter_magnet_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_control_center_5g_tile\"\n            android:title=\"@string/system_control_center_5g_tile\" />\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_center_gms_open\"\n            android:title=\"@string/security_center_gms_open\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_control_center_sunshine_new_mode\"\n            android:title=\"@string/system_control_center_sunshine_mode\"\n            app:entries=\"@array/control_center_sunshine_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_security_flash_light\"\n            android:summary=\"@string/security_center_flash_light_more\"\n            android:title=\"@string/security_center_flash_light\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_auto_close\"\n            android:summary=\"@string/system_ui_control_auto_close_more\"\n            android:title=\"@string/system_ui_control_auto_close\" />\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_control_center_qs_tile_label\"\n            android:title=\"@string/system_control_center_qs_tile_label\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_controlcenter_new_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_rounded_rect\"\n            android:title=\"@string/system_ui_control_center_rounded_rect\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_control_center_switch_cc_and_notification\"\n            android:title=\"@string/system_ui_control_center_switch_cc_and_notification_title\" />\n\n        <DropDownPreference\n            android:defaultValue=\"1\"\n            android:key=\"prefs_key_system_ui_control_center_cc_bluetooth_tile_style\"\n            android:summary=\"@string/system_ui_control_center_cc_bluetooth_tile_style_sum\"\n            android:title=\"@string/system_ui_control_center_cc_bluetooth_tile_style_title\"\n            app:entries=\"@array/control_center_cc_bluetooth_tile_style\"\n            app:entryValues=\"@array/control_center_cc_bluetooth_tile_style_value\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"4\"\n            android:key=\"prefs_key_system_control_center_cc_rows\"\n            android:title=\"@string/system_control_center_qs_rows\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_rows_format\"\n            app:maxValue=\"6\"\n            app:minValue=\"3\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"4\"\n            android:key=\"prefs_key_system_control_center_cc_columns\"\n            android:title=\"@string/system_control_center_qs_columns\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_columns_format\"\n            app:maxValue=\"6\"\n            app:minValue=\"4\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_controlcenter_old_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_control_center_unlock_old\"\n            android:title=\"@string/system_ui_controlcenter_unlock_old_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_control_center_old_enable_1\"\n            android:title=\"@string/system_ui_controlcenter_enable_title\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"1\"\n            android:dependency=\"prefs_key_system_control_center_old_enable_1\"\n            android:key=\"prefs_key_system_control_center_old_qs_row\"\n            android:summary=\"@string/system_control_center_old_qs_rows_desc\"\n            android:title=\"@string/system_control_center_qs_rows\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_rows_format\"\n            app:maxValue=\"5\"\n            app:minValue=\"1\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"2\"\n            android:dependency=\"prefs_key_system_control_center_old_enable_1\"\n            android:key=\"prefs_key_system_control_center_old_qs_column\"\n            android:summary=\"@string/system_control_center_old_qs_columns_desc\"\n            android:title=\"@string/system_control_center_qs_columns\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_columns_format\"\n            app:maxValue=\"7\"\n            app:minValue=\"2\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"2\"\n            android:dependency=\"prefs_key_system_control_center_old_enable_1\"\n            android:key=\"prefs_key_system_control_center_old_qs_grid_column\"\n            android:summary=\"@string/system_control_center_old_qs_grid_columns_desc\"\n            android:title=\"@string/system_control_center_old_qs_grid_columns\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_columns_format\"\n            app:maxValue=\"7\"\n            app:minValue=\"2\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_control_center_old_enable\"\n            android:title=\"@string/system_ui_controlcenter_enable_title\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"3\"\n            android:dependency=\"prefs_key_system_control_center_old_enable\"\n            android:key=\"prefs_key_system_control_center_old_qs_rows\"\n            android:title=\"@string/system_control_center_qs_rows\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_rows_format\"\n            app:maxValue=\"5\"\n            app:minValue=\"2\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"2\"\n            android:dependency=\"prefs_key_system_control_center_old_enable\"\n            android:key=\"prefs_key_system_control_center_old_qs_rows_horizontal\"\n            android:title=\"@string/system_control_center_qs_rows_horizontal\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_rows_format\"\n            app:maxValue=\"3\"\n            app:minValue=\"1\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"4\"\n            android:dependency=\"prefs_key_system_control_center_old_enable\"\n            android:key=\"prefs_key_system_control_center_old_qs_columns\"\n            android:title=\"@string/system_control_center_qs_columns\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_columns_format\"\n            app:maxValue=\"7\"\n            app:minValue=\"3\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"5\"\n            android:dependency=\"prefs_key_system_control_center_old_enable\"\n            android:key=\"prefs_key_system_control_center_old_qs_columns_horizontal\"\n            android:title=\"@string/system_control_center_qs_columns_horizontal\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_columns_format\"\n            app:maxValue=\"8\"\n            app:minValue=\"4\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"5\"\n            android:dependency=\"prefs_key_system_control_center_old_enable\"\n            android:key=\"prefs_key_system_control_center_old_qs_grid_columns\"\n            android:title=\"@string/system_control_center_old_qs_grid_columns\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_columns_format\"\n            app:maxValue=\"7\"\n            app:minValue=\"3\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"6\"\n            android:dependency=\"prefs_key_system_control_center_old_enable\"\n            android:key=\"prefs_key_system_control_center_old_qs_grid_columns_horizontal\"\n            android:title=\"@string/system_control_center_old_qs_grid_columns_horizontal\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"@string/system_control_center_qs_columns_format\"\n            app:maxValue=\"8\"\n            app:minValue=\"4\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/system_ui_lock_screen.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/system_ui_lockscreen_ui_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_show_second\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_show_second\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_hide_camera\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_hide_camera\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_hide_smart_screen\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_hide_smart_screen\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_blur_button\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_blur_button\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_force_system_fonts\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_force_system_fonts\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_unlock_tip\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_unlock_tip_title\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_lockscreen_information_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_not_disturb_mode\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_not_disturb_mode_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_show_charging_cv\"\n            android:summary=\"@string/system_ui_lock_screen_default_theme\"\n            android:title=\"@string/system_ui_lock_screen_show_charging_cv\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_show_charging_c_more\"\n            android:title=\"@string/system_ui_lock_screen_show_charging_c_more\"\n            android:dependency=\"prefs_key_system_ui_lock_screen_show_charging_cv\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_show_battery_temperature\"\n            android:title=\"@string/system_ui_lock_screen_show_battery_temperature\"\n            android:dependency=\"prefs_key_system_ui_lock_screen_show_charging_cv\" />\n\n        <SeekBarPreferenceEx            \n            android:dependency=\"prefs_key_system_ui_lock_screen_show_charging_cv\"\n            android:key=\"prefs_key_system_ui_lock_screen_show_spacing\"\n            android:title=\"@string/system_ui_lock_screen_show_spacing\"\n            android:defaultValue=\"6\"\n            app:defaultValueText=\"@string/array_default\"           \n            app:maxValue=\"10\"\n            app:minValue=\"2\"\n            app:stepValue=\"1\"\n            app:format=\"%s s\"\n            app:displayDividerValue=\"2\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_lockscreen_safe_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_scramble_pin\"\n            android:summary=\"@string/system_ui_lock_screen_scramble_pin_desc\"\n            android:title=\"@string/system_ui_lock_screen_scramble_pin\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_password_free\"\n            android:summary=\"@string/system_ui_lock_screen_password_free_desc\"\n            android:title=\"@string/system_ui_lock_screen_password_free\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_other_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_double_lock\"\n            android:summary=\"@string/system_ui_lock_screen_double_lock_desc\"\n            android:title=\"@string/system_ui_lock_screen_double_lock\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_lock_screen_hide_status_bar\"\n            android:title=\"@string/system_ui_lock_screen_hide_status_bar\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_navigation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/system_ui_navigation_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:enabled=\"false\"\n            android:key=\"prefs_key_system_ui_navigation_custom\"\n            android:title=\"@string/system_ui_navigation_custom\" />\n\n        <!--navigation_bar_height-->\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_system_ui_navigation_custom\"\n            android:key=\"prefs_key_system_ui_navigation_custom_height\"\n            android:title=\"@string/system_ui_navigation_custom_height\"\n            app:displayDividerValue=\"10\"\n            app:format=\"%s dp\"\n            app:maxValue=\"1000\"\n            app:minValue=\"1\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <!--navigation_bar_height_landscape-->\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_system_ui_navigation_custom\"\n            android:key=\"prefs_key_system_ui_navigation_custom_height_land\"\n            android:title=\"@string/system_ui_navigation_custom_height_land\"\n            app:displayDividerValue=\"10\"\n            app:format=\"%s dp\"\n            app:maxValue=\"1000\"\n            app:minValue=\"1\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <!--navigation_bar_frame_height-->\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_system_ui_navigation_custom\"\n            android:key=\"prefs_key_system_ui_navigation_frame_custom_height\"\n            android:title=\"@string/system_ui_navigation_frame_custom_height\"\n            app:displayDividerValue=\"10\"\n            app:format=\"%s dp\"\n            app:maxValue=\"1000\"\n            app:minValue=\"1\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n        <!--navigation_bar_frame_height_landscape-->\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_system_ui_navigation_custom\"\n            android:key=\"prefs_key_system_ui_navigation_frame_custom_height_land\"\n            android:title=\"@string/system_ui_navigation_frame_custom_height_land\"\n            app:displayDividerValue=\"10\"\n            app:format=\"%s dp\"\n            app:maxValue=\"1000\"\n            app:minValue=\"1\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_navigation_handle_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:disableDependentsState=\"true\"\n            android:key=\"prefs_key_system_ui_hide_navigation_bar\"\n            android:summary=\"@string/system_ui_hide_navigation_bar_more\"\n            android:title=\"@string/system_ui_hide_navigation_bar\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_hide_navigation_bar\"\n            android:key=\"prefs_key_system_ui_navigation_handle_custom\"\n            android:title=\"@string/system_ui_navigation_handle_custom\" />\n\n        <!--navigation_handle_radius-->\n        <SeekBarPreferenceEx\n            android:defaultValue=\"185\"\n            android:dependency=\"prefs_key_system_ui_navigation_handle_custom\"\n            android:key=\"prefs_key_system_ui_navigation_handle_custom_thickness\"\n            android:title=\"@string/system_ui_navigation_handle_custom_thickness\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"100\"\n            app:format=\"%s dp\"\n            app:maxValue=\"500\"\n            app:minValue=\"0\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"5\" />\n\n        <!--navigation_handle_bottom-->\n        <SeekBarPreferenceEx\n            android:defaultValue=\"600\"\n            android:dependency=\"prefs_key_system_ui_navigation_handle_custom\"\n            android:enabled=\"false\"\n            android:key=\"prefs_key_system_ui_navigation_handle_custom_height\"\n            android:title=\"@string/system_ui_navigation_handle_custom_height\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"10\"\n            app:format=\"%s dp\"\n            app:maxValue=\"1000\"\n            app:minValue=\"0\"\n            app:showSeekBarValue=\"true\"\n            app:stepValue=\"5\" />\n\n        <!--navigation_home_handle_width-->\n        <SeekBarPreferenceEx\n            android:defaultValue=\"145\"\n            android:dependency=\"prefs_key_system_ui_navigation_handle_custom\"\n            android:enabled=\"false\"\n            android:key=\"prefs_key_system_ui_navigation_handle_custom_width\"\n            android:title=\"@string/system_ui_navigation_handle_custom_width\"\n            app:format=\"%d dp\"\n            app:maxValue=\"400\"\n            app:minValue=\"0\"\n            app:showSeekBarValue=\"true\" />\n\n        <!--navigation_home_handle_width land-->\n        <SeekBarPreferenceEx\n            android:defaultValue=\"254\"\n            android:dependency=\"prefs_key_system_ui_navigation_handle_custom\"\n            android:enabled=\"false\"\n            android:key=\"prefs_key_system_ui_navigation_handle_custom_width_land\"\n            android:title=\"@string/system_ui_navigation_handle_custom_width_land\"\n            app:format=\"%d dp\"\n            app:maxValue=\"600\"\n            app:minValue=\"0\"\n            app:showSeekBarValue=\"true\" />\n\n        <!--navigation_bar_home_handle_dark_color-->\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-1\"\n            android:dependency=\"prefs_key_system_ui_navigation_handle_custom\"\n            android:key=\"prefs_key_system_ui_navigation_handle_custom_color_dark\"\n            android:title=\"@string/system_ui_navigation_handle_custom_color_dark\"\n            app:showAlphaSlider=\"true\" />\n\n        <!--navigation_bar_home_handle_light_color-->\n        <moralnorm.preference.ColorPickerPreference\n            android:defaultValue=\"-872415232\"\n            android:dependency=\"prefs_key_system_ui_navigation_handle_custom\"\n            android:key=\"prefs_key_system_ui_navigation_handle_custom_color\"\n            android:title=\"@string/system_ui_navigation_handle_custom_color\"\n            app:showAlphaSlider=\"true\" />\n\n        <!--navigation_handle_horizontal_margin 30-->\n\n        <!--navigation_handle_sample_horizontal_margin 10-->\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_other.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory android:title=\"@string/system_ui_charge_animation_title\">\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_charge_animation_style\"\n            android:summary=\"@string/system_ui_charge_animation_style_desc\"\n            android:title=\"@string/system_ui_charge_animation_style\"\n            app:entries=\"@array/charge_animation_entries\"\n            app:entryValues=\"@array/charge_animation_values\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_origin_charge_animation\"\n            android:title=\"@string/system_ui_origin_charge_animation\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory\n        android:key=\"prefs_key_system_ui_monet\"\n        android:title=\"@string/system_ui_monet_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_monet_overlay_custom\"\n            android:summary=\"@string/system_ui_monet_overlay_custom_desc\"\n            android:title=\"@string/system_ui_monet_overlay_custom\" />\n\n        <ColorPickerPreference\n            android:defaultValue=\"-1\"\n            android:dependency=\"prefs_key_system_ui_monet_overlay_custom\"\n            android:key=\"prefs_key_system_ui_monet_overlay_custom_color\"\n            android:title=\"@string/system_ui_monet_overlay_custom_color\"\n            app:showAlphaSlider=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_notification_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_other_notification_fix\"\n            android:title=\"@string/system_ui_other_notification_fix\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_another_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_notification_freeform\"\n            android:summary=\"@string/system_ui_notification_freeform_desc\"\n            android:title=\"@string/system_ui_notification_freeform\" />\n\n        <SwitchPreference\n            android:title=\"@string/system_ui_plugin_enable_volume_blur\"\n            android:summary=\"@string/system_ui_plugin_enable_volume_blur_desc\"\n            android:key=\"prefs_key_system_ui_plugin_enable_volume_blur\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory app:isPreferenceVisible=\"false\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_volume_timer\"\n            android:title=\"@string/system_ui_volume_timer\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_qs_label\"\n            android:title=\"@string/system_ui_qs_label\" />\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.IconManageSettings\"\n        android:title=\"@string/system_ui_statusbar_iconmanage_title\" />\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.NetworkSpeedIndicatorSettings\"\n        android:title=\"@string/system_ui_statusbar_network_speed_indicator_title\" />\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.ClockIndicatorSettings\"\n        android:title=\"@string/system_ui_statusbar_clock_title\" />\n\n    <Preference\n        android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.BatteryDetailIndicatorSettings\"\n        android:key=\"prefs_key_system_ui_status_bar_device\"\n        android:title=\"@string/system_ui_statusbar_device_title\" />\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_layout_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"pref_key_system_ui_statusbar_layout_compatibility_mode\"\n            android:summary=\"@string/system_ui_statusbar_layout_compatibility_mode_desc\"\n            android:title=\"@string/system_ui_statusbar_layout_compatibility_mode_title\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_statusbar_layout_mode\"\n            android:title=\"@string/system_ui_statusbar_layout_mode_title\"\n            app:entries=\"@array/system_ui_status_bar_layout_mode\"\n            app:entryValues=\"@array/system_ui_status_bar_layout_mode_value\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_other_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_double_tap_to_sleep\"\n            android:title=\"@string/system_ui_status_bar_double_tap_to_sleep\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_hide_icon\"\n            android:title=\"@string/system_ui_status_bar_hide_icon\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_battery_indicator.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <SwitchPreference\n        android:key=\"prefs_key_system_ui_status_bar_battery_indicator_enable\"\n        android:title=\"@string/enable\"\n        android:defaultValue=\"false\" />\n\n    <PreferenceCategory android:dependency=\"prefs_key_system_ui_status_bar_battery_indicator_enable\">\n\n        <SwitchPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_centered\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_centered\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_rounded\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_rounded\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_limitvis\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_limitvis\"\n            android:defaultValue=\"false\" />\n\n        <DropDownPreference\n            android:title=\"@string/system_ui_status_bar_battery_indicator_align\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_align\"\n            app:entries=\"@array/battery_indicator_align\"\n            app:entryValues=\"@array/battery_indicator_align_value\"\n            android:defaultValue=\"0\" />\n\n        <DropDownPreference\n            android:title=\"@string/system_ui_status_bar_battery_indicator_color\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_color\"\n            app:entries=\"@array/battery_indicator_color\"\n            app:entryValues=\"@array/battery_indicator_color_value\"\n            android:defaultValue=\"0\" />\n\n        <ColorPickerPreference\n            android:defaultValue=\"0xFF00FF00\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_color_full_power\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_color_full_power\" />\n\n        <ColorPickerPreference\n            android:defaultValue=\"0xFFFF0000\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_color_low_power\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_color_low_power\" />\n\n        <ColorPickerPreference\n            android:defaultValue=\"0xFFFFFF00\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_color_power_saving\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_color_power_saving\" />\n\n        <ColorPickerPreference\n            android:defaultValue=\"0xFFFFFF00\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_color_power_charging\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_color_power_charging\" />\n\n        <SeekBarPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_height\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_height\"\n            android:defaultValue=\"5\"\n            app:maxValue=\"15\"\n            app:showSeekBarValue=\"true\"\n            android:format=\"%d px\" />\n\n        <SeekBarPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_padding\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_padding\"\n            android:defaultValue=\"0\"\n            app:maxValue=\"33\"\n            app:showSeekBarValue=\"true\"\n            android:format=\"%d%%\" />\n\n        <SeekBarPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_alpha\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_alpha\"\n            android:defaultValue=\"0\"\n            app:maxValue=\"100\"\n            app:stepValue=\"5\"\n            app:showSeekBarValue=\"true\"\n            android:format=\"%d%%\" />\n\n        <SeekBarPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_glow\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_glow\"\n            android:defaultValue=\"0\"\n            app:maxValue=\"100\"\n            app:showSeekBarValue=\"true\"\n            android:format=\"%d%%\" />\n\n        <SeekBarPreference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_low_level\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_low_level\"\n            android:defaultValue=\"20\"\n            app:maxValue=\"50\"\n            app:stepValue=\"5\"\n            app:showSeekBarValue=\"true\"\n            android:format=\"%d%%\" />\n\n        <Preference\n            android:key=\"prefs_key_system_ui_status_bar_battery_indicator_test\"\n            android:title=\"@string/system_ui_status_bar_battery_indicator_test\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_battery_styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_change_location\"\n            android:title=\"@string/system_ui_status_bar_battery_style_change_location_title\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/system_ui_statusbar_network_speed_enable_custom\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_bold\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/system_ui_statusbar_indicator_bold\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"15\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_font_size\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/system_ui_status_bar_battery_style_font_size\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"40\"\n            app:minValue=\"15\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"15\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_font_mark_size\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/system_ui_status_bar_battery_style_font_mark_size\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"40\"\n            app:minValue=\"15\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_left_margin\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/left_margin\"\n            app:maxValue=\"10\"\n            app:minValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_right_margin\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/right_margin\"\n            app:maxValue=\"10\"\n            app:minValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"12\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_vertical_offset\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/vertical_offset\"\n            app:maxValue=\"24\"\n            app:minValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:stepValue=\"1\"\n            app:negativeShift=\"12\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"27\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_style_vertical_offset_mark\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_style_enable_custom\"\n            android:title=\"@string/system_ui_status_bar_battery_style_vertical_offset\"\n            app:maxValue=\"27\"\n            app:minValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:stepValue=\"1\"\n            app:negativeShift=\"13\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_clock_indicator.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_bold\"\n            android:title=\"@string/system_ui_statusbar_indicator_bold\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_mode\"\n            android:title=\"@string/system_ui_statusbar_clock_mode\"\n            app:entries=\"@array/system_ui_status_bar_clock_mode\"\n            app:entryValues=\"@array/system_ui_status_bar_clock_mode_value\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_clock_vertical_offset\"\n            android:title=\"@string/vertical_offset\"\n            android:defaultValue=\"12\"\n            app:format=\"%s dp\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"24\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\"\n            app:negativeShift=\"12\"\n            app:displayDividerValue=\"2\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory\n        android:key=\"prefs_key_system_ui_statusbar_clock_default\"\n        android:title=\"@string/system_ui_statusbar_indicator_expand_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_year\"\n            android:title=\"@string/system_ui_statusbar_clock_year\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_month\"\n            android:title=\"@string/system_ui_statusbar_clock_month\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_date\"\n            android:title=\"@string/system_ui_statusbar_clock_date\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_week\"\n            android:title=\"@string/system_ui_statusbar_clock_week\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_hour_cn\"\n            android:title=\"@string/system_ui_statusbar_clock_hour_cn\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_period\"\n            android:title=\"@string/system_ui_statusbar_clock_period\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_second\"\n            android:title=\"@string/system_ui_statusbar_clock_second\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_hide_space\"\n            android:title=\"@string/system_ui_statusbar_clock_hide_space\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:disableDependentsState=\"true\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_double\"\n            android:title=\"@string/system_ui_statusbar_clock_double\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_double_mode\"\n            android:title=\"@string/system_ui_statusbar_clock_double_mode_title\"\n            app:entries=\"@array/system_ui_status_bar_clock_double_mode\"\n            app:entryValues=\"@array/system_ui_status_bar_clock_double_mode_value\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_clock_size\"\n            android:dependency=\"prefs_key_system_ui_statusbar_clock_double\"\n            android:title=\"@string/system_ui_statusbar_clock_size\"\n            android:defaultValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"20\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_clock_double_size\"\n            android:title=\"@string/system_ui_statusbar_clock_double_size\"\n            android:defaultValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"16\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory\n        android:key=\"prefs_key_system_ui_statusbar_clock_geek\"\n        android:title=\"@string/system_ui_statusbar_indicator_expand_title\">\n\n        <EditTextPreference\n            android:defaultValue=\"HH:mm:ss\"\n            android:inputType=\"textMultiLine\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_editor\"\n            android:title=\"@string/system_ui_statusbar_clock_editor\" />\n\n        <Preference android:title=\"@string/system_ui_statusbar_clock_desc\">\n            <intent\n                android:action=\"android.intent.action.VIEW\"\n                android:data=\"https://zhuti.designer.xiaomi.com/docs/grammar/#时间日期\" />\n        </Preference>\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_statusbar_clock_double_mode_geek\"\n            android:title=\"@string/system_ui_statusbar_clock_double_mode_title\"\n            app:entries=\"@array/system_ui_status_bar_clock_double_mode\"\n            app:entryValues=\"@array/system_ui_status_bar_clock_double_mode_value\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_clock_size_geek\"\n            android:title=\"@string/system_ui_statusbar_clock_size\"\n            android:defaultValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"20\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_doubleline_network.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_system_ui_statusbar_network_icon_enable\"\n        android:title=\"@string/enable\" />\n\n    <DropDownPreference\n        android:defaultValue=\"0\"\n        android:dependency=\"prefs_key_system_ui_statusbar_network_icon_enable\"\n        android:key=\"prefs_key_system_ui_status_mobile_network_icon_style\"\n        android:title=\"@string/system_ui_statusbar_iconmanage_mobile_network_icon_style\"\n        app:entries=\"@array/system_ui_status_bar_network_icon_style\"\n        app:entryValues=\"@array/system_ui_status_bar_network_icon_style_value\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"10\"\n        android:dependency=\"prefs_key_system_ui_statusbar_network_icon_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_network_icon_size\"\n        android:title=\"@string/system_ui_statusbar_iconmanage_mobile_network_icon_size\"\n        app:defaultValueText=\"@string/array_default\"\n        app:displayDividerValue=\"10\"\n        app:format=\"%s X\"\n        app:maxValue=\"16\"\n        app:minValue=\"6\"\n        app:stepValue=\"1\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"0\"\n        android:dependency=\"prefs_key_system_ui_statusbar_network_icon_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_network_icon_left_margin\"\n        android:title=\"@string/left_margin\"\n        app:defaultValueText=\"@string/array_default\"\n        app:displayDividerValue=\"2\"\n        app:format=\"%s dp\"\n        app:maxValue=\"10\"\n        app:minValue=\"0\"\n        app:stepValue=\"1\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"0\"\n        android:dependency=\"prefs_key_system_ui_statusbar_network_icon_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_network_icon_right_margin\"\n        android:title=\"@string/right_margin\"\n        app:defaultValueText=\"@string/array_default\"\n        app:displayDividerValue=\"2\"\n        app:format=\"%s dp\"\n        app:maxValue=\"10\"\n        app:minValue=\"0\"\n        app:stepValue=\"1\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"8\"\n        android:dependency=\"prefs_key_system_ui_statusbar_network_icon_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_network_icon_vertical_offset\"\n        android:title=\"@string/vertical_offset\"\n        app:defaultValueText=\"@string/array_default\"\n        app:displayDividerValue=\"2\"\n        app:format=\"%s dp\"\n        app:maxValue=\"16\"\n        app:minValue=\"0\"\n        app:stepValue=\"1\"\n        app:negativeShift=\"8\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_hardware_detail_indicator.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_indicator_battery_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:title=\"@string/enable\" />\n\n        <DropDownPreference\n            android:defaultValue=\"1\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_show\"\n            android:title=\"@string/system_ui_statusbar_battery_show\"\n            app:entries=\"@array/system_ui_status_bar_battery_show\"\n            app:entryValues=\"@array/system_ui_status_bar_battery_show_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_disable\"\n            android:title=\"@string/system_ui_statusbar_battery_disable\"\n            app:entries=\"@array/system_ui_status_bar_battery_disable\"\n            app:entryValues=\"@array/system_ui_status_bar_battery_disable_value\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_right_show\"\n            android:title=\"@string/system_ui_statusbar_battery_right_show\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_electric_current\"\n            android:title=\"@string/system_ui_statusbar_battery_electric_current\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_line_show\"\n            android:title=\"@string/system_ui_statusbar_battery_line_show\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_opposite\"\n            android:title=\"@string/system_ui_statusbar_battery_opposite\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_only_changing_show\"\n            android:title=\"@string/system_ui_statusbar_battery_only_changing_show\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_bold\"\n            android:title=\"@string/system_ui_statusbar_indicator_bold\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"13\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_size\"\n            android:title=\"@string/system_ui_statusbar_battery_size\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"40\"\n            app:minValue=\"8\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"2\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_update_spacing\"\n            android:title=\"@string/system_ui_statusbar_battery_update_spacing\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d s\"\n            app:maxValue=\"10\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\" />\n\n        <DropDownPreference\n            android:defaultValue=\"1\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_align\"\n            android:title=\"@string/horizontal_alignment\"\n            app:entries=\"@array/system_ui_status_bar_horizontal_align\"\n            app:entryValues=\"@array/system_ui_status_bar_horizontal_align_value\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"10\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_fixedcontent_width\"\n            android:summary=\"@string/system_ui_statusbar_indicator_fixedcontent_width_desc\"\n            android:title=\"@string/system_ui_statusbar_indicator_fixedcontent_width\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s dp\"\n            app:maxValue=\"120\"\n            app:minValue=\"10\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"4\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_left_margin\"\n            android:title=\"@string/left_margin\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"10\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"4\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_right_margin\"\n            android:title=\"@string/right_margin\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"10\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"8\"\n            android:dependency=\"prefs_key_system_ui_statusbar_battery_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_battery_vertical_offset\"\n            android:title=\"@string/vertical_offset\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"16\"\n            app:minValue=\"0\"\n            app:negativeShift=\"8\"\n            app:stepValue=\"1\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_indicator_temperature_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:title=\"@string/enable\" />\n\n        <DropDownPreference\n            android:defaultValue=\"1\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_show\"\n            android:title=\"@string/system_ui_statusbar_battery_show\"\n            app:entries=\"@array/system_ui_status_bar_device_temp_details\"\n            app:entryValues=\"@array/system_ui_status_bar_battery_show_value\" />\n\n        <EditTextPreference\n            android:defaultValue=\"0\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_fix_cpu_get\"\n            android:summary=\"@string/system_ui_statusbar_temp_fix_cpu_desc\"\n            android:title=\"@string/system_ui_statusbar_temp_fix_cpu\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_decimal_places\"\n            android:title=\"@string/system_ui_statusbar_temp_decimal_places\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_disable\"\n            android:title=\"@string/system_ui_statusbar_battery_disable\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_right_show\"\n            android:title=\"@string/system_ui_statusbar_battery_right_show\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_line_show\"\n            android:title=\"@string/system_ui_statusbar_battery_line_show\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_opposite\"\n            android:title=\"@string/system_ui_statusbar_battery_opposite\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_bold\"\n            android:title=\"@string/system_ui_statusbar_indicator_bold\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"13\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_size\"\n            android:title=\"@string/system_ui_statusbar_battery_size\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"40\"\n            app:minValue=\"8\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"2\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_update_spacing\"\n            android:title=\"@string/system_ui_statusbar_battery_update_spacing\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%d s\"\n            app:maxValue=\"10\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\" />\n\n        <DropDownPreference\n            android:defaultValue=\"1\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_align\"\n            android:title=\"@string/horizontal_alignment\"\n            app:entries=\"@array/system_ui_status_bar_horizontal_align\"\n            app:entryValues=\"@array/system_ui_status_bar_horizontal_align_value\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"10\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_fixedcontent_width\"\n            android:summary=\"@string/system_ui_statusbar_indicator_fixedcontent_width_desc\"\n            android:title=\"@string/system_ui_statusbar_indicator_fixedcontent_width\"\n            app:defaultValueText=\"@string/array_default\"\n            app:format=\"%s dp\"\n            app:maxValue=\"120\"\n            app:minValue=\"10\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"4\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_left_margin\"\n            android:title=\"@string/left_margin\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"10\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"4\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_right_margin\"\n            android:title=\"@string/right_margin\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"10\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\" />\n\n        <SeekBarPreferenceEx\n            android:defaultValue=\"8\"\n            android:dependency=\"prefs_key_system_ui_statusbar_temp_enable\"\n            android:key=\"prefs_key_system_ui_statusbar_temp_vertical_offset\"\n            android:title=\"@string/vertical_offset\"\n            app:defaultValueText=\"@string/array_default\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%s dp\"\n            app:maxValue=\"16\"\n            app:minValue=\"0\"\n            app:negativeShift=\"8\"\n            app:stepValue=\"1\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_icon_manage.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_wifi_title\">\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_wifi\"\n            android:title=\"@string/system_ui_status_bar_icon_wifi\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_wifi_standard\"\n            android:title=\"@string/system_ui_status_bar_icon_wifi_standard\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_hotspot\"\n            android:title=\"@string/system_ui_status_bar_icon_hotspot\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_wifi_slave\"\n            android:title=\"@string/system_ui_status_bar_icon_wifi_slave\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_wifi_network_indicator\"\n            android:title=\"@string/system_ui_status_bar_icon_wifi_network_indicator\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_bluetooth_title\">\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_bluetooth\"\n            android:title=\"@string/system_ui_status_bar_icon_bluetooth\"\n            app:entries=\"@array/status_bar_icon_bluetooth\"\n            app:entryValues=\"@array/status_bar_icon_bluetooth_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_bluetooth_battery\"\n            android:title=\"@string/system_ui_status_bar_icon_bluetooth_battery\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n    </PreferenceCategory>\n\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_mobile_title\">\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_new_hd\"\n            android:title=\"@string/system_ui_status_bar_icon_new_hd\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_small_hd\"\n            android:title=\"@string/system_ui_status_bar_icon_small_hd\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_big_hd\"\n            android:title=\"@string/system_ui_status_bar_icon_big_hd\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_mobile_network_signal_no_card\"\n            android:title=\"@string/system_ui_status_bar_icon_mobile_network_signal_no_card\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_mobile_network_signal_card_1\"\n            android:title=\"@string/system_ui_status_bar_icon_mobile_network_signal_card_1\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_mobile_network_signal_card_2\"\n            android:title=\"@string/system_ui_status_bar_icon_mobile_network_signal_card_2\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_airplane\"\n            android:title=\"@string/system_ui_status_bar_icon_airplane\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_vowifi\"\n            android:title=\"@string/system_ui_status_bar_icon_vowifi\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_big_mobile_network_type\"\n            android:title=\"@string/system_ui_status_bar_big_mobile_network_type\"\n            app:isPreferenceVisible=\"false\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_use_new_hd\"\n            android:summary=\"@string/system_ui_status_bar_use_new_hd_summary\"\n            android:title=\"@string/system_ui_status_bar_use_new_hd\" />\n\n        <Preference android:title=\"@string/system_ui_status_bar_mobile_type_single_title\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.MobileNetworkTypeSettings\" />\n\n        <Preference android:title=\"@string/system_ui_statusbar_iconmanage_mobile_network_title\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.DoubleLineNetworkSettings\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_location_title\">\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_location\"\n            android:title=\"@string/system_ui_status_bar_icon_location\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_status_title\">\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_headset\"\n            android:title=\"@string/system_ui_status_bar_icon_headset\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_alarm_clock\"\n            android:title=\"@string/system_ui_status_bar_icon_alarm_clock\"\n            app:entries=\"@array/status_bar_icon_alarm_clock\"\n            app:entryValues=\"@array/status_bar_icon_alarm_clock_value\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_status_bar_icon_alarm_clock_n\"\n            android:title=\"@string/system_ui_status_bar_icon_alarm_clock_n\"\n            android:defaultValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"48\"\n            app:minValue=\"0\"\n            app:stepValue=\"1\"\n            app:format=\"@string/system_ui_status_bar_icon_alarm_clock_n_format\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_nfc\"\n            android:title=\"@string/system_ui_status_bar_icon_nfc\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_vpn\"\n            android:title=\"@string/system_ui_status_bar_icon_vpn\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_volume\"\n            android:title=\"@string/system_ui_status_bar_icon_volume\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_data_saver\"\n            android:title=\"@string/system_ui_status_bar_icon_data_saver\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_system_ui_status_bar_icon_zen\"\n            android:title=\"@string/system_ui_status_bar_icon_zen\"\n            app:entries=\"@array/status_bar_icon_mode\"\n            app:entryValues=\"@array/status_bar_icon_mode_value\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_hide_icon_stealth\"\n            android:title=\"@string/system_ui_status_bar_icon_stealth\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_notify_title\">\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_notification_dots_maximum_enable\"\n            android:title=\"@string/system_ui_status_bar_notification_dots_maximum\" />\n\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_system_ui_status_bar_notification_dots_maximum_enable\"\n            android:key=\"prefs_key_system_ui_status_bar_notification_dots_maximum\"\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            app:dialogTitle=\"@string/system_ui_status_bar_notification_dots_maximum\"\n            android:defaultValue=\"3\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"5\"\n            app:stepValue=\"1\"\n            app:format=\"%s\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_notification_icon_maximum_enable\"\n            android:title=\"@string/system_ui_status_bar_notification_icon_maximum\" />\n\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_system_ui_status_bar_notification_icon_maximum_enable\"\n            android:key=\"prefs_key_system_ui_status_bar_notification_icon_maximum\"\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            app:dialogTitle=\"@string/system_ui_status_bar_notification_icon_maximum\"\n            android:defaultValue=\"3\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"15\"\n            app:stepValue=\"1\"\n            app:format=\"%s\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_battery_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:disableDependentsState=\"true\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_percent\"\n            android:title=\"@string/system_ui_status_bar_battery_percent\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_status_bar_battery_percent\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_percent_mark\"\n            android:title=\"@string/system_ui_status_bar_battery_percent_mark\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_charging\"\n            android:title=\"@string/system_ui_status_bar_battery_charging\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_battery_icon\"\n            android:title=\"@string/system_ui_status_bar_battery_icon\" />\n\n        <Preference\n            android:title=\"@string/system_ui_status_bar_battery_style_title\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.BatteryStyleSettings\" />\n\n        <Preference\n            android:title=\"@string/system_ui_status_bar_battery_indicator_title\"\n            app:isPreferenceVisible=\"false\"\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.systemui.statusbar.BatteryIndicatorSettings\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_call_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_hide_icon_mute\"\n            android:title=\"@string/system_ui_status_bar_icon_mute\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_hide_icon_speakerphone\"\n            android:title=\"@string/system_ui_status_bar_icon_speakerphone\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_hide_icon_call_record\"\n            android:title=\"@string/system_ui_status_bar_icon_call_record\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_left_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_wifi_at_left\"\n            android:title=\"@string/system_ui_status_bar_wifi_at_left\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_mobile_network_at_left\"\n            android:title=\"@string/system_ui_status_bar_mobile_network_at_left\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_iconmanage_right_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_network_speed_at_right\"\n            android:title=\"@string/system_ui_status_bar_network_speed_at_right\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_alarm_clock_at_right\"\n            android:title=\"@string/system_ui_status_bar_icon_alarm_clock\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_nfc_at_right\"\n            android:title=\"@string/system_ui_status_bar_icon_nfc\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_headset_at_right\"\n            android:title=\"@string/system_ui_status_bar_icon_headset\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_volume_at_right\"\n            android:title=\"@string/system_ui_status_bar_volume_at_right\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_zen_at_right\"\n            android:title=\"@string/system_ui_status_bar_icon_zen\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/home_other\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_swap_wifi_and_mobile_network\"\n            android:title=\"@string/system_ui_status_bar_swap_wifi_and_mobile_network\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_mobile_network_type.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <DropDownPreference\n        android:defaultValue=\"0\"\n        android:key=\"prefs_key_system_ui_status_bar_icon_mobile_network_type\"\n        android:title=\"@string/system_ui_status_bar_icon_mobile_network_type\"\n        app:entries=\"@array/status_bar_icon_mobile_network_type\"\n        app:entryValues=\"@array/status_bar_icon_mobile_network_type_value\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_system_ui_status_bar_mobile_indicator\"\n        android:title=\"@string/system_ui_status_bar_mobile_indicator\" />\n\n    <EditTextPreference\n        android:defaultValue=\"\"\n        android:key=\"prefs_key_system_ui_status_bar_mobile_type_custom\"\n        android:title=\"@string/system_ui_status_bar_mobile_type_custom\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:title=\"@string/system_ui_status_bar_mobile_type_single\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:dependency=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_left\"\n        android:title=\"@string/system_ui_status_bar_mobile_type_left\" />\n\n    <SwitchPreference\n        app:isPreferenceVisible=\"false\"\n        android:defaultValue=\"false\"\n        android:dependency=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_only_show_network\"\n        android:title=\"@string/system_ui_status_bar_mobile_type_only_show_network\" />\n\n    <SwitchPreference\n        android:defaultValue=\"false\"\n        android:dependency=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_bold\"\n        android:title=\"@string/system_ui_statusbar_indicator_bold\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"27\"\n        android:dependency=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_font_size\"\n        android:title=\"@string/system_ui_statusbar_mobile_type_font_size\"\n        app:displayDividerValue=\"2\"\n        app:format=\"%s dp\"\n        app:maxValue=\"40\"\n        app:minValue=\"18\"\n        app:stepValue=\"1\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"7\"\n        android:dependency=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_left_margin\"\n        android:title=\"@string/left_margin\"\n        app:defaultValueText=\"@string/array_default\"\n        app:displayDividerValue=\"2\"\n        app:format=\"%s dp\"\n        app:maxValue=\"16\"\n        app:minValue=\"0\"\n        app:stepValue=\"1\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"0\"\n        android:dependency=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_right_margin\"\n        android:title=\"@string/right_margin\"\n        app:defaultValueText=\"@string/array_default\"\n        app:displayDividerValue=\"2\"\n        app:format=\"%s dp\"\n        app:maxValue=\"16\"\n        app:minValue=\"0\"\n        app:stepValue=\"1\" />\n\n    <SeekBarPreferenceEx\n        android:defaultValue=\"8\"\n        android:dependency=\"prefs_key_system_ui_statusbar_mobile_type_enable\"\n        android:key=\"prefs_key_system_ui_statusbar_mobile_type_vertical_offset\"\n        android:title=\"@string/vertical_offset\"\n        app:defaultValueText=\"@string/array_default\"\n        app:displayDividerValue=\"2\"\n        app:format=\"%s dp\"\n        app:maxValue=\"16\"\n        app:minValue=\"0\"\n        app:stepValue=\"1\"\n        app:negativeShift=\"8\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/system_ui_status_bar_network_speed_indicator.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_indicator_default_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_bold\"\n            android:title=\"@string/system_ui_statusbar_indicator_bold\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_font_size_enable\"\n            android:title=\"@string/system_ui_statusbar_network_speed_font_size\" />\n\n        <SeekBarPreferenceEx\n            android:layout=\"@layout/preference_seekbar_no_padding\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_font_size\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_font_size_enable\"\n            android:defaultValue=\"13\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"40\"\n            app:minValue=\"8\"\n            app:stepValue=\"1\"\n            app:format=\"%s dp\"\n            app:displayDividerValue=\"2\"\n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_sec_unit\"\n            android:title=\"@string/system_ui_statusbar_network_speed_sec_unit\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_status_bar_no_netspeed_separator\"\n            android:summary=\"@string/system_ui_status_bar_no_netspeed_separator_desc\"\n            android:title=\"@string/system_ui_status_bar_no_netspeed_separator_title\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_update_spacing\"\n            android:title=\"@string/system_ui_statusbar_network_speed_update_spacing\"\n            android:defaultValue=\"3\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"10\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:format=\"%d s\"\n            app:showSeekBarValue=\"true\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/system_ui_statusbar_indicator_expand_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:title=\"@string/system_ui_statusbar_network_speed_enable_custom\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_hide\"\n            android:summary=\"@string/system_ui_statusbar_network_speed_hide_desc\"\n            android:title=\"@string/system_ui_statusbar_network_speed_hide\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_hide\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_hide_all\"\n            android:title=\"@string/system_ui_statusbar_network_speed_hide_all\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_hide_slow\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:title=\"@string/system_ui_statusbar_network_speed_hide_slow\"\n            android:summary=\"@string/system_ui_statusbar_network_speed_hide_slow_desc\"\n            android:defaultValue=\"64\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"1024\"\n            app:minValue=\"1\"\n            app:stepValue=\"1\"\n            app:format=\"%d KB/s\"\n            app:showSeekBarValue=\"true\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:disableDependentsState=\"true\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_fakedualrow\"\n            android:title=\"@string/system_ui_statusbar_network_speed_fakedualrow\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_fakedualrow\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_show_up_down\"\n            android:summary=\"@string/system_ui_statusbar_network_speed_detailed_desc\"\n            android:title=\"@string/system_ui_statusbar_network_speed_show_up_down\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_show_up_down\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_detailed\"\n            android:title=\"@string/system_ui_statusbar_network_speed_detailed\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_show_up_down\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_swap_places\"\n            android:title=\"@string/system_ui_statusbar_network_speed_swap_places\" />\n\n        <DropDownPreference\n            android:defaultValue=\"2\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_show_up_down\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_icon\"\n            android:title=\"@string/system_ui_statusbar_network_speed_icon\"\n            app:entries=\"@array/system_ui_status_bar_network_icon\"\n            app:entryValues=\"@array/system_ui_status_bar_network_icon_value\" />\n\n        <DropDownPreference\n            android:defaultValue=\"1\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_align\"\n            android:title=\"@string/horizontal_alignment\"\n            app:entries=\"@array/system_ui_status_bar_horizontal_align\"\n            app:entryValues=\"@array/system_ui_status_bar_horizontal_align_value\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_fixedcontent_width\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:title=\"@string/system_ui_statusbar_indicator_fixedcontent_width\"\n            android:summary=\"@string/system_ui_statusbar_indicator_fixedcontent_width_desc\"\n            android:defaultValue=\"10\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"120\"\n            app:minValue=\"10\"\n            app:stepValue=\"1\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_left_margin\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:title=\"@string/left_margin\"\n            android:defaultValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"10\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_right_margin\"\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:title=\"@string/right_margin\"\n            android:defaultValue=\"0\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"10\"\n            app:stepValue=\"1\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n        <SeekBarPreferenceEx\n            android:dependency=\"prefs_key_system_ui_statusbar_network_speed_enable_custom\"\n            android:key=\"prefs_key_system_ui_statusbar_network_speed_vertical_offset\"\n            android:title=\"@string/vertical_offset\"\n            android:defaultValue=\"8\"\n            app:defaultValueText=\"@string/array_default\"\n            app:maxValue=\"16\"\n            app:stepValue=\"1\"\n            app:negativeShift=\"8\"\n            app:displayDividerValue=\"2\"\n            app:format=\"%d dp\"\n            app:showSeekBarValue=\"true\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>\n"
  },
  {
    "path": "app/src/main/res/xml/theme_manager.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <PreferenceCategory\n        android:key=\"prefs_key_theme_manager_version_code_modify_cat\"\n        app:isPreferenceVisible=\"false\">\n\n        <SwitchPreference\n            android:title=\"@string/theme_manager_version_code_modify\"\n            android:key=\"prefs_key_theme_manager_version_code_modify\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/theme_manager_diable_ads\"\n            android:summary=\"@string/theme_manager_diable_ads_desc\"\n            android:key=\"prefs_key_various_theme_diable_ads\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/theme_manager_crack\"\n            android:key=\"prefs_key_various_theme_crack\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory>\n\n        <SwitchPreference\n            android:title=\"@string/theme_manager_enable_pad_theme\"\n            android:key=\"prefs_key_various_theme_enable_pad_theme\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/theme_manager_enable_fold_theme\"\n            android:key=\"prefs_key_various_theme_enable_fold_theme\"\n            android:defaultValue=\"false\" />\n\n    </PreferenceCategory>\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/tsmclient.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <SwitchPreference\n        android:title=\"@string/tsmclient_auto_nfc\"\n        android:summary=\"@string/tsmclient_auto_nfc_desc\"\n        android:key=\"prefs_key_tsmclient_auto_nfc\"\n        android:defaultValue=\"false\" />\n\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/updater.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <SwitchPreference\n        android:title=\"@string/updater_fuck_vab\"\n        android:summary=\"@string/updater_fuck_vab_desc\"\n        android:key=\"prefs_key_updater_fuck_vab\"\n        android:defaultValue=\"false\" />\n\n    <DropDownPreference\n        android:key=\"prefs_key_updater_version_mode\"\n        android:title=\"@string/updater_version_mode\"\n        android:defaultValue=\"1\"\n        app:entries=\"@array/updater_version_mode\"\n        app:entryValues=\"@array/updater_version_mode_value\" />\n\n    <EditTextPreference\n        android:defaultValue=\"V816\"\n        android:title=\"@string/updater_big_version\"\n        android:summary=\"@string/updater_big_version_desc\"\n        android:key=\"prefs_key_various_updater_big_version\" />\n\n    <EditTextPreference\n        android:title=\"@string/updater_miui_version\"\n        android:summary=\"@string/updater_miui_version_desc\"\n        android:key=\"prefs_key_various_updater_miui_version\" />\n\n    <EditTextPreference\n        android:title=\"@string/updater_device\"\n        android:summary=\"@string/updater_device_desc\"\n        android:key=\"prefs_key_updater_device\"\n        app:isPreferenceVisible=\"true\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/various.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <Preference\n            android:enabled=\"false\"\n            android:title=\"@string/various_location_simulation_title\"\n            app:isPreferenceVisible=\"false\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.various.AlertDialogSettings\"\n            android:key=\"prefs_key_various_dialog\"\n            android:title=\"@string/various_dialog_title\"\n            app:isPreferenceVisible=\"true\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.various.AOSPSettings\"\n            android:key=\"prefs_key_various_open_aosp_something\"\n            android:summary=\"@string/various_open_aosp_something_desc\"\n            android:title=\"@string/various_open_aosp_something_title\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.various.MiPadSettings\"\n            android:key=\"prefs_key_various_mipad\"\n            android:title=\"@string/various_mipad_title\"\n            app:isPreferenceVisible=\"true\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/various_super_clipboard_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_super_clipboard_enable\"\n            android:summary=\"@string/various_super_clipboard_summary\"\n            android:title=\"@string/various_unlock_super_clipboard\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_various_super_clipboard_enable\"\n            android:key=\"prefs_key_various_super_clipboard_gallery\"\n            android:summary=\"@string/various_super_clipboard_picture_desc\"\n            android:title=\"@string/gallery\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_various_super_clipboard_enable\"\n            android:key=\"prefs_key_various_super_clipboard_notes\"\n            android:title=\"@string/notes\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_various_super_clipboard_enable\"\n            android:key=\"prefs_key_various_super_clipboard_creation\"\n            android:title=\"@string/creation\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_various_super_clipboard_enable\"\n            android:key=\"prefs_key_various_super_clipboard_screenshot\"\n            android:summary=\"@string/various_super_clipboard_picture_desc\"\n            android:title=\"@string/screenshot\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_various_super_clipboard_enable\"\n            android:key=\"prefs_key_various_super_clipboard_mms\"\n            android:title=\"@string/mms\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_various_super_clipboard_enable\"\n            android:key=\"prefs_key_various_super_clipboard_browser\"\n            android:summary=\"@string/various_super_clipboard_files_desc\"\n            android:title=\"@string/browser\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:dependency=\"prefs_key_various_super_clipboard_enable\"\n            android:key=\"prefs_key_various_super_clipboard_fileexplorer\"\n            android:summary=\"@string/various_super_clipboard_files_desc\"\n            android:title=\"@string/fileexplorer\" />\n\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/various\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_settings_notfication_importance\"\n            android:title=\"@string/settings_notfication_importance\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_no_overscroll\"\n            android:title=\"@string/various_no_overscroll\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_disable_bluetooth_restrict\"\n            android:title=\"@string/various_disable_bluetooth_restrict\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_disable_access_device_logs\"\n            android:title=\"@string/various_disable_access_device_logs\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_unlock_ime\"\n            android:summary=\"@string/various_unlock_ime_desc\"\n            android:title=\"@string/various_unlock_ime\" />\n\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_disable_folder_cantuse\"\n            android:title=\"@string/various_disable_folder_cantuse\" />\n\n        <DropDownPreference\n            android:defaultValue=\"0\"\n            android:key=\"prefs_key_various_collapse_miui_title\"\n            android:summary=\"@string/various_collapse_miui_title_desc\"\n            android:title=\"@string/various_collapse_miui_title\"\n            app:entries=\"@array/collapse_miui_title\"\n            app:entryValues=\"@array/collapse_miui_title_value\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/various_aosp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <PreferenceCategory>\n        <Preference\n            android:title=\"@string/various_open_aosp_extremely_dark_title\">\n            <intent\n                android:targetPackage=\"com.android.settings\"\n                android:targetClass=\"com.android.settings.Settings$ReduceBrightColorsSettingsActivity\" />\n        </Preference>\n        \n        <Preference\n            android:title=\"@string/various_open_aosp_battery_title\">\n            <intent\n                android:targetPackage=\"com.android.settings\"\n                android:targetClass=\"com.android.settings.Settings$HighPowerApplicationsActivity\" />\n        </Preference>\n        \n        <Preference\n            android:title=\"@string/various_open_aosp_notification_title\">\n            <intent\n                android:targetPackage=\"com.android.settings\"\n                android:targetClass=\"com.android.settings.Settings$ConfigureNotificationSettingsActivity\" />\n        </Preference>\n        \n        <Preference\n            android:title=\"@string/various_open_aosp_app_manage_title\">\n            <intent\n                android:targetPackage=\"com.android.settings\"\n                android:targetClass=\"com.android.settings.applications.ManageApplications\" />\n        </Preference>\n        \n        <Preference\n            android:title=\"@string/various_open_aosp_language_title\">\n            <intent\n                android:targetPackage=\"com.android.settings\"\n                android:targetClass=\"com.android.settings.LanguageSettings\" />\n        </Preference>\n        \n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/various_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <DropDownPreference\n        android:defaultValue=\"0\"\n        android:key=\"prefs_key_various_dialog_gravity\"\n        android:title=\"@string/various_dialog_gravity\"\n        app:entries=\"@array/dialog_gravity\"\n        app:entryValues=\"@array/dialog_gravity_value\" />\n\n    <SeekBarPreferenceEx\n        android:key=\"prefs_key_various_dialog_margin_horizontal\"        \n        android:title=\"@string/various_dialog_margin_horizontal\"\n        android:summary=\"@string/various_dialog_margin_horizontal_desc\"\n        android:defaultValue=\"0\"\n        app:defaultValueText=\"@string/array_default\"\n        app:maxValue=\"100\"\n        app:format=\"%d dp\"                \n        app:showSeekBarValue=\"true\" />\n\n    <SeekBarPreferenceEx\n        android:key=\"prefs_key_various_dialog_margin_bottom\"\n        android:title=\"@string/various_dialog_margin_bottom\"\n        android:summary=\"@string/various_dialog_margin_bottom_desc\"\n        android:defaultValue=\"0\"\n        app:format=\"%d dp\"      \n        app:maxValue=\"100\"\n        app:showSeekBarValue=\"true\" />\n\n    <PreferenceCategory android:title=\"@string/various_dialog_window_blur_title\">\n        <SwitchPreference\n            android:defaultValue=\"false\"\n            android:key=\"prefs_key_various_dialog_window_blur\"\n            android:title=\"@string/various_dialog_window_blur\" />\n\n        <SeekBarPreferenceEx\n            android:key=\"prefs_key_various_dialog_window_blur_radius\"\n            android:dependency=\"prefs_key_various_dialog_window_blur\"                    \n            android:title=\"@string/various_dialog_window_blur_radius\"\n            android:defaultValue=\"60\"\n            app:format=\"%d dp\"\n            app:maxValue=\"300\"\n            app:showSeekBarValue=\"true\" />\n\n        <Preference\n            android:fragment=\"com.sevtinge.cemiuiler.ui.fragment.sub.CustomBackgroundSettings\"\n            android:key=\"prefs_key_various_dialog_bg_blur\"\n            android:title=\"@string/custom_background_blur_enabled\" />\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/various_location_simulation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/various_location_simulation_1_title\">\n\n        <EditTextPreference\n            android:title=\"@string/location_simulation_package_name\"\n            android:key=\"prefs_key_location_simulation_package_name\" />\n\n        <DropDownPreference\n            android:key=\"prefs_key_location_simulation_location\"\n            android:title=\"@string/location_simulation_location\"\n            app:entries=\"@array/location\"\n            app:entryValues=\"@array/location_value\"\n            android:defaultValue=\"0\" />\n\n        <EditTextPreference\n            android:title=\"@string/location_simulation_location_custom\"\n            android:key=\"prefs_key_location_simulation_location_custom\" />\n\n        <Preference android:title=\"@string/location_simulation_network\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/various_location_simulation_2_title\">\n\n        <EditTextPreference\n            android:title=\"@string/location_simulation_package_name\"\n            android:key=\"prefs_key_location_simulation_package_name2\" />\n\n        <DropDownPreference\n            android:key=\"prefs_key_location_simulation_location2\"\n            android:title=\"@string/location_simulation_location\"\n            app:entries=\"@array/location\"\n            app:entryValues=\"@array/location_value\"\n            android:defaultValue=\"0\" />\n\n        <EditTextPreference\n            android:title=\"@string/location_simulation_location_custom\"\n            android:key=\"prefs_key_location_simulation_location_custom2\" />\n\n        <Preference android:title=\"@string/location_simulation_network\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/various_location_simulation_3_title\">\n\n        <EditTextPreference\n            android:title=\"@string/location_simulation_package_name\"\n            android:key=\"prefs_key_location_simulation_package_name3\" />\n\n        <DropDownPreference\n            android:key=\"prefs_key_location_simulation_location3\"\n            android:title=\"@string/location_simulation_location\"\n            app:entries=\"@array/location\"\n            app:entryValues=\"@array/location_value\"\n            android:defaultValue=\"0\" />\n\n        <EditTextPreference\n            android:title=\"@string/location_simulation_location_custom\"\n            android:key=\"prefs_key_location_simulation_location_custom3\" />\n\n        <Preference android:title=\"@string/location_simulation_network\" />\n    </PreferenceCategory>\n\n    <PreferenceCategory android:title=\"@string/various_location_simulation_all_title\">\n\n        <DropDownPreference\n            android:title=\"@string/location_simulation_operator_fix\"\n            android:key=\"prefs_key_location_simulation_operator_fix\"\n            app:entries=\"@array/operator_fix\"\n            app:entryValues=\"@array/operator_fix_value\"\n            android:defaultValue=\"2\" />\n\n        <Preference android:title=\"@string/location_simulation_gps\" />\n        <EditTextPreference android:title=\"@string/location_simulation_mac\" />\n        <EditTextPreference android:title=\"@string/location_simulation_wifi\" />\n        <EditTextPreference android:title=\"@string/location_simulation_router_mac\" />\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/various_mipad.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory android:title=\"@string/various_mipad_input_title\">\n        <SwitchPreference\n            android:title=\"@string/various_mipad_input_close_magic_title\"\n            android:summary=\"@string/various_mipad_input_close_magic_desc\"\n            android:key=\"prefs_key_mipad_input_close_magic\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/various_mipad_input_restore_esc_title\"\n            android:summary=\"@string/various_mipad_input_restore_esc_desc\"\n            android:key=\"prefs_key_mipad_input_restore_esc\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/various_mipad_input_disable_bluetooth_title\"\n            android:summary=\"@string/various_mipad_input_disable_bluetooth_desc\"\n            android:key=\"prefs_key_mipad_input_disable_bluetooth\"\n            android:defaultValue=\"true\" />\n\n        <SwitchPreference\n            android:title=\"@string/various_mipad_input_ingore_gesture_title\"\n            android:summary=\"@string/various_mipad_input_ingore_gesture_desc\"\n            android:key=\"prefs_key_mipad_input_ingore_gesture\"\n            android:defaultValue=\"false\" />\n\n        <SwitchPreference\n            android:title=\"@string/various_mipad_input_need_finger_num_title\"\n            android:summary=\"@string/various_mipad_input_need_finger_num_desc\"\n            android:key=\"prefs_key_mipad_input_need_finger_num\"\n            android:defaultValue=\"false\" />\n\n        <DropDownPreference\n            android:key=\"prefs_key_mipad_input_bluetooth_version\"\n            android:title=\"@string/various_mipad_input_bluetooth_version_title\"\n            android:summary=\"@string/various_mipad_input_bluetooth_version_desc\"\n            android:defaultValue=\"2\"\n            app:entries=\"@array/mipad_input_bluetooth_version\"\n            app:entryValues=\"@array/mipad_input_bluetooth_version_value\" />\n            \n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "app/src/main/res/xml/weather.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <PreferenceCategory>\n        <DropDownPreference\n            android:key=\"prefs_key_weather_device_level\"\n            android:title=\"@string/weather_device_level_title\"\n            android:defaultValue=\"3\"\n            app:entries=\"@array/weather_device_level\"\n            app:entryValues=\"@array/weather_device_level_value\" />\n\n    </PreferenceCategory>\n    <Preference android:enabled=\"false\" />\n</PreferenceScreen>"
  },
  {
    "path": "build.gradle",
    "content": "buildscript {\n    ext {\n        agp_version = '8.3.0-alpha4'\n        agp_version1 = '8.1.1'\n    }\n}// Top-level build file where you can add configuration options common to all sub-projects/modules.\nplugins {\n    id 'com.android.application' version '8.1.2' apply false\n    id 'com.android.library' version '8.1.2' apply false\n    id(\"org.jetbrains.kotlin.android\") version '1.9.20' apply false\n}\n\ntasks.register('clean', Delete) {\n    delete rootProject.layout.buildDirectory\n}\n\napply from: \"config.gradle\"\n"
  },
  {
    "path": "config.gradle",
    "content": "/*ext {\n    CompileSdkVersion = 32  // 用于编译的SDK版本\n\n    ApplicationId = \"com.sevtinge.cemiuiler\" //包名\n    MinSdkVersion = 30    // 最低支持Android版本\n    TargetSdkVersion = 32   // 目标版本\n    VersionCode = 1006        //版本号\n    VersionName = \"1.0.0.6\"\n    isMinifyEnabled = false //是否混淆\n\n    appReleaseDir = \"D:\\\\apk\\\\\"\n    appReleaseTime =  new Date().format(\"yyyyMMddHHmm\")\n}*/\n\next {\n    XposedApiVersion = '82'\n    AndroidXCoreVersion = '1.12.0'\n    AndroidXCollectionVersion = '1.3.0'\n    AndroidXRecyclerviewVersion = '1.3.2'\n    AndroidXFragmentVersion = '1.7.0-alpha06'\n    AndroidXLifecycleVersion = '2.6.2'\n    AndroidXVectorDrawableVersion = '1.2.0-beta01'\n    AndroidXVectorDrawableAnimatedVersion = '1.1.0'\n    AndroidXCustomViewVersion = '1.2.0-alpha02'\n    AndroidXCustomViewPoolingContainerVersion = '1.0.0'\n    AndroidXConstraintLayoutVersion = '2.2.0-alpha13'\n\n    BuildTypes = \"release\"\n\n    //公共的(系统的)\n    roots = [\n            XposedApi : \"de.robv.android.xposed:api:${XposedApiVersion}\",\n\n            \"AndroidXCore\" : \"androidx.core:core:${AndroidXCoreVersion}\",\n            \"AndroidXCollection\" : \"androidx.collection:collection:${AndroidXCollectionVersion}\",\n            \"AndroidXRecyclerview\" : \"androidx.recyclerview:recyclerview:${AndroidXRecyclerviewVersion}\",\n            \"AndroidXFragment\" : \"androidx.fragment:fragment:${AndroidXFragmentVersion}\",\n            \"AndroidXLifecycle\" : \"androidx.lifecycle:lifecycle-common:${AndroidXLifecycleVersion}\",\n            \"AndroidXVectorDrawable\" : \"androidx.vectordrawable:vectordrawable:${AndroidXVectorDrawableVersion}\",\n            \"AndroidXVectorDrawableAnimated\" : \"androidx.vectordrawable:vectordrawable-animated:${AndroidXVectorDrawableAnimatedVersion}\",\n            \"AndroidXCustomView\" : \"androidx.customview:customview:${AndroidXCustomViewPoolingContainerVersion}\",\n            \"AndroidXCustomViewPoolingContainer\" : \"androidx.customview:customview-poolingcontainer:${AndroidXCustomViewPoolingContainerVersion}\",\n            \"AndroidXConstraintLayout\" : \"androidx.constraintlayout:constraintlayout:${AndroidXConstraintLayoutVersion}\",\n\n            \"animation\" : \"libs/animation-${BuildTypes}.aar\",\n            \"appcompat\" : \"libs/appcompat-${BuildTypes}.aar\",\n            \"core\" : \"libs/core-${BuildTypes}.aar\",\n            \"haptic\" : \"libs/haptic-${BuildTypes}.aar\",\n            \"preference\" : \"libs/preference-${BuildTypes}.aar\",\n            \"smooth\" : \"libs/smooth-${BuildTypes}.aar\",\n            \"springback\" : \"libs/springback-${BuildTypes}.aar\",\n    ]\n}\n"
  },
  {
    "path": "crowdin.yml",
    "content": "project_id_env: CROWDIN_PROJECT_ID\napi_token_env: CROWDIN_API_TOKEN\npull_request_title: '[translation] Update translation from Crowdin'\npreserve_hierarchy: true\n\nfiles:\n  - source: /app/src/main/res/values/strings.xml\n    translation: /app/src/main/res/values-%two_letters_code%/%original_file_name%\n    type: android\n    skip_untranslated_strings: true\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Sun Aug 20 20:29:27 CST 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\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# Enables namespacing of each library's R class so that its R class includes only the\n# resources declared in the library itself and none from the library's dependencies,\n# thereby reducing the size of the R class for that library\nandroid.nonTransitiveRClass=true\nandroid.suppressUnsupportedCompileSdk=34\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\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='\"-Xmx64m\" \"-Xms64m\"'\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\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 or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\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=`expr $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\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@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 Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\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=\"-Xmx64m\" \"-Xms64m\"\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 execute\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 execute\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:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\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 %*\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": "hidden-api/.gitignore",
    "content": "/build"
  },
  {
    "path": "hidden-api/build.gradle.kts",
    "content": "plugins {\n    id(\"com.android.library\")\n    id(\"org.jetbrains.kotlin.android\")\n}\n\nandroid {\n    compileSdk = 34\n    namespace = \"com.android.internal\"\n    buildTypes {\n        getByName(\"release\") {\n            isMinifyEnabled = false\n            setProguardFiles(listOf(getDefaultProguardFile(\"proguard-android-optimize.txt\"), \"proguard-rules.pro\"))\n        }\n        create(\"beta\") {\n            isMinifyEnabled = false\n            setProguardFiles(listOf(getDefaultProguardFile(\"proguard-android-optimize.txt\"), \"proguard-rules.pro\"))\n        }\n        create(\"canary\") {\n            isMinifyEnabled = false\n            setProguardFiles(listOf(getDefaultProguardFile(\"proguard-android-optimize.txt\"), \"proguard-rules.pro\"))\n        }\n        getByName(\"debug\") {\n            isMinifyEnabled = false\n            setProguardFiles(listOf(getDefaultProguardFile(\"proguard-android-optimize.txt\"), \"proguard-rules.pro\"))\n        }\n    }\n    compileOptions {\n        sourceCompatibility = JavaVersion.VERSION_19\n        targetCompatibility = JavaVersion.VERSION_19\n    }\n    kotlinOptions {\n        jvmTarget = JavaVersion.VERSION_19.majorVersion\n    }\n}\n\ndependencies {\n    implementation(\"androidx.annotation:annotation:1.7.0\")\n}\n"
  },
  {
    "path": "hidden-api/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": "hidden-api/src/main/java/android/view/ViewRootImpl.java",
    "content": "package android.view;\n\nimport android.os.Build;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.android.internal.graphics.drawable.BackgroundBlurDrawable;\n\npublic class ViewRootImpl {\n    @RequiresApi(Build.VERSION_CODES.S)\n    public BackgroundBlurDrawable createBackgroundBlurDrawable() {\n        throw new RuntimeException(\"Stub!\");\n    }\n}"
  },
  {
    "path": "hidden-api/src/main/java/com/android/internal/graphics/drawable/BackgroundBlurDrawable.java",
    "content": "package com.android.internal.graphics.drawable;\n\nimport android.graphics.drawable.Drawable;\nimport android.os.Build;\n\nimport androidx.annotation.RequiresApi;\n\n@RequiresApi(Build.VERSION_CODES.S)\npublic abstract class BackgroundBlurDrawable extends Drawable {\n}\n"
  },
  {
    "path": "hidden-api/src/main/java/miui/app/MiuiFreeFormManager.java",
    "content": "package miui.app;\n\npublic class MiuiFreeFormManager {\n}\n"
  },
  {
    "path": "hidden-api/src/main/java/miui/drm/DrmManager.kt",
    "content": "package miui.drm\n\nclass DrmManager {\n    enum class DrmResult {\n        DRM_SUCCESS\n    }\n}"
  },
  {
    "path": "hidden-api/src/main/java/miui/drm/ThemeReceiver.kt",
    "content": "package miui.drm\n\nclass ThemeReceiver"
  },
  {
    "path": "settings.gradle",
    "content": "pluginManagement {\n    repositories {\n        gradlePluginPortal()\n        google()\n        mavenCentral()\n    }\n}\n\n\ndependencyResolutionManagement {\n    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\n    repositories {\n        google()\n        mavenCentral()\n        maven {\n            url 'https://api.xposed.info'\n        }\n\n        maven { url 'https://jitpack.io' }\n    }\n}\nrootProject.name = \"Cemiuiler\"\ninclude ':app'\ninclude ':hidden-api'\n"
  },
  {
    "path": "signing.properties.example",
    "content": "storeFile=\nstorePassword=\nkeyAlias=\nkeyPassword=\n"
  }
]